Files
libradhook/CMakeLists.txt
2026-07-03 22:00:03 +01:00

114 lines
2.6 KiB
CMake

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
)
target_include_directories(radhook
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
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
$<$<CONFIG:Release>:
$<$<CXX_COMPILER_ID:MSVC>:/O2 /GL>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-O3 -fvisibility=hidden>
>
)
target_link_options(radhook PRIVATE
$<$<CONFIG:Release>:
$<$<CXX_COMPILER_ID:MSVC>:/OPT:REF /OPT:ICF>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-s>
>
)
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
)