reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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 )