Mark appropriate cmake target options as public or private
[alure.git] / CMakeLists.txt
blob8b87ea09f906f4c1a9cce62a65211d1f537d32ed
1 cmake_minimum_required(VERSION 2.6)
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 option(ALURE_USE_RTTI  "Enable run-time type information"  OFF)
20 option(ALURE_STATIC_GCCRT "Static-link libgcc and libstdc++ runtimes" OFF)
22 set(CXX_FLAGS )
23 check_cxx_compiler_flag(-std=c++11 HAVE_STD_CXX11)
24 if(HAVE_STD_CXX11)
25     set(CXX_FLAGS -std=c++11 ${CXX_FLAGS})
26 endif()
28 check_cxx_compiler_flag(-Wall HAVE_WALL_SWITCH)
29 if(HAVE_WALL_SWITCH)
30     set(CXX_FLAGS ${CXX_FLAGS} -Wall)
31 endif()
32 check_cxx_compiler_flag(-Wextra HAVE_WEXTRA_SWITCH)
33 if(HAVE_WEXTRA_SWITCH)
34     set(CXX_FLAGS ${CXX_FLAGS} -Wextra)
35 endif()
37 if(NOT ALURE_USE_RTTI)
38     check_cxx_compiler_flag(-fno-rtti HAVE_NO_RTTI_SWITCH)
39     if(HAVE_NO_RTTI_SWITCH)
40         set(CXX_FLAGS ${CXX_FLAGS} -fno-rtti)
41     else()
42         check_cxx_compiler_flag(/GR- HAVE_GRX_SWITCH)
43         if(HAVE_GRX_SWITCH)
44             set(CXX_FLAGS ${CXX_FLAGS} /GR-)
45         endif()
46     endif()
47 endif()
49 set(LINKER_OPTS )
50 if(ALURE_STATIC_GCCRT)
51     set(OLD_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
52     set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -static-libgcc -static-libstdc++)
53     check_cxx_source_compiles(
54 "#include <vector>
55 int main()
57     std::vector<int> test;
58     return test.size();
60         HAVE_STATIC_GCCRT_SWITCHES
61     )
62     if(HAVE_STATIC_GCCRT_SWITCHES)
63         set(LINKER_OPTS -static-libgcc -static-libstdc++)
64     endif()
65     set(CMAKE_REQUIRED_LIBRARIES ${OLD_REQUIRED_LIBRARIES})
66     unset(OLD_REQUIRED_LIBRARIES)
67 endif()
70 set(alure_srcs src/devicemanager.cpp
71                src/device.cpp
72                src/context.cpp
73                src/buffer.cpp
74                src/source.cpp
75                src/sourcegroup.cpp
76                src/auxeffectslot.cpp
77                src/effect.cpp
78                src/ringbuf.cpp
79                src/decoders/wave.cpp
81 set(alure_libs ${OPENAL_LIBRARY})
82 set(decoder_incls )
84 find_package(Ogg)
85 if(OGG_FOUND)
86     set(decoder_incls ${decoder_incls} ${OGG_INCLUDE_DIRS})
87     find_package(Vorbis)
88     if(VORBIS_FOUND)
89         set(decoder_incls ${decoder_incls} ${VORBIS_INCLUDE_DIRS})
90         set(alure_libs ${alure_libs} ${VORBIS_LIBRARIES})
91         set(alure_srcs ${alure_srcs} src/decoders/vorbisfile.cpp)
92         set(HAVE_VORBISFILE 1)
93     endif()
95     find_package(FLAC)
96     if(FLAC_FOUND)
97         set(decoder_incls ${decoder_incls} ${FLAC_INCLUDE_DIRS})
98         set(alure_libs ${alure_libs} ${FLAC_LIBRARIES})
99         set(alure_srcs ${alure_srcs} src/decoders/flac.cpp)
100         set(HAVE_LIBFLAC 1)
101     endif()
103     find_package(Opus)
104     if(OPUS_FOUND)
105         set(decoder_incls ${decoder_incls} ${OPUS_INCLUDE_DIRS})
106         set(alure_libs ${alure_libs} ${OPUS_LIBRARIES})
107         set(alure_srcs ${alure_srcs} src/decoders/opusfile.cpp)
108         set(HAVE_OPUSFILE 1)
109     endif()
110     set(alure_libs ${alure_libs} ${OGG_LIBRARIES})
111 endif()
113 find_package(SndFile)
114 if(SNDFILE_FOUND)
115     set(decoder_incls ${decoder_incls} ${SNDFILE_INCLUDE_DIRS})
116     set(alure_libs ${alure_libs} ${SNDFILE_LIBRARIES})
117     set(alure_srcs ${alure_srcs} src/decoders/sndfile.cpp)
118     set(HAVE_LIBSNDFILE 1)
119 endif()
121 find_package(MPG123)
122 if(MPG123_FOUND)
123     set(decoder_incls ${decoder_incls} ${MPG123_INCLUDE_DIRS})
124     set(alure_libs ${alure_libs} ${MPG123_LIBRARIES})
125     set(alure_srcs ${alure_srcs} src/decoders/mpg123.cpp)
126     set(HAVE_MPG123 1)
127 endif()
130 CONFIGURE_FILE(
131     "${alure_SOURCE_DIR}/config.h.in"
132     "${alure_BINARY_DIR}/config.h")
135 add_library(alure2 SHARED ${alure_srcs})
136 target_compile_definitions(alure2 PRIVATE ALURE_BUILD_DLL)
137 target_include_directories(alure2
138     PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR}
139     PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR}
140             ${decoder_incls}
142 target_compile_options(alure2 PRIVATE ${CXX_FLAGS})
143 target_link_libraries(alure2 PUBLIC ${alure_libs} PRIVATE ${LINKER_OPTS})
145 add_library(alure2_s STATIC ${alure_srcs})
146 target_compile_definitions(alure2_s PUBLIC ALURE_STATIC_LIB PRIVATE ALURE_BUILD_STATIC)
147 target_include_directories(alure2_s
148     PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR}
149     PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR}
150             ${decoder_incls}
152 target_compile_options(alure2_s PRIVATE ${CXX_FLAGS})
153 target_link_libraries(alure2_s PUBLIC ${alure_libs})
156 add_executable(alure-enum examples/alure-enum.cpp)
157 target_compile_options(alure-enum PRIVATE ${CXX_FLAGS})
158 target_link_libraries(alure-enum PRIVATE alure2)
160 add_executable(alure-play examples/alure-play.cpp)
161 target_compile_options(alure-play PRIVATE ${CXX_FLAGS})
162 target_link_libraries(alure-play PRIVATE alure2)
164 add_executable(alure-stream examples/alure-stream.cpp)
165 target_compile_options(alure-stream PRIVATE ${CXX_FLAGS})
166 target_link_libraries(alure-stream PRIVATE alure2)
168 add_executable(alure-reverb examples/alure-reverb.cpp)
169 target_compile_options(alure-reverb PRIVATE ${CXX_FLAGS})
170 target_link_libraries(alure-reverb PRIVATE alure2)
172 add_executable(alure-hrtf examples/alure-hrtf.cpp)
173 target_compile_options(alure-hrtf PRIVATE ${CXX_FLAGS})
174 target_link_libraries(alure-hrtf PRIVATE alure2)
176 find_package(PhysFS)
177 if(PHYSFS_FOUND)
178     add_executable(alure-physfs examples/alure-physfs.cpp)
179     target_include_directories(alure-physfs PRIVATE ${PHYSFS_INCLUDE_DIR})
180     target_compile_options(alure-physfs PRIVATE ${CXX_FLAGS})
181     target_link_libraries(alure-physfs PRIVATE alure2 ${PHYSFS_LIBRARY} ${LINKER_OPTS})
182 endif()
184 find_package(DUMB)
185 if(DUMB_FOUND)
186     add_executable(alure-dumb examples/alure-dumb.cpp)
187     target_include_directories(alure-dumb PRIVATE ${DUMB_INCLUDE_DIRS})
188     target_compile_options(alure-dumb PRIVATE ${CXX_FLAGS})
189     target_link_libraries(alure-dumb PRIVATE alure2 ${DUMB_LIBRARIES} ${LINKER_OPTS})
190 endif()
193 if(NOT DEFINED LIB_SUFFIX)
194     set(LIB_SUFFIX "")
195 endif()
197 install(TARGETS alure2 alure2_s
198         RUNTIME DESTINATION bin
199         LIBRARY DESTINATION "lib${LIB_SUFFIX}"
200         ARCHIVE DESTINATION "lib${LIB_SUFFIX}"