@@ -8,90 +8,126 @@ endif()
88include (ExternalProject)
99set (CMOCKA_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR} /extern/src/cmocka_ext-build/src/libcmocka.a" )
1010
11+ # CMocka is the unit testing library we use.
1112ExternalProject_Add(cmocka_ext
1213 PREFIX extern
1314 URL "https://cmocka.org/files/1.1/cmocka-1.1.7.tar.xz"
1415 URL_HASH SHA256=810570eb0b8d64804331f82b29ff47c790ce9cd6b163e98d47a4807047ecad82
15- CONFIGURE_COMMAND cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ../cmocka_ext/
16- BUILD_COMMAND cmake --build . --config Release
16+ CMAKE_ARGS
17+ -DBUILD_SHARED_LIBS=OFF
18+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
19+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
1720 BUILD_BYPRODUCTS "${CMOCKA_LIB_FILE} "
1821 INSTALL_COMMAND ""
1922)
23+ set (CMOCKA_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /extern/src/cmocka_ext/include )
24+ add_library (cmocka STATIC IMPORTED )
25+ set_target_properties (cmocka PROPERTIES IMPORTED_LOCATION "${CMOCKA_LIB_FILE} " )
2026
21- set (use_built_libyaml false )
27+ # libyaml is used to parse the test files.
28+ # Normally it can be installed via the package managers,
29+ # but Windows and cross-compile targets might not have it.
30+ # So it builds it optionally as well.
31+ set (USE_BUILT_LIBYAML false )
2232find_library (libyaml NAMES libyaml yaml)
23-
2433if (NOT libyaml)
2534 # Build libyaml
26- set (use_built_libyaml true )
35+ set (USE_BUILT_LIBYAML true )
2736 message ("System libyaml: NO - Building it." )
28- set (LIBYAML_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libyaml_ext/src/.libs/libyaml.a" )
37+ set (LIBYAML_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libyaml_ext-build/libyaml.a" )
38+ set (LIBYAML_LIBRARY_DIRS "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libyaml_ext-build/" )
39+ set (LIBYAML_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libyaml_ext/include" )
2940 ExternalProject_Add(libyaml_ext
3041 PREFIX extern
3142 URL "https://github.com/yaml/libyaml/archive/refs/tags/0.2.5.tar.gz"
3243 URL_HASH SHA256=fa240dbf262be053f3898006d502d514936c818e422afdcf33921c63bed9bf2e
33- CMAKE_ARGS -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DBUILD_TESTING=OFF
44+ # URL "https://github.com/yaml/libyaml/archive/refs/tags/0.1.7.tar.gz"
45+ # URL_HASH SHA256=e1884d0fa1eec8cf869ac6bebbf25391e81956aa2970267f974a9fa5e0b968e2
46+ CMAKE_ARGS
47+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5
48+ -DBUILD_TESTING=OFF
49+ -DBUILD_SHARED_LIBS=OFF
50+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
51+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
3452 BUILD_BYPRODUCTS "${LIBYAML_LIB_FILE} "
35- BUILD_IN_SOURCE true
3653 INSTALL_COMMAND ""
3754 )
38- set (LIBYAML_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /extern/src/libyaml_ext/include )
3955 add_library (libyaml_built STATIC IMPORTED )
4056 set_target_properties (libyaml_built PROPERTIES IMPORTED_LOCATION "${LIBYAML_LIB_FILE} " )
57+ set_target_properties (libyaml_built PROPERTIES INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIRS} " )
58+ set_target_properties (libyaml_built PROPERTIES LIBRARY_DIRECTORIES "${LIBYAML_LIB_DIR} " )
4159else ()
4260 message ("System libyaml: YES" )
4361endif ()
4462
45- if ("${CMAKE_BUILD_TYPE} " STREQUAL "Debug" )
46- set (LIBCYAML_VARIANT "debug" )
47- else ()
48- set (LIBCYAML_VARIANT "release" )
49- endif ()
63+ # Libcyaml is a wrapper library around libyaml.
64+ # It parses the yaml files so we don't have to.
65+ # Sadly it has no CMakeLists.txt. So we patch it into.
66+ set (LIBCYAML_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext/include" )
5067
51- set (LIBCYAML_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext/build/${LIBCYAML_VARIANT} /libcyaml.a" )
68+ set (LIBCYAML_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext-build/lib/libcyaml_static.a" )
69+ set (LIBCYAML_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext-build/lib/" )
70+ set (LIBCYAML_SRC_DIR "${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext/" )
5271ExternalProject_Add(libcyaml_ext
5372 PREFIX extern
5473 URL "https://github.com/tlsa/libcyaml/archive/refs/tags/v1.4.2.tar.gz"
5574 URL_HASH SHA256=3211b2a0589ebfe02c563c96adce9246c0787be2af30353becbbd362998d16dc
56- CONFIGURE_COMMAND ""
57- BUILD_COMMAND make VARIANT=${LIBCYAML_VARIANT} PKG_CONFIG=pkg-config
75+ PATCH_COMMAND cmake -E copy_if_different ${EXTERNAL_PROJ_PATCH_DIR} /libcyaml/CMakeLists.txt ${LIBCYAML_SRC_DIR}
76+ CMAKE_ARGS
77+ -DUSE_BUILT_LIBYAML=${USE_BUILT_LIBYAML}
78+ -DLIBYAML_INCLUDE_DIRS=${LIBYAML_INCLUDE_DIRS}
79+ -DLIBYAML_LIBRARY_DIRS=${LIBYAML_LIBRARY_DIRS}
80+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
81+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
5882 BUILD_BYPRODUCTS "${LIBCYAML_LIB_FILE} "
59- BUILD_IN_SOURCE true
6083 INSTALL_COMMAND ""
6184)
62- set (CMOCKA_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /extern/src/cmocka_ext/include )
63- set (LIBCYAML_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /extern/src/libcyaml_ext/include )
64- add_library (cmocka STATIC IMPORTED )
85+
6586add_library (libcyaml STATIC IMPORTED )
66- set_target_properties (cmocka PROPERTIES IMPORTED_LOCATION "${CMOCKA_LIB_FILE} " )
6787set_target_properties (libcyaml PROPERTIES IMPORTED_LOCATION "${LIBCYAML_LIB_FILE} " )
88+ set_target_properties (libcyaml PROPERTIES INCLUDE_DIRECTORIES "${LIBCYAML_INCLUDE_DIR} " )
89+ set_target_properties (libcyaml PROPERTIES LIBRARY_DIRECTORIES "${LIBCYAML_LIBRARY_DIR} " )
90+ if (USE_BUILT_LIBYAML)
91+ add_dependencies (libcyaml libyaml_ext)
92+ add_dependencies (libcyaml ${libyaml_built} )
93+ target_link_libraries (libcyaml PUBLIC ${libyaml_built} )
94+ else ()
95+ add_dependencies (libcyaml ${libyaml} )
96+ target_link_libraries (libcyaml PUBLIC ${libyaml} )
97+ endif ()
6898
99+ # The final cstest binary and library.
69100set (CSTEST_INCLUDE_DIR ${CSTEST_DIR} /include )
70101file (GLOB CSTEST_SRC ${CSTEST_DIR} /src/*.c)
71102add_executable (cstest ${CSTEST_SRC} )
72103add_library (libcstest STATIC ${CSTEST_SRC} )
104+
73105add_dependencies (cstest cmocka_ext)
74106add_dependencies (cstest libcyaml_ext)
75- if (use_built_libyaml)
76- target_link_libraries (cstest PUBLIC capstone cmocka libcyaml ${libyaml_built} )
77- target_link_libraries (libcstest PUBLIC capstone cmocka libcyaml ${libyaml_built} )
107+ add_dependencies (libcstest cmocka_ext)
108+ add_dependencies (libcstest libcyaml_ext)
109+
110+ if (USE_BUILT_LIBYAML)
111+ target_link_libraries (cstest PUBLIC capstone cmocka libcyaml libyaml_built)
112+ target_link_libraries (libcstest PUBLIC capstone cmocka libcyaml libyaml_built)
78113else ()
79114 target_link_libraries (cstest PUBLIC capstone cmocka libcyaml ${libyaml} )
80115 target_link_libraries (libcstest PUBLIC capstone cmocka libcyaml ${libyaml} )
81116endif ()
117+
82118target_include_directories (cstest PRIVATE
83119 ${PROJECT_SOURCE_DIR} /include >
84120 ${CSTEST_INCLUDE_DIR}
85121 ${CMOCKA_INCLUDE_DIR}
86122 ${LIBCYAML_INCLUDE_DIR}
87- ${LIBYAML_INCLUDE_DIR }
123+ ${LIBYAML_INCLUDE_DIRS }
88124 )
89125target_include_directories (libcstest PRIVATE
90126 ${PROJECT_SOURCE_DIR} /include >
91127 ${CSTEST_INCLUDE_DIR}
92128 ${CMOCKA_INCLUDE_DIR}
93129 ${LIBCYAML_INCLUDE_DIR}
94- ${LIBYAML_INCLUDE_DIR }
130+ ${LIBYAML_INCLUDE_DIRS }
95131 )
96132
97133# Unit tests for cstest
0 commit comments