base.cmake (4682B)
1 if(NOT CMAKE_BUILD_TYPE) 2 set(CMAKE_BUILD_TYPE Release) 3 endif() 4 5 if(MSVC) 6 # https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html#variable:CMAKE_MSVC_RUNTIME_LIBRARY 7 cmake_policy(SET CMP0091 NEW) 8 set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") 9 set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221") 10 11 # /O2 Full Optimization (Favor Speed) 12 # /GS- disable security checks 13 # /fp:fast 14 # /Oy omit frame pointers 15 # /GT enable fiber-safe optimizations 16 # /GL Whole Program Optimization 17 # /Zi Generate Debug Info PDB 18 # /Oi Enable Intrinsic Functions 19 # /Ot Favor Fast Code 20 # /permissive- Standards Conformance 21 # /MP Multiprocessor Compilation 22 23 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /O2 /GS- /fp:fast /Oy /GT /GL /Zi /Oi /Ot") 24 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2 /GS- /fp:fast /Oy /GT /GL /Zi /Oi /Ot") 25 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive- /MP") 26 27 set(ARCHITECTURE ${CMAKE_VS_PLATFORM_NAME}) 28 29 if(NOT ${CMAKE_VS_PLATFORM_NAME} STREQUAL "x64") 30 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:SSE2") 31 endif() 32 33 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /D_CRT_SECURE_NO_WARNINGS") 34 35 set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") 36 set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG /DEBUG") 37 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG /DEBUG") 38 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /DEBUG") 39 40 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /SAFESEH:NO") 41 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") 42 elseif(APPLE) 43 # set(ARCHITECTURE ${CMAKE_OSX_ARCHITECTURES}) 44 set(ARCHITECTURE "MacOS") 45 set(OS_LINK_LIBRARIES 46 "-framework Accelerate" 47 "-framework ApplicationServices" 48 "-framework AudioUnit" 49 "-framework AudioToolbox" 50 "-framework Carbon" 51 "-framework CoreAudio" 52 "-framework CoreAudioKit" 53 "-framework CoreServices" 54 "-framework CoreText" 55 "-framework Cocoa" 56 "-framework CoreFoundation" 57 "-framework OpenGL" 58 "-framework QuartzCore" 59 ) 60 string(APPEND CMAKE_C_FLAGS_RELEASE " -funroll-loops -Ofast -flto -fno-stack-protector") 61 string(APPEND CMAKE_CXX_FLAGS_RELEASE " -funroll-loops -Ofast -flto -fno-stack-protector") 62 else() 63 message("CMAKE_SYSTEM_PROCESSOR: " ${CMAKE_SYSTEM_PROCESSOR}) 64 message("CMAKE_HOST_SYSTEM_PROCESSOR: " ${CMAKE_HOST_SYSTEM_PROCESSOR}) 65 66 if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES arm AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) 67 string(APPEND CMAKE_CXX_FLAGS " -msse") 68 endif() 69 70 # GCC <= 11 has LTO issues 71 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 11.4 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13.2.0)) 72 message(WARNING "LTO disabled due to detected GCC version causing issues") 73 else() 74 cmake_policy(SET CMP0069 NEW) 75 include(CheckIPOSupported) 76 77 check_ipo_supported(RESULT result) 78 if(result) 79 message(STATUS "IPO is supported") 80 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) 81 else() 82 message(WARNING "IPO is not supported") 83 endif() 84 endif() 85 86 string(APPEND CMAKE_C_FLAGS_RELEASE " -Ofast -fno-stack-protector") 87 string(APPEND CMAKE_CXX_FLAGS_RELEASE " -Ofast -fno-stack-protector") 88 string(APPEND CMAKE_CXX_FLAGS_DEBUG " -rdynamic") 89 90 execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE) 91 92 # Good atomics are important on aarch64, they exist on ARMv8.1a or higher 93 # Check some known common machines and tell compiler if present 94 execute_process(COMMAND uname -a COMMAND tr -d '\n' OUTPUT_VARIABLE UNAME_A) 95 if( 96 UNAME_A MATCHES rk3588 # Orange Pi 5 variants 97 OR 98 UNAME_A MATCHES rock-5b # Raxda Rock 5B 99 OR 100 UNAME_A MATCHES rpi-2712 # Raspberry Pi 5 101 ) 102 string(APPEND CMAKE_CXX_FLAGS " -march=armv8.2-a") 103 string(APPEND CMAKE_C_FLAGS " -march=armv8.2-a") 104 endif() 105 endif() 106 107 message( STATUS "Architecture: ${ARCHITECTURE}" ) 108 message( STATUS "Compiler Arguments: ${CMAKE_CXX_FLAGS}" ) 109 message( STATUS "Compiler Arguments (Release): ${CMAKE_CXX_FLAGS_RELEASE}" ) 110 message( STATUS "Compiler Arguments (Debug): ${CMAKE_CXX_FLAGS_DEBUG}" ) 111 message( STATUS "Build Configration: ${CMAKE_BUILD_TYPE}" ) 112 113 # VST3 SDK needs these 114 if(CMAKE_BUILD_TYPE STREQUAL "Debug") 115 add_definitions(/D_DEBUG) 116 else() 117 add_definitions(/DRELEASE) 118 endif() 119 120 # we need C++17 121 set(CMAKE_CXX_STANDARD 17) 122 set(CMAKE_CXX_STANDARD_REQUIRED True) 123 124 if(UNIX AND NOT APPLE) 125 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 126 endif() 127 128 set(PA_DISABLE_INSTALL ON) 129 set(PA_BUILD_SHARED OFF)