CMakeLists.txt (3623B)
1 cmake_minimum_required(VERSION 3.15) 2 3 option(RUNTIME_OPENSSL 4 "Load OpenSSL at runtime instead of linking against a specific version" OFF) 5 6 if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) 7 set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" 8 CACHE STRING "") 9 endif() 10 11 if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) 12 set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") 13 endif() 14 15 project(reapack LANGUAGES C CXX) 16 17 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 18 19 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 20 if(WIN32) 21 set(USER_CONFIG_DIR "$ENV{APPDATA}") 22 elseif(APPLE) 23 set(USER_CONFIG_DIR "~/Library/Application Support") 24 else() 25 set(USER_CONFIG_DIR "~/.config") 26 endif() 27 28 set(CMAKE_INSTALL_PREFIX "${USER_CONFIG_DIR}/REAPER" CACHE PATH 29 "REAPER resource path where to install ReaPack" FORCE) 30 endif() 31 32 if(CMAKE_OSX_ARCHITECTURES) 33 list(JOIN CMAKE_OSX_ARCHITECTURES "-" ARCH_NAME) 34 elseif(MSVC_CXX_ARCHITECTURE_ID) 35 set(ARCH_NAME ${MSVC_CXX_ARCHITECTURE_ID}) 36 else() 37 set(ARCH_NAME ${CMAKE_SYSTEM_PROCESSOR}) 38 endif() 39 40 STRING(TOLOWER "${ARCH_NAME}" ARCH_NAME) 41 42 set(CMAKE_CXX_EXTENSIONS OFF) 43 set(CMAKE_CXX_STANDARD_REQUIRED ON) 44 set(CMAKE_CXX_VISIBILITY_PRESET "hidden") 45 set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") 46 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 47 48 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL ON) 49 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON) 50 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO ON) 51 52 if(VCPKG_TOOLCHAIN) 53 set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL Release) 54 set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release) 55 endif() 56 57 if(WIN32) 58 foreach(arg 59 CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG 60 CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE 61 CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO 62 CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL 63 ) 64 # Embed debug information in the object files 65 string(REGEX REPLACE "/Z[iI]" "/Z7" ${arg} "${${arg}}") 66 endforeach() 67 68 add_compile_options( 69 # Exception handling model 70 /EHsc 71 72 # Enhance optimized debugging 73 $<$<NOT:$<CONFIG:Debug>>:/Zo> 74 75 # Eliminate duplicate strings 76 $<$<NOT:$<CONFIG:Debug>>:/GF> 77 78 # Enable function-level linking 79 $<$<NOT:$<CONFIG:Debug>>:/Gy> 80 81 # Remove unreferenced COMDAT 82 $<$<NOT:$<CONFIG:Debug>>:/Zc:inline> 83 ) 84 85 add_link_options( 86 # Remove unreferenced code 87 $<$<NOT:$<CONFIG:Debug>>:/OPT:REF> 88 89 # Remove duplicate sections 90 $<$<NOT:$<CONFIG:Debug>>:/OPT:ICF> 91 92 # Use relative path to the PDB file to avoid exposing the full path 93 /PDBALTPATH:%_PDB% 94 ) 95 else() 96 add_compile_options(-fsigned-char -fstack-protector-strong -fdiagnostics-color) 97 endif() 98 99 find_package(Ruby) 100 if(RUBY_FOUND) 101 add_custom_target(prepare 102 COMMAND ruby prepare.rb src/*.{{h,c}pp,mm} 103 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 104 ) 105 endif() 106 107 add_library(reaper_reapack SHARED) 108 set_target_properties(reaper_reapack PROPERTIES 109 PREFIX "" # disable the "lib" prefix 110 OUTPUT_NAME "reaper_reapack-${ARCH_NAME}" 111 ) 112 add_subdirectory(src) 113 target_link_libraries(reaper_reapack reapack) 114 115 add_subdirectory(test) 116 add_custom_target(test 117 COMMAND $<TARGET_FILE:tests> 118 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 119 USES_TERMINAL 120 ) 121 add_dependencies(test tests) 122 123 set(REAPER_USER_PLUGINS "UserPlugins") 124 install(TARGETS reaper_reapack 125 COMPONENT ReaPack 126 RUNTIME DESTINATION "${REAPER_USER_PLUGINS}" # Windows .dll 127 LIBRARY DESTINATION "${REAPER_USER_PLUGINS}" # Linux .so/macOS .dylib 128 )