diff --git a/CMakeLists.txt b/CMakeLists.txt index c927ae7df0..a2b8b11769 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2064,6 +2064,7 @@ elseif(WINDOWS) endif() endif() + enable_language(RC) file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc) file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c) if(MINGW OR CYGWIN) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 54912ffefa..93ea43b67a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,8 +9,23 @@ set(SDL_TEST_EXECUTABLES) set(SDL_TESTS_NONINTERACTIVE) set(SDL_TESTS_NEEDS_RESOURCES) +set(SDLTEST_TARGETS ) + +macro(sdltest_link_librararies) + foreach(TARGET ${SDLTEST_TARGETS}) + target_link_libraries(${TARGET} PRIVATE ${ARGN}) + endforeach() +endmacro() + +macro(sdltest_add_definitions) + foreach(TARGET ${SDLTEST_TARGETS}) + target_compile_definitions(${TARGET} PRIVATE ${ARGN}) + endforeach() +endmacro() + macro(add_sdl_test_executable TARGET) cmake_parse_arguments(AST "NONINTERACTIVE;NEEDS_RESOURCES" "" "" ${ARGN}) + list(APPEND SDLTEST_TARGETS ${TARGET}) if(ANDROID) add_library(${TARGET} SHARED ${AST_UNPARSED_ARGUMENTS}) else() @@ -69,57 +84,6 @@ if(SDL_INSTALL_TESTS) include(GNUInstallDirs) endif() -if(N3DS) - link_libraries(SDL2::SDL2main) -endif() - -if(PSP) - link_libraries( - SDL2::SDL2main - SDL2::SDL2test - SDL2::SDL2-static - GL - pspvram - pspvfpu - pspdisplay - pspgu - pspge - pspaudio - pspctrl - psphprm - psppower - ) -elseif(PS2) - link_libraries( - SDL2main - SDL2_test - SDL2-static - patches - gskit - dmakit - ps2_drivers - ) -else() - link_libraries(SDL2::SDL2test SDL2::SDL2-static) -endif() - -if(WINDOWS) - # mingw32 must come before SDL2main to link successfully - if(MINGW OR CYGWIN) - link_libraries(mingw32) - endif() - - # CET support was added in VS 16.7 - if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64") - link_libraries(-CETCOMPAT) - endif() - - # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin, - # but we need them for VS as well. - link_libraries(SDL2main) - add_definitions(-Dmain=SDL_main) -endif() - # CMake incorrectly detects opengl32.lib being present on MSVC ARM64 if(NOT MSVC OR NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") # Prefer GLVND, if present @@ -196,7 +160,7 @@ elseif(WINDOWS) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativew32.c testutils.c) elseif(HAVE_X11) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativex11.c testutils.c) - target_link_libraries(testnative X11) + target_link_libraries(testnative PRIVATE X11) elseif(OS2) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativeos2.c testutils.c) endif() @@ -234,6 +198,57 @@ add_sdl_test_executable(controllermap NEEDS_RESOURCES controllermap.c testutils. add_sdl_test_executable(testvulkan testvulkan.c) add_sdl_test_executable(testoffscreen testoffscreen.c) +if(N3DS) + sdltest_link_librararies(SDL2::SDL2main) +endif() + +if(PSP) + sdltest_link_librararies( + SDL2::SDL2main + SDL2::SDL2test + SDL2::SDL2-static + GL + pspvram + pspvfpu + pspdisplay + pspgu + pspge + pspaudio + pspctrl + psphprm + psppower + ) +elseif(PS2) + sdltest_link_librararies( + SDL2main + SDL2_test + SDL2-static + patches + gskit + dmakit + ps2_drivers + ) +else() + sdltest_link_librararies(SDL2::SDL2test SDL2::SDL2-static) +endif() + +if(WINDOWS) + # mingw32 must come before SDL2main to link successfully + if(MINGW OR CYGWIN) + sdltest_link_librararies(mingw32) + endif() + + # CET support was added in VS 16.7 + if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64") + sdltest_link_librararies(-CETCOMPAT) + endif() + + # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin, + # but we need them for VS as well. + sdltest_link_librararies(SDL2main) + sdltest_add_definitions(-Dmain=SDL_main) +endif() + cmake_push_check_state(RESET) check_c_compiler_flag(-Wformat-overflow HAVE_WFORMAT_OVERFLOW) @@ -270,19 +285,19 @@ endif() if(OPENGL_FOUND) if(TARGET OpenGL::GL) - target_link_libraries(testshader OpenGL::GL) - target_link_libraries(testgl2 OpenGL::GL) + target_link_libraries(testshader PRIVATE OpenGL::GL) + target_link_libraries(testgl2 PRIVATE OpenGL::GL) else() if(EMSCRIPTEN AND OPENGL_gl_LIBRARY STREQUAL "nul") set(OPENGL_gl_LIBRARY GL) endif() # emscripten's FindOpenGL.cmake does not create OpenGL::GL - target_link_libraries(testshader ${OPENGL_gl_LIBRARY}) - target_link_libraries(testgl2 ${OPENGL_gl_LIBRARY}) + target_link_libraries(testshader PRIVATE ${OPENGL_gl_LIBRARY}) + target_link_libraries(testgl2 PRIVATE ${OPENGL_gl_LIBRARY}) endif() endif() if(EMSCRIPTEN) - target_link_libraries(testshader -sLEGACY_GL_EMULATION) + target_link_libraries(testshader PRIVATE -sLEGACY_GL_EMULATION) endif() file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)