CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. cmake_minimum_required(VERSION 3.0.0)
  2. project(SDL2 C)
  3. # Global settings for all of the test targets
  4. # FIXME: is this wrong?
  5. remove_definitions(-DUSING_GENERATED_CONFIG_H)
  6. link_libraries(SDL2_test SDL2-static)
  7. # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin,
  8. # but we need them for VS as well.
  9. if(WINDOWS)
  10. link_libraries(SDL2main)
  11. add_definitions(-Dmain=SDL_main)
  12. endif()
  13. find_package(OpenGL)
  14. if (OPENGL_FOUND)
  15. add_definitions(-DHAVE_OPENGL)
  16. endif()
  17. add_executable(checkkeys checkkeys.c)
  18. add_executable(checkkeysthreads checkkeysthreads.c)
  19. add_executable(loopwave loopwave.c)
  20. add_executable(loopwavequeue loopwavequeue.c)
  21. add_executable(testresample testresample.c)
  22. add_executable(testaudioinfo testaudioinfo.c)
  23. file(GLOB TESTAUTOMATION_SOURCE_FILES testautomation*.c)
  24. add_executable(testautomation ${TESTAUTOMATION_SOURCE_FILES})
  25. add_executable(testmultiaudio testmultiaudio.c)
  26. add_executable(testaudiohotplug testaudiohotplug.c)
  27. add_executable(testaudiocapture testaudiocapture.c)
  28. add_executable(testatomic testatomic.c)
  29. add_executable(testintersections testintersections.c)
  30. add_executable(testrelative testrelative.c)
  31. add_executable(testhittesting testhittesting.c)
  32. add_executable(testdraw2 testdraw2.c)
  33. add_executable(testdrawchessboard testdrawchessboard.c)
  34. add_executable(testdropfile testdropfile.c)
  35. add_executable(testerror testerror.c)
  36. add_executable(testfile testfile.c)
  37. add_executable(testgamecontroller testgamecontroller.c)
  38. add_executable(testgeometry testgeometry.c)
  39. add_executable(testgesture testgesture.c)
  40. add_executable(testgl2 testgl2.c)
  41. add_executable(testgles testgles.c)
  42. add_executable(testgles2 testgles2.c)
  43. add_executable(testhaptic testhaptic.c)
  44. add_executable(testhotplug testhotplug.c)
  45. add_executable(testrumble testrumble.c)
  46. add_executable(testthread testthread.c)
  47. add_executable(testiconv testiconv.c)
  48. add_executable(testime testime.c)
  49. add_executable(testjoystick testjoystick.c)
  50. add_executable(testkeys testkeys.c)
  51. add_executable(testloadso testloadso.c)
  52. add_executable(testlock testlock.c)
  53. add_executable(testmouse testmouse.c)
  54. if(APPLE)
  55. add_executable(testnative testnative.c
  56. testnativecocoa.m
  57. testnativex11.c)
  58. elseif(WINDOWS)
  59. add_executable(testnative testnative.c testnativew32.c)
  60. elseif(UNIX)
  61. add_executable(testnative testnative.c testnativex11.c)
  62. endif()
  63. add_executable(testoverlay2 testoverlay2.c testyuv_cvt.c)
  64. add_executable(testplatform testplatform.c)
  65. add_executable(testpower testpower.c)
  66. add_executable(testfilesystem testfilesystem.c)
  67. add_executable(testrendertarget testrendertarget.c)
  68. add_executable(testscale testscale.c)
  69. add_executable(testsem testsem.c)
  70. add_executable(testshader testshader.c)
  71. add_executable(testshape testshape.c)
  72. add_executable(testsprite2 testsprite2.c)
  73. add_executable(testspriteminimal testspriteminimal.c)
  74. add_executable(teststreaming teststreaming.c)
  75. add_executable(testtimer testtimer.c)
  76. add_executable(testver testver.c)
  77. add_executable(testviewport testviewport.c)
  78. add_executable(testwm2 testwm2.c)
  79. add_executable(testyuv testyuv.c testyuv_cvt.c)
  80. add_executable(torturethread torturethread.c)
  81. add_executable(testrendercopyex testrendercopyex.c)
  82. add_executable(testmessage testmessage.c)
  83. add_executable(testdisplayinfo testdisplayinfo.c)
  84. add_executable(testqsort testqsort.c)
  85. add_executable(testbounds testbounds.c)
  86. add_executable(testcustomcursor testcustomcursor.c)
  87. add_executable(controllermap controllermap.c)
  88. add_executable(testvulkan testvulkan.c)
  89. add_executable(testoffscreen testoffscreen.c)
  90. if(OPENGL_FOUND)
  91. add_dependencies(testshader OpenGL::GL)
  92. add_dependencies(testgl2 OpenGL::GL)
  93. target_link_libraries(testshader OpenGL::GL)
  94. target_link_libraries(testgl2 OpenGL::GL)
  95. endif()
  96. # HACK: Dummy target to cause the resource files to be copied to the build directory.
  97. # Need to make it an executable so we can use the TARGET_FILE_DIR generator expression.
  98. # This is needed so they get copied to the correct Debug/Release subdirectory in Xcode.
  99. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/resources_dummy.c "int main(int argc, const char **argv){ return 1; }\n")
  100. add_executable(SDL2_test_resources ${CMAKE_CURRENT_BINARY_DIR}/resources_dummy.c)
  101. file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)
  102. foreach(RESOURCE_FILE ${RESOURCE_FILES})
  103. add_custom_command(TARGET SDL2_test_resources POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $<TARGET_FILE_DIR:SDL2_test_resources>)
  104. endforeach(RESOURCE_FILE)
  105. file(COPY ${RESOURCE_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  106. # TODO: Might be easier to make all targets depend on the resources...?
  107. set(NEEDS_RESOURCES
  108. testscale
  109. testrendercopyex
  110. controllermap
  111. testyuv
  112. testgamecontroller
  113. testshape
  114. testshader
  115. testnative
  116. testspriteminimal
  117. testautomation
  118. testcustomcursor
  119. testrendertarget
  120. testsprite2
  121. loopwave
  122. loopwavequeue
  123. testresample
  124. testaudiohotplug
  125. testmultiaudio
  126. )
  127. foreach(APP IN LISTS NEEDS_RESOURCES)
  128. add_dependencies(${APP} SDL2_test_resources)
  129. if(APPLE)
  130. # Make sure resource files get installed into macOS/iOS .app bundles.
  131. target_sources(${APP} PRIVATE "${RESOURCE_FILES}")
  132. set_target_properties(${APP} PROPERTIES RESOURCE "${RESOURCE_FILES}")
  133. endif()
  134. endforeach()
  135. # Set Apple App ID / Bundle ID. This is needed to launch apps on some Apple
  136. # platforms (iOS, for example).
  137. if(APPLE)
  138. if(${CMAKE_VERSION} VERSION_LESS "3.7.0")
  139. # CMake's 'BUILDSYSTEM_TARGETS' property is only available in
  140. # CMake 3.7 and above.
  141. message(WARNING "Unable to set Bundle ID for Apple .app builds due to old CMake (pre 3.7).")
  142. else()
  143. get_property(TARGETS DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY BUILDSYSTEM_TARGETS)
  144. foreach(CURRENT_TARGET IN LISTS TARGETS)
  145. get_property(TARGET_TYPE TARGET ${CURRENT_TARGET} PROPERTY TYPE)
  146. if(TARGET_TYPE STREQUAL "EXECUTABLE")
  147. set_target_properties("${CURRENT_TARGET}" PROPERTIES
  148. MACOSX_BUNDLE_GUI_IDENTIFIER "org.libsdl.${CURRENT_TARGET}"
  149. MACOSX_BUNDLE_BUNDLE_VERSION "${SDL_VERSION}"
  150. MACOSX_BUNDLE_SHORT_VERSION_STRING "${SDL_VERSION}"
  151. )
  152. endif()
  153. endforeach()
  154. endif()
  155. endif()