Reduce MAX_HWBUFFERS to 128
[dsound-openal.git] / CMakeLists.txt
blobad82d0d4d9f7f6bf4d18e8486c953a75c0fd1e91
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)
9 include(GNUInstallDirs)
11 project(DSOAL C)
13 set(VERSION 0.9)
15 IF(NOT CMAKE_BUILD_TYPE)
16     SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
17         "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
18         FORCE)
19 ENDIF()
21 set(DSOAL_DEFS "")
22 set(DSOAL_INC "")
23 set(DSOAL_FLAGS "")
24 set(DSOAL_LIBS "")
26 set(DSOAL_TEXT LICENSE
27                README.md)
29 set(DSOAL_OBJS buffer.c
30                capture.c
31                chorus.c
32                dsound8.c
33                dsound_main.c
34                dsound_private.h
35                duplex.c
36                eax.c
37                eax4.c
38                eax.h
39                eax3.h
40                eax4.h
41                eax-presets.h
42                primary.c
43                propset.c
44                reverb.c
45                voiceman.c)
47 set(DSOAL_INC ${DSOAL_INC} ${DSOAL_BINARY_DIR} ${DSOAL_SOURCE_DIR}/include/AL)
50 check_type_size("long" SIZEOF_LONG)
51 set(DSOAL_DEFS ${DSOAL_DEFS} "SIZEOF_LONG=${SIZEOF_LONG}")
53 check_c_source_compiles("#include <intrin.h>
54 int main()
56     unsigned long idx = 0;
57     _BitScanForward64(&idx, 1);
58     return idx;
59 }" HAVE_BITSCANFORWARD64_INTRINSIC)
60 if(HAVE_BITSCANFORWARD64_INTRINSIC)
61     set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD64_INTRINSIC)
62 else()
63     check_c_source_compiles("#include <intrin.h>
64     int main()
65     {
66         unsigned long idx = 0;
67         _BitScanForward(&idx, 1);
68         return idx;
69     }" HAVE_BITSCANFORWARD_INTRINSIC)
70     if(HAVE_BITSCANFORWARD_INTRINSIC)
71         set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD_INTRINSIC)
72     endif()
73 endif()
75 # MSVC workaround for C99 inline
76 if(MSVC)
77     check_c_source_compiles("inline void foo(void) { }
78                              int main() {return 0;}" HAVE_INLINE)
79     if(NOT HAVE_INLINE)
80         check_c_source_compiles("__inline void foo(void) { }
81                                  int main() {return 0;}" HAVE___INLINE)
82         if(NOT HAVE___INLINE)
83             message(FATAL_ERROR "No inline keyword found, please update your MSVC version!")
84         endif()
86         set(DSOAL_DEFS ${DSOAL_DEFS} inline=__inline)
87         set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Dinline=__inline")
88     endif()
89 endif()
91 if(NOT MSVC)
92     set(DSOAL_FLAGS ${DSOAL_FLAGS} -Winline -Wall)
93     check_c_compiler_flag(-Wextra HAVE_W_EXTRA)
94     if(HAVE_W_EXTRA)
95         set(DSOAL_FLAGS ${DSOAL_FLAGS} -Wextra)
96     endif()
97     set(DSOAL_LIBS ${DSOAL_LIBS} -static-libgcc)
98 endif()
99 if(NOT WIN32)
100     check_c_compiler_flag(-fvisibility=hidden HAVE_FVISIBILITY_HIDDEN)
101     if(HAVE_FVISIBILITY_HIDDEN)
102         set(DSOAL_FLAGS ${DSOAL_FLAGS} -fvisibility=hidden)
103     endif()
104 else()
105     if(MINGW)
106         set(CMAKE_RC_COMPILER_INIT windres)
107         set(CMAKE_RC_COMPILE_OBJECT
108             "<CMAKE_RC_COMPILER> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
109     endif(MINGW)
110     enable_language(RC)
112     set(DSOAL_OBJS ${DSOAL_OBJS} debug.c version.rc)
114     set(DSOAL_DEFS ${DSOAL_DEFS} _WIN32 WINVER=0x0600 DEBUG_INFO)
116     set(DSOAL_LIBS ${DSOAL_LIBS} winmm ole32)
117 endif()
118 set(DSOAL_DEFS ${DSOAL_DEFS} COBJMACROS)
120 if(MSVC)
121     if(CMAKE_SIZEOF_VOID_P MATCHES "8")
122         add_library(dsound SHARED ${DSOAL_OBJS} msvc64.def)
123     else()
124         add_library(dsound SHARED ${DSOAL_OBJS} msvc.def)
125     endif()
126     set(DSOAL_DEFS ${DSOAL_DEFS} _CRT_SECURE_NO_WARNINGS)
127     set(DSOAL_FLAGS ${DSOAL_FLAGS} /W3 /wd4090 /wd4113)
128 else()
129     add_library(dsound SHARED ${DSOAL_OBJS} mingw.def)
130 endif(MSVC)
132 if(WIN32)
133     set_target_properties(dsound PROPERTIES PREFIX "")
134 endif()
135 target_compile_definitions(dsound PRIVATE ${DSOAL_DEFS})
136 target_include_directories(dsound PRIVATE ${DSOAL_INC})
137 target_compile_options(dsound PRIVATE ${DSOAL_FLAGS})
138 target_link_libraries(dsound PRIVATE ${DSOAL_LIBS})
140 install(TARGETS dsound
141     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
142     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
143     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
144 if(EXISTS "${DSOAL_BINARY_DIR}/dsoal-aldrv.dll")
145     install(FILES
146         "${DSOAL_BINARY_DIR}/dsoal-aldrv.dll"
147         DESTINATION ${CMAKE_INSTALL_BINDIR})
148 endif()
150 target_sources(dsound PRIVATE ${DSOAL_TEXT})
151 install(FILES ${DSOAL_TEXT} TYPE DATA)
153 set(CPACK_GENERATOR "ZIP")
154 set(CPACK_PACKAGE_VENDOR "Chris Robinson")
155 set(CPACK_PACKAGE_VERSION ${VERSION})
156 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
157 set(CPACK_STRIP_FILES TRUE)
158 set(CPACK_OUTPUT_FILE_PREFIX packages)
160 include(CPack)