1*a58d3d2aSXin Liif(__opus_config) 2*a58d3d2aSXin Li return() 3*a58d3d2aSXin Liendif() 4*a58d3d2aSXin Liset(__opus_config INCLUDED) 5*a58d3d2aSXin Li 6*a58d3d2aSXin Liinclude(OpusFunctions) 7*a58d3d2aSXin Li 8*a58d3d2aSXin Liconfigure_file(cmake/config.h.cmake.in config.h @ONLY) 9*a58d3d2aSXin Liadd_definitions(-DHAVE_CONFIG_H) 10*a58d3d2aSXin Li 11*a58d3d2aSXin Liset_property(GLOBAL PROPERTY USE_FOLDERS ON) 12*a58d3d2aSXin Li 13*a58d3d2aSXin Liif(MSVC) 14*a58d3d2aSXin Li # For compilers that have no notion of a C standard level, 15*a58d3d2aSXin Li # such as Microsoft Visual C++ before VS 16.7, 16*a58d3d2aSXin Li # this property has no effect. 17*a58d3d2aSXin Li set(CMAKE_C_STANDARD 11) 18*a58d3d2aSXin Lielse() 19*a58d3d2aSXin Li set(CMAKE_C_STANDARD 99) 20*a58d3d2aSXin Liendif() 21*a58d3d2aSXin Li 22*a58d3d2aSXin Liif(MSVC) 23*a58d3d2aSXin Li add_definitions(-D_CRT_SECURE_NO_WARNINGS) 24*a58d3d2aSXin Liendif() 25*a58d3d2aSXin Li 26*a58d3d2aSXin Liinclude(CFeatureCheck) 27*a58d3d2aSXin Lic_feature_check(VLA) 28*a58d3d2aSXin Li 29*a58d3d2aSXin Liinclude(CheckIncludeFile) 30*a58d3d2aSXin Licheck_include_file(alloca.h HAVE_ALLOCA_H) 31*a58d3d2aSXin Li 32*a58d3d2aSXin Liinclude(CheckSymbolExists) 33*a58d3d2aSXin Liif(HAVE_ALLOCA_H) 34*a58d3d2aSXin Li add_definitions(-DHAVE_ALLOCA_H) 35*a58d3d2aSXin Li check_symbol_exists(alloca "alloca.h" USE_ALLOCA_SUPPORTED) 36*a58d3d2aSXin Lielse() 37*a58d3d2aSXin Li check_symbol_exists(alloca "stdlib.h;malloc.h" USE_ALLOCA_SUPPORTED) 38*a58d3d2aSXin Liendif() 39*a58d3d2aSXin Li 40*a58d3d2aSXin Liinclude(CMakePushCheckState) 41*a58d3d2aSXin Licmake_push_check_state(RESET) 42*a58d3d2aSXin Liinclude(CheckLibraryExists) 43*a58d3d2aSXin Licheck_library_exists(m floor "" HAVE_LIBM) 44*a58d3d2aSXin Liif(HAVE_LIBM) 45*a58d3d2aSXin Li list(APPEND OPUS_REQUIRED_LIBRARIES m) 46*a58d3d2aSXin Li set(CMAKE_REQUIRED_LIBRARIES m) 47*a58d3d2aSXin Liendif() 48*a58d3d2aSXin Li 49*a58d3d2aSXin Licheck_symbol_exists(lrintf "math.h" HAVE_LRINTF) 50*a58d3d2aSXin Licheck_symbol_exists(lrint "math.h" HAVE_LRINT) 51*a58d3d2aSXin Licmake_pop_check_state() 52*a58d3d2aSXin Li 53*a58d3d2aSXin Liif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[0-9]86|x86|X86|amd64|AMD64|x86_64)") 54*a58d3d2aSXin Li if(CMAKE_SIZEOF_VOID_P EQUAL 8) 55*a58d3d2aSXin Li set(OPUS_CPU_X64 1) 56*a58d3d2aSXin Li else() 57*a58d3d2aSXin Li set(OPUS_CPU_X86 1) 58*a58d3d2aSXin Li endif() 59*a58d3d2aSXin Lielseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm|aarch64)") 60*a58d3d2aSXin Li set(OPUS_CPU_ARM 1) 61*a58d3d2aSXin Liendif() 62*a58d3d2aSXin Li 63*a58d3d2aSXin Liif(NOT OPUS_DISABLE_INTRINSICS) 64*a58d3d2aSXin Li opus_supports_cpu_detection(RUNTIME_CPU_CAPABILITY_DETECTION) 65*a58d3d2aSXin Liendif() 66*a58d3d2aSXin Li 67*a58d3d2aSXin Liif(OPUS_CPU_X86 OR OPUS_CPU_X64 AND NOT OPUS_DISABLE_INTRINSICS) 68*a58d3d2aSXin Li opus_detect_sse(COMPILER_SUPPORT_SIMD) 69*a58d3d2aSXin Lielseif(OPUS_CPU_ARM AND NOT OPUS_DISABLE_INTRINSICS) 70*a58d3d2aSXin Li opus_detect_neon(COMPILER_SUPPORT_NEON) 71*a58d3d2aSXin Li if(COMPILER_SUPPORT_NEON) 72*a58d3d2aSXin Li option(OPUS_USE_NEON "Option to enable NEON" ON) 73*a58d3d2aSXin Li option(OPUS_MAY_HAVE_NEON "Does runtime check for neon support" ON) 74*a58d3d2aSXin Li option(OPUS_PRESUME_NEON "Assume target CPU has NEON support" OFF) 75*a58d3d2aSXin Li if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") 76*a58d3d2aSXin Li set(OPUS_PRESUME_NEON ON) 77*a58d3d2aSXin Li elseif(CMAKE_SYSTEM_NAME MATCHES "iOS") 78*a58d3d2aSXin Li set(OPUS_PRESUME_NEON ON) 79*a58d3d2aSXin Li endif() 80*a58d3d2aSXin Li endif() 81*a58d3d2aSXin Liendif() 82*a58d3d2aSXin Li 83*a58d3d2aSXin Liif(MSVC) 84*a58d3d2aSXin Li check_flag(FAST_MATH /fp:fast) 85*a58d3d2aSXin Li check_flag(STACK_PROTECTOR /GS) 86*a58d3d2aSXin Li check_flag(STACK_PROTECTOR_DISABLED /GS-) 87*a58d3d2aSXin Lielse() 88*a58d3d2aSXin Li check_flag(FAST_MATH -ffast-math) 89*a58d3d2aSXin Li check_flag(STACK_PROTECTOR -fstack-protector-strong) 90*a58d3d2aSXin Li check_flag(HIDDEN_VISIBILITY -fvisibility=hidden) 91*a58d3d2aSXin Li set(FORTIFY_SOURCE_SUPPORTED 1) 92*a58d3d2aSXin Liendif() 93*a58d3d2aSXin Li 94*a58d3d2aSXin Liif(MINGW) 95*a58d3d2aSXin Li # For MINGW we need to link ssp lib for security features such as 96*a58d3d2aSXin Li # stack protector and fortify_sources 97*a58d3d2aSXin Li check_library_exists(ssp __stack_chk_fail "" HAVE_LIBSSP) 98*a58d3d2aSXin Li if(NOT HAVE_LIBSSP) 99*a58d3d2aSXin Li message(WARNING "Could not find libssp in MinGW, disabling STACK_PROTECTOR and FORTIFY_SOURCE") 100*a58d3d2aSXin Li set(STACK_PROTECTOR_SUPPORTED 0) 101*a58d3d2aSXin Li set(FORTIFY_SOURCE_SUPPORTED 0) 102*a58d3d2aSXin Li endif() 103*a58d3d2aSXin Liendif() 104*a58d3d2aSXin Li 105*a58d3d2aSXin Liif(MSVC) 106*a58d3d2aSXin Li # move cosmetic warnings to level 4 107*a58d3d2aSXin Li add_compile_options(/w44244 /w44305 /w44267) 108*a58d3d2aSXin Lielse() 109*a58d3d2aSXin Li set(WARNING_LIST -Wall -W -Wstrict-prototypes -Wextra -Wcast-align -Wnested-externs -Wshadow) 110*a58d3d2aSXin Li include(CheckCCompilerFlag) 111*a58d3d2aSXin Li foreach(WARNING_FLAG ${WARNING_LIST}) 112*a58d3d2aSXin Li string(REPLACE - "" WARNING_VAR ${WARNING_FLAG}) 113*a58d3d2aSXin Li check_c_compiler_flag(${WARNING_FLAG} ${WARNING_VAR}_SUPPORTED) 114*a58d3d2aSXin Li if(${WARNING_VAR}_SUPPORTED) 115*a58d3d2aSXin Li add_compile_options(${WARNING_FLAG}) 116*a58d3d2aSXin Li endif() 117*a58d3d2aSXin Li endforeach() 118*a58d3d2aSXin Liendif() 119