Skip to content

Commit 44315d4

Browse files
committed
cmake: build and install tests+examples by default when SDL_mixer is the root project
The PR also makes sure all CMake variables have a SDLMIXER_ prefix
1 parent 9ea9abe commit 44315d4

File tree

2 files changed

+16
-164
lines changed

2 files changed

+16
-164
lines changed

CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,10 @@ if(SDLMIXER_STRICT)
115115
set(fatal_error "FATAL_ERROR")
116116
endif()
117117

118-
option(SDLMIXER_TESTS "Build unit tests?" OFF)
119-
option(SDLMIXER_TESTS_INSTALL "Install unit tests?" OFF)
120-
option(SDLMIXER_EXAMPLES "Build the examples directory" OFF)
118+
option(SDLMIXER_TESTS "Build unit tests?" ${SDLMIXER_ROOTPROJECT})
119+
cmake_dependent_option(SDLMIXER_TESTS_INSTALL "Install unit tests?" ${SDLMIXER_ROOTPROJECT} "SDLMIXER_INSTALL;SDLMIXER_TESTS" OFF)
120+
option(SDLMIXER_EXAMPLES "Build the examples directory" ${SDLMIXER_ROOTPROJECT})
121+
cmake_dependent_option(SDLMIXER_EXAMPLES_INSTALL "Install SDL3_mixer examples" ${SDLMIXER_ROOTPROJECT} "SDLMIXER_INSTALL;SDLMIXER_EXAMPLES" OFF)
121122

122123
# These are implemented in SDL_mixer itself, not using a third-party library.
123124
option(SDLMIXER_AIFF "Enable AIFF audio" ON)

examples/CMakeLists.txt

Lines changed: 12 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,6 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake")
77
include(CheckIncludeFile)
88
include(CheckStructHasMember)
99
include(CMakePushCheckState)
10-
# !!! FIXME: @madebr, do we need this, or was this only needed in SDL itself?
11-
#include(sdlcompilers)
12-
13-
set(SDLMIXER_EXAMPLES_LINK_SHARED On) # !!! FIXME: save me, @madebr, this needs plumbing through the main cmake file.
14-
15-
if(SDLMIXER_EXAMPLES_LINK_SHARED)
16-
set(sdl_name_component SDL3-shared)
17-
set(sdlmixer_name_component SDL3_mixer-shared)
18-
else()
19-
set(sdl_name_component SDL3-static)
20-
set(sdlmixer_name_component SDL3_mixer-static)
21-
endif()
22-
set(HAVE_EXAMPLES_LINK_SHARED "${SDLMIXER_EXAMPLES_LINK_SHARED}" PARENT_SCOPE)
2310

2411
set(SDLMIXER_EXAMPLE_EXECUTABLES)
2512

@@ -54,6 +41,8 @@ add_custom_target(copy-sdlmixer-example-resources
5441
DEPENDS "${RESOURCE_FILES_BINDIR}"
5542
)
5643

44+
set(SDLMIXER_EXAMPLE_EXECUTABLES)
45+
5746
macro(add_sdlmixer_example_executable TARGET)
5847
cmake_parse_arguments(AST "BUILD_DEPENDENT" "" "SOURCES;DATAFILES" ${ARGN})
5948
if(AST_UNPARSED_ARGUMENTS)
@@ -68,9 +57,6 @@ macro(add_sdlmixer_example_executable TARGET)
6857
add_executable(${TARGET} ${AST_SOURCES} ${AST_DATAFILES})
6958
endif()
7059

