gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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)