xref: /aosp_15_r20/external/libopus/cmake/OpusConfig.cmake (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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