71-
# !!! FIXME: @madebr, do we need this, or was this only needed in SDL itself?
72-
#SDL_AddCommonCompilerFlags(${TARGET})
73-
7460
target_compile_definitions(${TARGET}
7561
PRIVATE
7662
$<TARGET_PROPERTY:${sdl3_mixer_target_name},COMPILE_DEFINITIONS>
@@ -79,7 +65,7 @@ macro(add_sdlmixer_example_executable TARGET)
7965

8066
target_link_libraries(${TARGET} PRIVATE SDL3_mixer::SDL3_mixer SDL3::SDL3)
8167

82-
list(APPEND SDL_EXAMPLE_EXECUTABLES ${TARGET})
68+
list(APPEND SDLMIXER_EXAMPLE_EXECUTABLES ${TARGET})
8369
if(AST_DATAFILES)
8470
if(PSP OR PS2)
8571
add_custom_command(TARGET ${TARGET} POST_BUILD
@@ -160,7 +146,7 @@ add_sdlmixer_example_executable(basics-seeking SOURCES basics/06-seeking/seeking
160146

161147
if(PSP)
162148
# Build EBOOT files if building for PSP
163-
foreach(APP ${SDL_EXAMPLE_EXECUTABLES})
149+
foreach(APP ${SDLMIXER_EXAMPLE_EXECUTABLES})
164150
create_pbp_file(
165151
TARGET ${APP}
166152
TITLE SDL-${APP}
@@ -174,7 +160,7 @@ endif()
174160

175161
if(RISCOS)
176162
set(SDL_EXAMPLE_EXECUTABLES_AIF)
177-
foreach(APP ${SDL_EXAMPLE_EXECUTABLES})
163+
foreach(APP ${SDLMIXER_EXAMPLE_EXECUTABLES})
178164
set_property(TARGET ${APP} APPEND_STRING PROPERTY LINK_FLAGS " -static")
179165
add_custom_command(
180166
OUTPUT ${APP},ff8
@@ -186,160 +172,25 @@ if(RISCOS)
186172
endforeach()
187173
endif()
188174

189-
if(SDL_INSTALL_EXAMPLES)
175+
if(SDLMIXER_EXAMPLES_INSTALL)
190176
if(RISCOS)
191177
install(
192178
FILES ${SDL_EXAMPLE_EXECUTABLES_AIF}
193-
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
179+
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
194180
)
195181
else()
196182
install(
197-
TARGETS ${SDL_EXAMPLE_EXECUTABLES}
198-
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
183+
TARGETS ${SDLMIXER_EXAMPLE_EXECUTABLES}
184+
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
199185
)
200186
endif()
201187
if(MSVC)
202-
foreach(example IN LISTS SDL_EXAMPLE_EXECUTABLES)
203-
SDL_install_pdb(${example} "${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3")
188+
foreach(example IN LISTS SDLMIXER_EXAMPLE_EXECUTABLES)
189+
SDL_install_pdb(${example} "${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer")
204190
endforeach()
205191
endif()
206192
install(
207193
FILES ${RESOURCE_FILES}
208-
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
194+
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
209195
)
210196
endif()
211-
212-
if(ANDROID AND TARGET SDL3::Jar)
213-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake/android")
214-
find_package(SdlAndroid MODULE)
215-
if(SdlAndroid_FOUND)
216-
set(apks "")
217-
set(packages "")
218-
219-
include(SdlAndroidFunctions)
220-
sdl_create_android_debug_keystore(SDL_example-debug-keystore)
221-
sdl_android_compile_resources(SDL_example-resources RESFOLDER ${CMAKE_CURRENT_SOURCE_DIR}/../test/android/res)
222-
add_custom_target(sdl-example-apks)
223-
foreach(EXAMPLE ${SDL_EXAMPLE_EXECUTABLES})
224-
set(ANDROID_MANIFEST_APP_NAME "${EXAMPLE}")
225-
set(ANDROID_MANIFEST_LABEL "${EXAMPLE}")
226-
set(ANDROID_MANIFEST_LIB_NAME "$<TARGET_FILE_BASE_NAME:${EXAMPLE}>")
227-
set(ANDROID_MANIFEST_PACKAGE "org.libsdl.sdl.example.${EXAMPLE}")
228-
set(generated_manifest_path "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-src/AndroidManifest.xml")
229-
string(REPLACE "." "/" JAVA_PACKAGE_DIR "${ANDROID_MANIFEST_PACKAGE}")
230-
set(GENERATED_SRC_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-src")
231-
set(GENERATED_RES_FOLDER "${GENERATED_SRC_FOLDER}/res")
232-
set(JAVA_PACKAGE_DIR "${GENERATED_SRC_FOLDER}/${JAVA_PACKAGE_DIR}")
233-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/SDLEntryTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java" @ONLY)
234-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/SDLTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" @ONLY)
235-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/res/values/strings.xml.cmake android/res/values/strings-${EXAMPLE}.xml @ONLY)
236-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/res/xml/shortcuts.xml.cmake "${GENERATED_RES_FOLDER}/xml/shortcuts.xml" @ONLY)
237-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/AndroidManifest.xml.cmake "${generated_manifest_path}" @ONLY)
238-
file(GENERATE
239-
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-$<CONFIG>/res/values/strings.xml"
240-
INPUT "${CMAKE_CURRENT_BINARY_DIR}/android/res/values/strings-${EXAMPLE}.xml"
241-
)
242-
243-
sdl_android_compile_resources(${EXAMPLE}-resources
244-
RESOURCES
245-
"${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-$<CONFIG>/res/values/strings.xml"
246-
"${GENERATED_RES_FOLDER}/xml/shortcuts.xml"
247-
)
248-
249-
sdl_android_link_resources(${EXAMPLE}-apk-linked
250-
MANIFEST "${generated_manifest_path}"
251-
PACKAGE ${ANDROID_MANIFEST_PACKAGE}
252-
RES_TARGETS SDL_example-resources ${EXAMPLE}-resources
253-
TARGET_SDK_VERSION 31
254-
)
255-
256-
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8")
257-
set(classes_path "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXAMPLE}-java.dir/classes")
258-
# Some CMake versions have a slow `cmake -E make_directory` implementation
259-
if(NOT IS_DIRECTORY "${classes_path}")
260-
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}")
261-
endif()
262-
set(OUT_JAR "${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.jar")
263-
add_custom_command(
264-
OUTPUT "${OUT_JAR}"
265-
COMMAND ${CMAKE_COMMAND} -E rm -rf "${classes_path}"
266-
COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}"
267-
COMMAND ${Java_JAVAC_EXECUTABLE}
268-
-source 1.8 -target 1.8
269-
-bootclasspath "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>"
270-
"${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
271-
"${JAVA_PACKAGE_DIR}/SDLTestActivity.java"
272-
$<TARGET_PROPERTY:${EXAMPLE}-apk-linked,JAVA_R>
273-
-cp "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>:${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
274-
-d "${classes_path}"
275-
COMMAND ${Java_JAR_EXECUTABLE} cf "${OUT_JAR}" -C "${classes_path}" .
276-
DEPENDS $<TARGET_PROPERTY:${EXAMPLE}-apk-linked,OUTPUTS> "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>" "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
277-
)
278-
add_custom_target(${EXAMPLE}-jar DEPENDS "${OUT_JAR}")
279-
set_property(TARGET ${EXAMPLE}-jar PROPERTY OUTPUT "${OUT_JAR}")
280-
281-
set(dexworkdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXAMPLE}-dex.dir")
282-
# Some CMake versions have a slow `cmake -E make_directory` implementation
283-
if(NOT IS_DIRECTORY "${dexworkdir}")
284-
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${dexworkdir}")
285-
endif()
286-
set(classes_dex_base_name "classes.dex")
287-
set(classes_dex "${dexworkdir}/${classes_dex_base_name}")
288-
add_custom_command(
289-
OUTPUT "${classes_dex}"
290-
COMMAND SdlAndroid::d8
291-
$<TARGET_PROPERTY:${EXAMPLE}-jar,OUTPUT>
292-
$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
293-
--lib "${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
294-
--output "${dexworkdir}"
295-
DEPENDS $<TARGET_PROPERTY:${EXAMPLE}-jar,OUTPUT> $<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
296-
)
297-
add_custom_target(${EXAMPLE}-dex DEPENDS "${classes_dex}")
298-
set_property(TARGET ${EXAMPLE}-dex PROPERTY OUTPUT "${classes_dex}")
299-
set_property(TARGET ${EXAMPLE}-dex PROPERTY OUTPUT_BASE_NAME "${classes_dex_base_name}")
300-
301-
sdl_add_to_apk_unaligned(${EXAMPLE}-unaligned-apk
302-
APK_IN ${EXAMPLE}-apk-linked
303-
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
304-
ASSETS ${RESOURCE_FILES}
305-
NATIVE_LIBS SDL3::SDL3-shared ${EXAMPLE}
306-
DEX ${EXAMPLE}-dex
307-
)
308-
309-
sdl_apk_align(${EXAMPLE}-aligned-apk ${EXAMPLE}-unaligned-apk
310-
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
311-
)
312-
sdl_apk_sign(${EXAMPLE}-apk ${EXAMPLE}-aligned-apk
313-
KEYSTORE SDL_example-debug-keystore
314-
)
315-
add_dependencies(sdl-example-apks ${EXAMPLE}-apk)
316-
317-
if(TARGET SdlAndroid::adb)
318-
add_custom_target(install-${EXAMPLE}
319-
COMMAND "${CMAKE_COMMAND}" -DACTION=install "-DAPKS=$<TARGET_PROPERTY:${EXAMPLE}-apk,OUTPUT>" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
320-
DEPENDS "${EXAMPLE}-apk"
321-
)
322-
add_custom_target(start-${EXAMPLE}
323-
COMMAND "${ADB_BIN}" shell am start-activity -S "${ANDROID_MANIFEST_PACKAGE}/.SDLTestActivity"
324-
)
325-
add_custom_target(build-install-start-${EXAMPLE}
326-
COMMAND "${CMAKE_COMMAND}" -DACTION=build-install-run "-DEXECUTABLES=${EXAMPLE}" "-DBUILD_FOLDER=${CMAKE_BINARY_DIR}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
327-
)
328-
endif()
329-
330-
list(APPEND packages "${ANDROID_MANIFEST_PACKAGE}")
331-
list(APPEND install_targets install-${EXAMPLE})
332-
endforeach()
333-
334-
if(TARGET SdlAndroid::adb)
335-
add_custom_target(install-sdl-example-apks
336-
DEPENDS ${install_targets}
337-
VERBATIM
338-
)
339-
add_custom_target(uninstall-sdl-example-apks
340-
COMMAND "${CMAKE_COMMAND}" "-DADB=$<TARGET_FILE:SdlAndroid::adb>" -DACTION=uninstall "-DPACKAGES=${packages}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
341-
VERBATIM
342-
)
343-
endif()
344-
endif()
345-
endif()

0 commit comments

Comments
 (0)