Remove some accidentally committed code
[alure.git] / CMakeLists.txt
blobb793c376d5a5797794fa1050f8fccff6a872b9f0
1 cmake_minimum_required(VERSION 3.0)
2 project(alure)
4 IF(COMMAND CMAKE_POLICY)
5     CMAKE_POLICY(SET CMP0003 NEW)
6     CMAKE_POLICY(SET CMP0005 NEW)
7     IF(POLICY CMP0042)
8         CMAKE_POLICY(SET CMP0042 NEW)
9     ENDIF(POLICY CMP0042)
10 ENDIF(COMMAND CMAKE_POLICY)
12 set(CMAKE_MODULE_PATH "${alure_SOURCE_DIR}/cmake")
14 include(CheckCXXCompilerFlag)
15 include(CheckCXXSourceCompiles)
17 find_package(OpenAL REQUIRED)
19 set(CXX_FLAGS )
21 if(MSVC)
22     check_cxx_compiler_flag(/GR- HAVE_GRX_SWITCH)
23     if(HAVE_GRX_SWITCH)
24         set(CXX_FLAGS ${CXX_FLAGS} /GR-)
25     endif()
26 else()
27     check_cxx_compiler_flag(-std=c++11 HAVE_STD_CXX11)
28     if(HAVE_STD_CXX11)
29         set(CXX_FLAGS -std=c++11 ${CXX_FLAGS})
30     endif()
32     check_cxx_compiler_flag(-Wall HAVE_WALL_SWITCH)
33     if(HAVE_WALL_SWITCH)
34         set(CXX_FLAGS ${CXX_FLAGS} -Wall)
35     endif()
36     check_cxx_compiler_flag(-Wextra HAVE_WEXTRA_SWITCH)
37     if(HAVE_WEXTRA_SWITCH)
38         set(CXX_FLAGS ${CXX_FLAGS} -Wextra)
39     endif()
41     check_cxx_compiler_flag(-fno-rtti HAVE_NO_RTTI_SWITCH)
42     if(HAVE_NO_RTTI_SWITCH)
43         set(CXX_FLAGS ${CXX_FLAGS} -fno-rtti)
44     endif()
45 endif()
47 unset(EXPORT_DECL)
48 set(VISIBILITY_FLAGS )
49 if(WIN32)
50     set(EXPORT_DECL "__declspec(dllexport)")
51 else()
52     set(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
53     # Yes GCC, really don't accept visibility modes you don't support
54     set(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
56     check_cxx_source_compiles("int foo() __attribute__((visibility(\"default\")));
57                                 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
58     if(HAVE_GCC_DEFAULT_VISIBILITY)
59         set(EXPORT_DECL "__attribute__((visibility(\"default\")))")
60     endif()
62     if(HAVE_GCC_DEFAULT_VISIBILITY)
63         check_cxx_compiler_flag(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
64         if(HAVE_VISIBILITY_HIDDEN_SWITCH)
65             set(VISIBILITY_FLAGS ${VISIBILITY_FLAGS} -fvisibility=hidden)
66         endif()
67     endif()
69     set(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
70 endif()
73 set(LINKER_OPTS )
74 if(NOT MSVC)
75     option(ALURE_STATIC_GCCRT "Static-link libgcc and libstdc++ runtimes" OFF)
76     if(ALURE_STATIC_GCCRT)
77         set(OLD_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
78         set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -static-libgcc -static-libstdc++)
79         check_cxx_source_compiles(
80 "#include <vector>
81 int main()
83     std::vector<int> test;
84     return test.size();
86             HAVE_STATIC_GCCRT_SWITCHES
87         )
88         if(HAVE_STATIC_GCCRT_SWITCHES)
89             set(LINKER_OPTS ${LINKER_OPTS} -static-libgcc -static-libstdc++)
90         endif()
91         set(CMAKE_REQUIRED_LIBRARIES ${OLD_REQUIRED_LIBRARIES})
92         unset(OLD_REQUIRED_LIBRARIES)
93     endif()
94 endif()
97 set(alure_srcs src/devicemanager.cpp
98                src/device.cpp
99                src/context.cpp
100                src/buffer.cpp
101                src/source.cpp
102                src/sourcegroup.cpp
103                src/auxeffectslot.cpp
104                src/effect.cpp
106 set(alure_libs ${OPENAL_LIBRARY})
107 set(decoder_incls )
109 unset(HAVE_WAVE)
110 unset(HAVE_VORBISFILE)
111 unset(HAVE_LIBFLAC)
112 unset(HAVE_OPUSFILE)
113 unset(HAVE_LIBSNDFILE)
114 unset(HAVE_MPG123)
116 option(ALURE_ENABLE_WAVE    "Enables the built-in wave file decoder"     ON)
117 option(ALURE_ENABLE_VORBIS  "Enables the built-in libvorbisfile decoder" ON)
118 option(ALURE_ENABLE_FLAC    "Enables the built-in FLAC decoder"          ON)
119 option(ALURE_ENABLE_OPUS    "Enables the built-in libopusfile decoder"   ON)
120 option(ALURE_ENABLE_SNDFILE "Enables the built-in libsndfile decoder"    ON)
121 option(ALURE_ENABLE_MPG123  "Enables the built-in libmpg123 decoder"     ON)
123 if(ALURE_ENABLE_WAVE)
124     set(alure_srcs ${alure_srcs} src/decoders/wave.cpp)
125     set(HAVE_WAVE 1)
126 endif()
128 find_package(Ogg)
129 if(OGG_FOUND)
130     set(decoder_incls ${decoder_incls} ${OGG_INCLUDE_DIRS})
131     find_package(Vorbis)
132     if(VORBIS_FOUND AND ALURE_ENABLE_VORBIS)
133         set(decoder_incls ${decoder_incls} ${VORBIS_INCLUDE_DIRS})
134         set(alure_libs ${alure_libs} ${VORBIS_LIBRARIES})
135         set(alure_srcs ${alure_srcs} src/decoders/vorbisfile.cpp)
136         set(HAVE_VORBISFILE 1)
137     endif()
139     find_package(FLAC)
140     if(FLAC_FOUND AND ALURE_ENABLE_FLAC)
141         set(decoder_incls ${decoder_incls} ${FLAC_INCLUDE_DIRS})
142         set(alure_libs ${alure_libs} ${FLAC_LIBRARIES})
143         set(alure_srcs ${alure_srcs} src/decoders/flac.cpp)
144         set(HAVE_LIBFLAC 1)
145     endif()
147     find_package(Opus)
148     if(OPUS_FOUND AND ALURE_ENABLE_OPUS)
149         set(decoder_incls ${decoder_incls} ${OPUS_INCLUDE_DIRS})
150         set(alure_libs ${alure_libs} ${OPUS_LIBRARIES})
151         set(alure_srcs ${alure_srcs} src/decoders/opusfile.cpp)
152         set(HAVE_OPUSFILE 1)
153     endif()
154     set(alure_libs ${alure_libs} ${OGG_LIBRARIES})
155 endif()
157 find_package(SndFile)
158 if(SNDFILE_FOUND AND ALURE_ENABLE_SNDFILE)
159     set(decoder_incls ${decoder_incls} ${SNDFILE_INCLUDE_DIRS})
160     set(alure_libs ${alure_libs} ${SNDFILE_LIBRARIES})
161     set(alure_srcs ${alure_srcs} src/decoders/sndfile.cpp)
162     set(HAVE_LIBSNDFILE 1)
163 endif()
165 find_package(MPG123)
166 if(MPG123_FOUND AND ALURE_ENABLE_MPG123)
167     set(decoder_incls ${decoder_incls} ${MPG123_INCLUDE_DIRS})
168     set(alure_libs ${alure_libs} ${MPG123_LIBRARIES})
169     set(alure_srcs ${alure_srcs} src/decoders/mpg123.cpp)
170     set(HAVE_MPG123 1)
171 endif()
174 CONFIGURE_FILE(
175     "${alure_SOURCE_DIR}/config.h.in"
176     "${alure_BINARY_DIR}/config.h")
179 add_library(alure2 SHARED ${alure_srcs})
180 if(EXPORT_DECL)
181     target_compile_definitions(alure2 PRIVATE ALURE_API=${EXPORT_DECL})
182 endif()
183 target_include_directories(alure2
184     PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR}
185     PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR}
186             ${decoder_incls}
188 target_compile_options(alure2 PRIVATE ${CXX_FLAGS} ${VISIBILITY_FLAGS})
189 target_link_libraries(alure2 PUBLIC ${alure_libs} PRIVATE ${LINKER_OPTS})
191 add_library(alure2_s STATIC ${alure_srcs})
192 target_compile_definitions(alure2_s PUBLIC ALURE_STATIC_LIB)
193 target_include_directories(alure2_s
194     PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR}
195     PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR}
196             ${decoder_incls}
198 target_compile_options(alure2_s PRIVATE ${CXX_FLAGS} ${VISIBILITY_FLAGS})
199 target_link_libraries(alure2_s PUBLIC ${alure_libs})
201 if(NOT DEFINED LIB_SUFFIX)
202     set(LIB_SUFFIX "")
203 endif()
205 install(TARGETS alure2 alure2_s
206         RUNTIME DESTINATION bin
207         LIBRARY DESTINATION "lib${LIB_SUFFIX}"
208         ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
212 option(ALURE_BUILD_EXAMPLES "Build example programs" ON)
213 if(ALURE_BUILD_EXAMPLES)
214     add_executable(alure-enum examples/alure-enum.cpp)
215     target_compile_options(alure-enum PRIVATE ${CXX_FLAGS})
216     target_link_libraries(alure-enum PRIVATE alure2 ${LINKER_OPTS})
218     add_executable(alure-play examples/alure-play.cpp)
219     target_compile_options(alure-play PRIVATE ${CXX_FLAGS})
220     target_link_libraries(alure-play PRIVATE alure2 ${LINKER_OPTS})
222     add_executable(alure-stream examples/alure-stream.cpp)
223     target_compile_options(alure-stream PRIVATE ${CXX_FLAGS})
224     target_link_libraries(alure-stream PRIVATE alure2 ${LINKER_OPTS})
226     add_executable(alure-reverb examples/alure-reverb.cpp)
227     target_compile_options(alure-reverb PRIVATE ${CXX_FLAGS})
228     target_link_libraries(alure-reverb PRIVATE alure2 ${LINKER_OPTS})
230     add_executable(alure-hrtf examples/alure-hrtf.cpp)
231     target_compile_options(alure-hrtf PRIVATE ${CXX_FLAGS})
232     target_link_libraries(alure-hrtf PRIVATE alure2 ${LINKER_OPTS})
234     find_package(PhysFS)
235     if(PHYSFS_FOUND)
236         add_executable(alure-physfs examples/alure-physfs.cpp)
237         target_include_directories(alure-physfs PRIVATE ${PHYSFS_INCLUDE_DIR})
238         target_compile_options(alure-physfs PRIVATE ${CXX_FLAGS})
239         target_link_libraries(alure-physfs PRIVATE alure2 ${PHYSFS_LIBRARY} ${LINKER_OPTS})
240     endif()
242     find_package(DUMB)
243     if(DUMB_FOUND)
244         add_executable(alure-dumb examples/alure-dumb.cpp)
245         target_include_directories(alure-dumb PRIVATE ${DUMB_INCLUDE_DIRS})
246         target_compile_options(alure-dumb PRIVATE ${CXX_FLAGS})
247         target_link_libraries(alure-dumb PRIVATE alure2 ${DUMB_LIBRARIES} ${LINKER_OPTS})
248     endif()
249 endif()