Skip to content

Commit 0c7ee1c

Browse files
rkitoverflibitijibibo
authored andcommitted
build: separate shared and static import targets
Export the FAudio::FAudio-shared target when building a shared library and the FAudio::FAudio-static target when building a static library to separate target files so that both can be installed at the same time. Alias FAudio::FAudio to the shared library if it is installed and the static library otherwise in the Config. Signed-off-by: Rafael Kitover <[email protected]>
1 parent b6e699d commit 0c7ee1c

File tree

2 files changed

+60
-33
lines changed

2 files changed

+60
-33
lines changed

CMakeLists.txt

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,14 @@ if(INSTALL_MINGW_DEPENDENCIES)
6464
include(cmake/install_shared_libs.cmake)
6565
endif()
6666

67+
set(target FAudio-shared)
68+
69+
if(NOT BUILD_SHARED_LIBS)
70+
set(target FAudio-static)
71+
endif()
72+
6773
# Source lists
68-
add_library(FAudio
74+
add_library(${target}
6975
# Public Headers
7076
include/F3DAudio.h
7177
include/FACT3D.h
@@ -106,14 +112,14 @@ add_library(FAudio
106112
)
107113

108114
if(PLATFORM_WIN32)
109-
target_link_libraries(FAudio PRIVATE dxguid uuid winmm ole32 advapi32 user32 mfplat mfreadwrite mfuuid propsys)
110-
target_compile_definitions(FAudio PUBLIC FAUDIO_WIN32_PLATFORM)
111-
target_compile_definitions(FAudio PRIVATE HAVE_WMADEC=1)
115+
target_link_libraries(${target} PRIVATE dxguid uuid winmm ole32 advapi32 user32 mfplat mfreadwrite mfuuid propsys)
116+
target_compile_definitions(${target} PUBLIC FAUDIO_WIN32_PLATFORM)
117+
target_compile_definitions(${target} PRIVATE HAVE_WMADEC=1)
112118
set(PLATFORM_CFLAGS "-DFAUDIO_WIN32_PLATFORM")
113119
set(XNASONG OFF)
114120
else()
115121
if(BUILD_SDL3)
116-
target_compile_definitions(FAudio PUBLIC FAUDIO_SDL3_PLATFORM)
122+
target_compile_definitions(${target} PUBLIC FAUDIO_SDL3_PLATFORM)
117123
set(PLATFORM_CFLAGS "-DFAUDIO_SDL3_PLATFORM")
118124
else()
119125
set(PLATFORM_CFLAGS)
@@ -122,39 +128,39 @@ endif()
122128

123129
# Only disable DebugConfiguration in release builds
124130
if(NOT FORCE_ENABLE_DEBUGCONFIGURATION)
125-
target_compile_definitions(FAudio PRIVATE $<$<CONFIG:Release>:FAUDIO_DISABLE_DEBUGCONFIGURATION>)
131+
target_compile_definitions(${target} PRIVATE $<$<CONFIG:Release>:FAUDIO_DISABLE_DEBUGCONFIGURATION>)
126132
endif()
127133

128134
# FAudio_assert Customization
129135
if(LOG_ASSERTIONS)
130-
target_compile_definitions(FAudio PUBLIC FAUDIO_LOG_ASSERTIONS)
136+
target_compile_definitions(${target} PUBLIC FAUDIO_LOG_ASSERTIONS)
131137
endif()
132138

133139
# FAudio folders as includes, for other targets to consume
134-
target_include_directories(FAudio PUBLIC
140+
target_include_directories(${target} PUBLIC
135141
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
136142
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
137143
)
138144

139145
# MinGW builds should statically link libgcc
140146
if(MINGW)
141-
target_link_libraries(FAudio PRIVATE -static-libgcc)
147+
target_link_libraries(${target} PRIVATE -static-libgcc)
142148
endif()
143149

144150
# Soname
145-
set_target_properties(FAudio PROPERTIES OUTPUT_NAME "FAudio"
151+
set_target_properties(${target} PROPERTIES OUTPUT_NAME "FAudio"
146152
VERSION ${LIB_VERSION}
147153
SOVERSION ${LIB_MAJOR_VERSION}
148154
)
149155

150156
# XNA_Song Support
151157
if(NOT XNASONG)
152-
target_compile_definitions(FAudio PRIVATE DISABLE_XNASONG)
158+
target_compile_definitions(${target} PRIVATE DISABLE_XNASONG)
153159
endif()
154160

155161
# Dump source voices to RIFF WAVE files
156162
if(DUMP_VOICES)
157-
target_compile_definitions(FAudio PRIVATE FAUDIO_DUMP_VOICES)
163+
target_compile_definitions(${target} PRIVATE FAUDIO_DUMP_VOICES)
158164
endif()
159165

160166
# SDL Dependency
@@ -163,8 +169,8 @@ if (PLATFORM_WIN32)
163169
elseif (BUILD_SDL3)
164170
if (DEFINED SDL3_INCLUDE_DIRS AND DEFINED SDL3_LIBRARIES)
165171
message(STATUS "using pre-defined SDL3 variables SDL3_INCLUDE_DIRS and SDL3_LIBRARIES")
166-
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL3_INCLUDE_DIRS}>")
167-
target_link_libraries(FAudio PUBLIC ${SDL3_LIBRARIES})
172+
target_include_directories(${target} PUBLIC "$<BUILD_INTERFACE:${SDL3_INCLUDE_DIRS}>")
173+
target_link_libraries(${target} PUBLIC ${SDL3_LIBRARIES})
168174
if(INSTALL_MINGW_DEPENDENCIES)
169175
install_shared_libs(${SDL3_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS)
170176
endif()
@@ -173,29 +179,29 @@ elseif (BUILD_SDL3)
173179
find_package(SDL3 CONFIG)
174180
if (TARGET SDL3::SDL3)
175181
message(STATUS "using TARGET SDL3::SDL3")
176-
target_link_libraries(FAudio PUBLIC SDL3::SDL3)
182+
target_link_libraries(${target} PUBLIC SDL3::SDL3)
177183
if(INSTALL_MINGW_DEPENDENCIES)
178184
install_shared_libs(TARGETS SDL3::SDL3 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED)
179185
endif()
180186
elseif (TARGET SDL3)
181187
message(STATUS "using TARGET SDL3")
182-
target_link_libraries(FAudio PUBLIC SDL3)
188+
target_link_libraries(${target} PUBLIC SDL3)
183189
if(INSTALL_MINGW_DEPENDENCIES)
184190
install_shared_libs(TARGETS SDL3 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED)
185191
endif()
186192
else()
187193
message(STATUS "no TARGET SDL3::SDL3, or SDL3, using variables")
188-
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL3_INCLUDE_DIRS}>")
189-
target_link_libraries(FAudio PUBLIC ${SDL3_LIBRARIES})
194+
target_include_directories(${target} PUBLIC "$<BUILD_INTERFACE:${SDL3_INCLUDE_DIRS}>")
195+
target_link_libraries(${target} PUBLIC ${SDL3_LIBRARIES})
190196
if(INSTALL_MINGW_DEPENDENCIES)
191197
install_shared_libs(${SDL3_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS)
192198
endif()
193199
endif()
194200
endif()
195201
elseif (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
196202
message(STATUS "using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES")
197-
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
198-
target_link_libraries(FAudio PUBLIC ${SDL2_LIBRARIES})
203+
target_include_directories(${target} PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
204+
target_link_libraries(${target} PUBLIC ${SDL2_LIBRARIES})
199205
if(INSTALL_MINGW_DEPENDENCIES)
200206
install_shared_libs(${SDL2_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS)
201207
endif()
@@ -204,20 +210,20 @@ else()
204210
find_package(SDL2 CONFIG)
205211
if (TARGET SDL2::SDL2)
206212
message(STATUS "using TARGET SDL2::SDL2")
207-
target_link_libraries(FAudio PUBLIC SDL2::SDL2)
213+
target_link_libraries(${target} PUBLIC SDL2::SDL2)
208214
if(INSTALL_MINGW_DEPENDENCIES)
209215
install_shared_libs(TARGETS SDL2::SDL2 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED)
210216
endif()
211217
elseif (TARGET SDL2)
212218
message(STATUS "using TARGET SDL2")
213-
target_link_libraries(FAudio PUBLIC SDL2)
219+
target_link_libraries(${target} PUBLIC SDL2)
214220
if(INSTALL_MINGW_DEPENDENCIES)
215221
install_shared_libs(TARGETS SDL2 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED)
216222
endif()
217223
else()
218224
message(STATUS "no TARGET SDL2::SDL2, or SDL2, using variables")
219-
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
220-
target_link_libraries(FAudio PUBLIC ${SDL2_LIBRARIES})
225+
target_include_directories(${target} PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
226+
target_link_libraries(${target} PUBLIC ${SDL2_LIBRARIES})
221227
if(INSTALL_MINGW_DEPENDENCIES)
222228
install_shared_libs(${SDL2_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS)
223229
endif()
@@ -242,7 +248,7 @@ if(BUILD_UTILS)
242248
utils/uicommon/imstb_textedit.h
243249
utils/uicommon/imstb_truetype.h
244250
)
245-
target_link_libraries(uicommon PUBLIC FAudio)
251+
target_link_libraries(uicommon PUBLIC ${target})
246252

247253
# Shared WAV Resources
248254
add_library(wavs STATIC utils/wavcommon/wavs.cpp)
@@ -252,11 +258,11 @@ if(BUILD_UTILS)
252258

253259
# These tools do NOT use uicommon
254260
add_executable(testparse utils/testparse/testparse.c)
255-
target_link_libraries(testparse PRIVATE FAudio)
261+
target_link_libraries(testparse PRIVATE ${target})
256262
add_executable(testxwma utils/testxwma/testxwma.cpp)
257-
target_link_libraries(testxwma PRIVATE FAudio)
263+
target_link_libraries(testxwma PRIVATE ${target})
258264
add_executable(showriffheader utils/showriffheader/showriffheader.cpp)
259-
target_link_libraries(showriffheader PRIVATE FAudio)
265+
target_link_libraries(showriffheader PRIVATE ${target})
260266

261267
# These tools use uicommon, but NOT wavs
262268
add_executable(facttool utils/facttool/facttool.cpp)
@@ -313,7 +319,7 @@ endif()
313319
if(BUILD_TESTS)
314320
add_executable(faudio_tests tests/xaudio2.c)
315321
target_compile_definitions(faudio_tests PRIVATE _DEFAULT_SOURCE _BSD_SOURCE)
316-
target_link_libraries(faudio_tests PRIVATE FAudio)
322+
target_link_libraries(faudio_tests PRIVATE ${target})
317323
endif()
318324

319325
# Installation
@@ -324,9 +330,15 @@ install(
324330
DESTINATION ${FAudio_INSTALL_INCLUDEDIR}
325331
)
326332
# Libraries...
333+
set(export ${PROJECT_NAME}-targets-shared)
334+
335+
if(NOT BUILD_SHARED_LIBS)
336+
set(export ${PROJECT_NAME}-targets-static)
337+
endif()
338+
327339
install(
328-
TARGETS ${PROJECT_NAME}
329-
EXPORT ${PROJECT_NAME}-targets
340+
TARGETS ${target}
341+
EXPORT ${export}
330342
INCLUDES DESTINATION ${FAudio_INSTALL_INCLUDEDIR}
331343
RUNTIME DESTINATION ${FAudio_INSTALL_BINDIR}
332344
LIBRARY DESTINATION ${FAudio_INSTALL_LIBDIR}
@@ -367,8 +379,9 @@ install(
367379
FILES ${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}Config.cmake
368380
DESTINATION ${FAudio_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
369381
)
382+
370383
install(
371-
EXPORT ${PROJECT_NAME}-targets
384+
EXPORT ${export}
372385
NAMESPACE ${PROJECT_NAME}::
373386
DESTINATION ${FAudio_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
374387
)

cmake/config.cmake.in

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@ if(NOT "@PLATFORM_WIN32@")
55
find_dependency(SDL2 CONFIG)
66
endif()
77

8-
include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
8+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
9+
include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
10+
set(shared_target TRUE)
11+
endif()
12+
13+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
14+
include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
15+
endif()
16+
17+
if(shared_target)
18+
add_library(@CMAKE_PROJECT_NAME@::@CMAKE_PROJECT_NAME@ ALIAS @CMAKE_PROJECT_NAME@::@CMAKE_PROJECT_NAME@-shared)
19+
else()
20+
add_library(@CMAKE_PROJECT_NAME@::@CMAKE_PROJECT_NAME@ ALIAS @CMAKE_PROJECT_NAME@::@CMAKE_PROJECT_NAME@-static)
21+
endif()
22+
923
check_required_components("@CMAKE_PROJECT_NAME@")
1024

0 commit comments

Comments
 (0)