cmake_minimum_required(VERSION 3.15) # Enable DOWNLOAD_EXTRACT_TIMESTAMP if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() include(ExternalProject) find_library(libyaml NAMES libyaml yaml REQUIRED) set(CMOCKA_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR}/extern/src/cmocka_ext-build/src/libcmocka.a") ExternalProject_Add(cmocka_ext PREFIX extern URL "https://cmocka.org/files/1.1/cmocka-1.1.7.tar.xz" URL_HASH SHA256=810570eb0b8d64804331f82b29ff47c790ce9cd6b163e98d47a4807047ecad82 CONFIGURE_COMMAND cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ../cmocka_ext/ BUILD_COMMAND cmake --build . --config Release BUILD_BYPRODUCTS "${CMOCKA_LIB_FILE}" INSTALL_COMMAND "" ) if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set(LIBCYAML_VARIANT "debug") else() set(LIBCYAML_VARIANT "release") endif() set(LIBCYAML_LIB_FILE "${CMAKE_CURRENT_BINARY_DIR}/extern/src/libcyaml_ext/build/${LIBCYAML_VARIANT}/libcyaml.a") ExternalProject_Add(libcyaml_ext PREFIX extern URL "https://github.com/tlsa/libcyaml/archive/refs/tags/v1.4.2.tar.gz" URL_HASH SHA256=3211b2a0589ebfe02c563c96adce9246c0787be2af30353becbbd362998d16dc CONFIGURE_COMMAND "" BUILD_COMMAND make VARIANT=${LIBCYAML_VARIANT} PKG_CONFIG=pkg-config BUILD_BYPRODUCTS "${LIBCYAML_LIB_FILE}" BUILD_IN_SOURCE true INSTALL_COMMAND "" ) set(CMOCKA_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/extern/src/cmocka_ext/include) set(LIBCYAML_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/extern/src/libcyaml_ext/include) add_library(cmocka STATIC IMPORTED) add_library(libcyaml STATIC IMPORTED) set_target_properties(cmocka PROPERTIES IMPORTED_LOCATION "${CMOCKA_LIB_FILE}") set_target_properties(libcyaml PROPERTIES IMPORTED_LOCATION "${LIBCYAML_LIB_FILE}") set(CSTEST_INCLUDE_DIR ${CSTEST_DIR}/include) file(GLOB CSTEST_SRC ${CSTEST_DIR}/src/*.c) add_executable(cstest ${CSTEST_SRC}) add_library(libcstest STATIC ${CSTEST_SRC}) add_dependencies(cstest cmocka_ext) add_dependencies(cstest libcyaml_ext) target_link_libraries(cstest PUBLIC capstone cmocka libcyaml ${libyaml}) target_link_libraries(libcstest PUBLIC capstone cmocka libcyaml ${libyaml}) target_include_directories(cstest PRIVATE ${PROJECT_SOURCE_DIR}/include> ${CSTEST_INCLUDE_DIR} ${CMOCKA_INCLUDE_DIR} ${LIBCYAML_INCLUDE_DIR} ) target_include_directories(libcstest PRIVATE ${PROJECT_SOURCE_DIR}/include> ${CSTEST_INCLUDE_DIR} ${CMOCKA_INCLUDE_DIR} ${LIBCYAML_INCLUDE_DIR} ) # Unit tests for cstest set(CSTEST_TEST_DIR ${CSTEST_DIR}/test/) add_subdirectory(${CSTEST_TEST_DIR}) # Test targets add_test(MCTests cstest ${PROJECT_SOURCE_DIR}/tests/MC WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) add_test(DetailTests cstest ${PROJECT_SOURCE_DIR}/tests/details WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) add_test(IssueTests cstest ${PROJECT_SOURCE_DIR}/tests/issues WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) add_test(FeaturesTests cstest ${PROJECT_SOURCE_DIR}/tests/features WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} ) if(CAPSTONE_INSTALL) install(TARGETS cstest EXPORT capstone-targets DESTINATION ${CMAKE_INSTALL_BINDIR}) endif()