Don't static initialize a critical section
[dsound-openal.git] / CMakeLists.txt
blob140f957eb0b8f77e5baaefd0e01282b268f8bb34
1 cmake_minimum_required(VERSION 3.0.2)
3 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
5 include(CheckCCompilerFlag)
6 include(CheckCSourceCompiles)
7 include(CheckTypeSize)
8 include(CheckIncludeFile)
10 project(DSOAL C)
13 IF(NOT CMAKE_BUILD_TYPE)
14     SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
15         "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
16         FORCE)
17 ENDIF()
19 set(DSOAL_DEFS "")
20 set(DSOAL_INC "")
21 set(DSOAL_FLAGS "")
22 set(DSOAL_LIBS "")
24 set(DSOAL_OBJS buffer.c
25                capture.c
26                chorus.c
27                dsound8.c
28                dsound_main.c
29                dsound_private.h
30                duplex.c
31                eax.c
32                eax4.c
33                eax.h
34                eax3.h
35                eax4.h
36                eax-presets.h
37                primary.c
38                propset.c
39                reverb.c)
41 set(DSOAL_INC ${DSOAL_INC} ${DSOAL_BINARY_DIR} ${DSOAL_SOURCE_DIR}/include/AL)
44 check_type_size("long" SIZEOF_LONG)
45 set(DSOAL_DEFS ${DSOAL_DEFS} "SIZEOF_LONG=${SIZEOF_LONG}")
47 check_c_source_compiles("#include <intrin.h>
48 int main()
50     unsigned long idx = 0;
51     _BitScanForward64(&idx, 1);
52     return idx;
53 }" HAVE_BITSCANFORWARD64_INTRINSIC)
54 if(HAVE_BITSCANFORWARD64_INTRINSIC)
55     set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD64_INTRINSIC)
56 else()
57     check_c_source_compiles("#include <intrin.h>
58     int main()
59     {
60         unsigned long idx = 0;
61         _BitScanForward(&idx, 1);
62         return idx;
63     }" HAVE_BITSCANFORWARD_INTRINSIC)
64     if(HAVE_BITSCANFORWARD_INTRINSIC)
65         set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD_INTRINSIC)
66     endif()
67 endif()
69 # MSVC workaround for C99 inline
70 if(MSVC)
71     check_c_source_compiles("inline void foo(void) { }
72                              int main() {return 0;}" HAVE_INLINE)
73     if(NOT HAVE_INLINE)
74         check_c_source_compiles("__inline void foo(void) { }
75                                  int main() {return 0;}" HAVE___INLINE)
76         if(NOT HAVE___INLINE)
77             message(FATAL_ERROR "No inline keyword found, please update your MSVC version!")
78         endif()
80         set(DSOAL_DEFS ${DSOAL_DEFS} inline=__inline)
81         set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Dinline=__inline")
82     endif()
83 endif()
85 if(NOT MSVC)
86     set(DSOAL_FLAGS ${DSOAL_FLAGS} -Winline -Wall)
87     check_c_compiler_flag(-Wextra HAVE_W_EXTRA)
88     if(HAVE_W_EXTRA)
89         set(DSOAL_FLAGS ${DSOAL_FLAGS} -Wextra)
90     endif()
91     set(DSOAL_LIBS ${DSOAL_LIBS} -static-libgcc)
92 endif()
93 if(NOT WIN32)
94     check_c_compiler_flag(-fvisibility=hidden HAVE_FVISIBILITY_HIDDEN)
95     if(HAVE_FVISIBILITY_HIDDEN)
96         set(DSOAL_FLAGS ${DSOAL_FLAGS} -fvisibility=hidden)
97     endif()
98 else()
99     if(MINGW)
100         set(CMAKE_RC_COMPILER_INIT windres)
101         set(CMAKE_RC_COMPILE_OBJECT
102             "<CMAKE_RC_COMPILER> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
103     endif(MINGW)
104     enable_language(RC)
106     set(DSOAL_OBJS ${DSOAL_OBJS} debug.c version.rc)
108     set(DSOAL_DEFS ${DSOAL_DEFS} _WIN32 WINVER=0x0600 DEBUG_INFO)
110     set(DSOAL_LIBS ${DSOAL_LIBS} winmm ole32)
111 endif()
112 set(DSOAL_DEFS ${DSOAL_DEFS} COBJMACROS)
114 if(MSVC)
115     add_library(dsound SHARED ${DSOAL_OBJS} msvc.def)
116     set(DSOAL_DEFS ${DSOAL_DEFS} _CRT_SECURE_NO_WARNINGS)
117     set(DSOAL_FLAGS ${DSOAL_FLAGS} /W3 /wd4090 /wd4113)
118 else()
119     add_library(dsound SHARED ${DSOAL_OBJS} mingw.def)
120 endif(MSVC)
122 if(WIN32)
123     set_target_properties(dsound PROPERTIES PREFIX "")
124 endif()
125 target_compile_definitions(dsound PRIVATE ${DSOAL_DEFS})
126 target_include_directories(dsound PRIVATE ${DSOAL_INC})
127 target_compile_options(dsound PRIVATE ${DSOAL_FLAGS})
128 target_link_libraries(dsound PRIVATE ${DSOAL_LIBS})