Remove an errant early-out check
[dsound-openal.git] / CMakeLists.txt
blobf5f9b7241b7e171abe5083e0346152705a681d08
1 cmake_minimum_required(VERSION 3.0.2)
3 project(DSOAL C)
5 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
7 include(CheckCCompilerFlag)
8 include(CheckCSourceCompiles)
9 include(CheckTypeSize)
10 include(CheckIncludeFile)
11 include(GNUInstallDirs)
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
27     LICENSE
28     README.md)
30 set(DSOAL_OBJS
31     buffer.c
32     capture.c
33     dsound8.c
34     dsound_main.c
35     dsound_private.h
36     duplex.c
37     eax.c
38     eax.h
39     eax3.h
40     eax4.h
41     eax-presets.h
42     primary.c
43     propset.c
44     voiceman.c)
46 set(DSOAL_INC ${DSOAL_INC} ${DSOAL_BINARY_DIR} ${DSOAL_SOURCE_DIR}/include/AL)
49 check_type_size("long" SIZEOF_LONG)
50 set(DSOAL_DEFS ${DSOAL_DEFS} "SIZEOF_LONG=${SIZEOF_LONG}")
52 check_c_source_compiles("#include <intrin.h>
53 int main()
55     unsigned long idx = 0;
56     _BitScanForward64(&idx, 1);
57     return idx;
58 }" HAVE_BITSCANFORWARD64_INTRINSIC)
59 if(HAVE_BITSCANFORWARD64_INTRINSIC)
60     set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD64_INTRINSIC)
61 else()
62     check_c_source_compiles("#include <intrin.h>
63     int main()
64     {
65         unsigned long idx = 0;
66         _BitScanForward(&idx, 1);
67         return idx;
68     }" HAVE_BITSCANFORWARD_INTRINSIC)
69     if(HAVE_BITSCANFORWARD_INTRINSIC)
70         set(DSOAL_DEFS ${DSOAL_DEFS} HAVE_BITSCANFORWARD_INTRINSIC)
71     endif()
72 endif()
74 # MSVC workaround for C99 inline
75 if(MSVC)
76     check_c_source_compiles("inline void foo(void) { }
77                              int main() {return 0;}" HAVE_INLINE)
78     if(NOT HAVE_INLINE)
79         check_c_source_compiles("__inline void foo(void) { }
80                                  int main() {return 0;}" HAVE___INLINE)
81         if(NOT HAVE___INLINE)
82             message(FATAL_ERROR "No inline keyword found, please update your MSVC version!")
83         endif()
85         set(DSOAL_DEFS ${DSOAL_DEFS} inline=__inline)
86         set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Dinline=__inline")
87     endif()
88 endif()
90 if(NOT MSVC)
91     set(DSOAL_FLAGS ${DSOAL_FLAGS} -Winline -Wall)
92     check_c_compiler_flag(-Wextra HAVE_W_EXTRA)
93     if(HAVE_W_EXTRA)
94         set(DSOAL_FLAGS ${DSOAL_FLAGS} -Wextra)
95     endif()
96     set(DSOAL_LIBS ${DSOAL_LIBS} -static-libgcc)
97 endif()
98 if(NOT WIN32)
99     check_c_compiler_flag(-fvisibility=hidden HAVE_FVISIBILITY_HIDDEN)
100     if(HAVE_FVISIBILITY_HIDDEN)
101         set(DSOAL_FLAGS ${DSOAL_FLAGS} -fvisibility=hidden)
102     endif()
103 else()
104     if(MINGW)
105         set(CMAKE_RC_COMPILER_INIT windres)
106         set(CMAKE_RC_COMPILE_OBJECT
107             "<CMAKE_RC_COMPILER> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
108     endif(MINGW)
109     enable_language(RC)
111     set(DSOAL_OBJS ${DSOAL_OBJS} debug.c version.rc)
113     set(DSOAL_DEFS ${DSOAL_DEFS} _WIN32 WINVER=0x0600 DEBUG_INFO)
115     set(DSOAL_LIBS ${DSOAL_LIBS} winmm ole32)
116 endif()
117 set(DSOAL_DEFS ${DSOAL_DEFS} COBJMACROS)
119 if(MSVC)
120     if(CMAKE_SIZEOF_VOID_P MATCHES "8")
121         add_library(dsound SHARED ${DSOAL_OBJS} msvc64.def)
122     else()
123         add_library(dsound SHARED ${DSOAL_OBJS} msvc.def)
124     endif()
125     set(DSOAL_DEFS ${DSOAL_DEFS} _CRT_SECURE_NO_WARNINGS)
126     set(DSOAL_FLAGS ${DSOAL_FLAGS} /W3 /wd4090 /wd4113)
127 else()
128     add_library(dsound SHARED ${DSOAL_OBJS} mingw.def)
129 endif(MSVC)
131 if(WIN32)
132     set_target_properties(dsound PROPERTIES PREFIX "")
133 endif()
134 target_compile_definitions(dsound PRIVATE ${DSOAL_DEFS})
135 target_include_directories(dsound PRIVATE ${DSOAL_INC})
136 target_compile_options(dsound PRIVATE ${DSOAL_FLAGS})
137 target_link_libraries(dsound PRIVATE ${DSOAL_LIBS})
139 install(TARGETS dsound
140     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
141     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
142     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
143 if(EXISTS "${DSOAL_BINARY_DIR}/dsoal-aldrv.dll")
144     install(FILES
145         "${DSOAL_BINARY_DIR}/dsoal-aldrv.dll"
146         DESTINATION ${CMAKE_INSTALL_BINDIR})
147 endif()
149 target_sources(dsound PRIVATE ${DSOAL_TEXT})
150 install(FILES ${DSOAL_TEXT} TYPE DATA)
152 set(CPACK_GENERATOR "ZIP")
153 set(CPACK_PACKAGE_VENDOR "Chris Robinson")
154 set(CPACK_PACKAGE_VERSION ${VERSION})
155 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
156 set(CPACK_STRIP_FILES TRUE)
157 set(CPACK_OUTPUT_FILE_PREFIX packages)
159 include(CPack)