cmake_minimum_required(VERSION 3.21) project( radhook VERSION 1.1.0 DESCRIPTION "cross-platform function hooking library" LANGUAGES CXX ) option(BUILD_SHARED_LIBS "Build shared library" ON) option(RADHOOK_BUILD_TESTS "Build radhook tests" ${PROJECT_IS_TOP_LEVEL}) if(RADHOOK_BUILD_TESTS) include(CTest) enable_testing() add_subdirectory(tests) endif() add_library(radhook src/radhook.cpp src/memory.cpp src/x64disasm.cpp ) target_include_directories(radhook PUBLIC $ $ ) target_compile_features(radhook PUBLIC cxx_std_20) if(BUILD_SHARED_LIBS) target_compile_definitions(radhook PRIVATE RADHOOK_BUILD) target_compile_definitions(radhook INTERFACE RADHOOK_SHARED) endif() if(WIN32) target_compile_definitions(radhook PUBLIC RADIUM_PLATFORM_WINDOWS=1) elseif(ANDROID) target_compile_definitions(radhook PUBLIC RADIUM_PLATFORM_ANDROID=1) endif() if(MSVC) target_compile_options(radhook PRIVATE /W4 /permissive- ) else() target_compile_options(radhook PRIVATE -Wall -Wextra -Wpedantic ) endif() target_compile_options(radhook PRIVATE $<$: $<$:/O2 /GL> $<$>:-O3 -fvisibility=hidden> > ) target_link_options(radhook PRIVATE $<$: $<$:/OPT:REF /OPT:ICF> $<$>:-s> > ) if(MSVC) target_sources(radhook PRIVATE resources/version.rc) else() configure_file(cmake/watermark.cpp.i ${CMAKE_BINARY_DIR}/generated/watermark.cpp @ONLY) target_sources(radhook PRIVATE ${CMAKE_BINARY_DIR}/generated/watermark.cpp) endif() set_target_properties(radhook PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES ) include(GNUInstallDirs) install(TARGETS radhook EXPORT radhookTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( DIRECTORY include/radhook DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install( EXPORT radhookTargets FILE radhookTargets.cmake NAMESPACE Radium:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radhook ) include(CMakePackageConfigHelpers) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/radhookConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/radhookConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radhook ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/radhookConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/radhookConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/radhookConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/radhook )