Simple Directmedia Layer
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

cmake: avoid parallel generation of headers through intermediate target

See
https://cmake.org/cmake/help/latest/command/add_custom_command.html#example-generating-files-for-multiple-targets

+51 -49
+51 -49
test/CMakeLists.txt
··· 102 102 define_property(TARGET PROPERTY SDL_NONINTERACTIVE_TIMEOUT BRIEF_DOCS "Timeout for noninteractive executable." FULL_DOCS "Timeout for noninteractive executable.") 103 103 104 104 macro(add_sdl_test_executable TARGET) 105 - cmake_parse_arguments(AST "BUILD_DEPENDENT;NONINTERACTIVE;NEEDS_RESOURCES;TESTUTILS;THREADS;NO_C90;MAIN_CALLBACKS;NOTRACKMEM" "" "DISABLE_THREADS_ARGS;NONINTERACTIVE_TIMEOUT;NONINTERACTIVE_ARGS;INSTALLED_ARGS;SOURCES" ${ARGN}) 105 + cmake_parse_arguments(AST "BUILD_DEPENDENT;NONINTERACTIVE;NEEDS_RESOURCES;TESTUTILS;THREADS;NO_C90;MAIN_CALLBACKS;NOTRACKMEM" "" "DEPENDS;DISABLE_THREADS_ARGS;NONINTERACTIVE_TIMEOUT;NONINTERACTIVE_ARGS;INSTALLED_ARGS;SOURCES" ${ARGN}) 106 106 if(AST_UNPARSED_ARGUMENTS) 107 107 message(FATAL_ERROR "Unknown argument(s): ${AST_UNPARSED_ARGUMENTS}") 108 108 endif() ··· 128 128 set_property(TARGET ${TARGET} PROPERTY C_STANDARD 90) 129 129 set_property(TARGET ${TARGET} PROPERTY C_EXTENSIONS FALSE) 130 130 endif() 131 + add_dependencies(${TARGET} ${AST_DEPENDS}) 131 132 132 133 list(APPEND SDL_TEST_EXECUTABLES ${TARGET}) 133 134 set_property(TARGET ${TARGET} PROPERTY SDL_NOTRACKMEM ${AST_NOTRACKMEM}) ··· 208 209 add_definitions(-DHAVE_LIBUDEV_H) 209 210 endif() 210 211 212 + function(files2headers OUTPUT) 213 + set(xxd "${SDL3_SOURCE_DIR}/cmake/xxd.py") 214 + set(inputs ${ARGN}) 215 + set(outputs ) 216 + foreach(input IN LISTS inputs) 217 + get_filename_component(file_we "${input}" NAME_WE) 218 + set(intermediate "${CMAKE_CURRENT_BINARY_DIR}/${file_we}.h") 219 + set(output "${CMAKE_CURRENT_SOURCE_DIR}/${file_we}.h") 220 + list(APPEND outputs "${output}") 221 + if(TARGET Python3::Interpreter AND NOT CMAKE_CROSSCOMPILING) 222 + list(APPEND outputs "${intermediate}") 223 + # Don't add the 'output' header to the output, to avoid marking them as GENERATED 224 + # (generated files are removed when running the CLEAN target) 225 + add_custom_command(OUTPUT "${intermediate}" 226 + COMMAND Python3::Interpreter "${xxd}" -i "${CMAKE_CURRENT_SOURCE_DIR}/${input}" "-o" "${intermediate}" 227 + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${intermediate}" "${output}" 228 + DEPENDS "${xxd}" "${bmp}" 229 + ) 230 + endif() 231 + endforeach() 232 + set(${OUTPUT} "${outputs}" PARENT_SCOPE) 233 + add_custom_target(generate-${OUTPUT} DEPENDS ${ARGN}) 234 + endfunction() 235 + 236 + files2headers(gamepad_image_headers 237 + gamepad_axis_arrow.bmp 238 + gamepad_axis.bmp 239 + gamepad_back.bmp 240 + gamepad_battery.bmp 241 + gamepad_battery_wired.bmp 242 + gamepad_button_background.bmp 243 + gamepad_button.bmp 244 + gamepad_button_small.bmp 245 + gamepad_face_abxy.bmp 246 + gamepad_face_bayx.bmp 247 + gamepad_face_sony.bmp 248 + gamepad_front.bmp 249 + gamepad_touchpad.bmp 250 + gamepad_wired.bmp 251 + gamepad_wireless.bmp 252 + ) 253 + files2headers(icon_bmp_header icon.bmp) 254 + files2headers(glass_bmp_header glass.bmp) 255 + 211 256 set(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE) 212 257 include("${CMAKE_CURRENT_LIST_DIR}/../cmake/FindFFmpeg.cmake") 213 258 if(FFmpeg_FOUND) ··· 219 264 cmake_pop_check_state() 220 265 endif() 221 266 if(FFmpeg_FOUND AND LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT) 222 - add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header}) 267 + add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header) 223 268 if(LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT) 224 269 target_compile_definitions(testffmpeg PRIVATE FFMPEG_VULKAN_SUPPORT) 225 270 endif() ··· 290 335 endif () 291 336 endif() 292 337 293 - function(files2headers OUTPUT) 294 - set(xxd "${SDL3_SOURCE_DIR}/cmake/xxd.py") 295 - set(inputs ${ARGN}) 296 - set(outputs ) 297 - foreach(input IN LISTS inputs) 298 - get_filename_component(file_we "${input}" NAME_WE) 299 - set(intermediate "${CMAKE_CURRENT_BINARY_DIR}/${file_we}.h") 300 - set(output "${CMAKE_CURRENT_SOURCE_DIR}/${file_we}.h") 301 - list(APPEND outputs "${output}") 302 - if(TARGET Python3::Interpreter AND NOT CMAKE_CROSSCOMPILING) 303 - list(APPEND outputs "${intermediate}") 304 - # Don't add the 'output' header to the output, to avoid marking them as GENERATED 305 - # (generated files are removed when running the CLEAN target) 306 - add_custom_command(OUTPUT "${intermediate}" 307 - COMMAND Python3::Interpreter "${xxd}" -i "${CMAKE_CURRENT_SOURCE_DIR}/${input}" "-o" "${intermediate}" 308 - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${intermediate}" "${output}" 309 - DEPENDS "${xxd}" "${bmp}" 310 - ) 311 - endif() 312 - endforeach() 313 - set(${OUTPUT} "${outputs}" PARENT_SCOPE) 314 - endfunction() 315 - 316 - files2headers(gamepad_image_headers 317 - gamepad_axis_arrow.bmp 318 - gamepad_axis.bmp 319 - gamepad_back.bmp 320 - gamepad_battery.bmp 321 - gamepad_battery_wired.bmp 322 - gamepad_button_background.bmp 323 - gamepad_button.bmp 324 - gamepad_button_small.bmp 325 - gamepad_face_abxy.bmp 326 - gamepad_face_bayx.bmp 327 - gamepad_face_sony.bmp 328 - gamepad_front.bmp 329 - gamepad_touchpad.bmp 330 - gamepad_wired.bmp 331 - gamepad_wireless.bmp 332 - ) 333 - files2headers(icon_bmp_header icon.bmp) 334 - files2headers(glass_bmp_header glass.bmp) 335 - 336 338 add_sdl_test_executable(testasyncio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testasyncio.c) 337 339 add_sdl_test_executable(testaudio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testaudio.c) 338 340 add_sdl_test_executable(testcolorspace SOURCES testcolorspace.c) 339 341 add_sdl_test_executable(testfile NONINTERACTIVE SOURCES testfile.c) 340 - add_sdl_test_executable(testcontroller TESTUTILS SOURCES testcontroller.c gamepadutils.c ${gamepad_image_headers}) 342 + add_sdl_test_executable(testcontroller TESTUTILS SOURCES testcontroller.c gamepadutils.c ${gamepad_image_headers} DEPENDS generate-gamepad_image_headers) 341 343 add_sdl_test_executable(testgeometry TESTUTILS SOURCES testgeometry.c) 342 344 add_sdl_test_executable(testgl SOURCES testgl.c) 343 345 add_sdl_test_executable(testgles SOURCES testgles.c) ··· 383 385 if(EMSCRIPTEN) 384 386 target_link_options(testshader PRIVATE "-sLEGACY_GL_EMULATION") 385 387 endif() 386 - add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c ${glass_bmp_header}) 388 + add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c ${glass_bmp_header} DEPENDS generate-glass_bmp_header) 387 389 add_sdl_test_executable(testsprite MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testsprite.c) 388 - add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header}) 389 - add_sdl_test_executable(testspritesurface SOURCES testspritesurface.c ${icon_bmp_header}) 390 + add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header) 391 + add_sdl_test_executable(testspritesurface SOURCES testspritesurface.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header) 390 392 add_sdl_test_executable(teststreaming NEEDS_RESOURCES TESTUTILS SOURCES teststreaming.c) 391 393 add_sdl_test_executable(testtimer NONINTERACTIVE NONINTERACTIVE_ARGS --no-interactive NONINTERACTIVE_TIMEOUT 60 SOURCES testtimer.c) 392 394 add_sdl_test_executable(testurl SOURCES testurl.c)