CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. cmake_minimum_required(VERSION 3.10)
  2. project(sokol-test)
  3. set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
  4. set(CMAKE_C_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD 17) # needed for UWP
  6. # SOKOL_GLCORE33, SOKOL_GLES2, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU, SOKOL_DUMMY
  7. option(SOKOL_BACKEND "Select 3D backend API" SOKOL_GLCORE33)
  8. option(USE_ARC "Enable/disable ARC" OFF)
  9. if (CMAKE_SYSTEM_NAME STREQUAL Emscripten)
  10. set(EMSCRIPTEN 1)
  11. elseif (CMAKE_SYSTEM_NAME STREQUAL iOS)
  12. set(OSX_IOS 1)
  13. elseif (CMAKE_SYSTEM_NAME STREQUAL Android)
  14. set(ANDROID 1)
  15. elseif (CMAKE_SYSTEM_NAME STREQUAL Linux)
  16. set(LINUX 1)
  17. elseif (CMAKE_SYSTEM_NAME STREQUAL Darwin)
  18. set(OSX_MACOS 1)
  19. elseif (CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
  20. set(UWP 1)
  21. elseif (CMAKE_SYSTEM_NAME STREQUAL Windows)
  22. set(WINDOWS 1)
  23. else()
  24. message(FATAL_ERROR "Unrecognized CMAKE_SYSTEM_NAME")
  25. endif()
  26. message(">> SOKOL_BACKEND: ${SOKOL_BACKEND}")
  27. if (OSX_IOS OR OSX_MACOS)
  28. if (USE_ARC)
  29. message(">> ObjC ARC ENABLED")
  30. else()
  31. message(">> ObjC ARC DISABLED")
  32. endif()
  33. endif()
  34. message(">> BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
  35. message(">> TOOLCHAIN: ${CMAKE_TOOLCHAIN_FILE}")
  36. set(c_flags)
  37. set(cxx_flags)
  38. set(link_flags)
  39. set(system_libs)
  40. if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  41. set(c_flags ${c_flags} /W4 /WX)
  42. set(cxx_flags ${cxx_flags} /W4 /WX /EHsc)
  43. else()
  44. set(c_flags ${c_flags} -Wall -Wextra -Werror -Wsign-conversion)
  45. set(cxx_flags ${cxx_flags} -Wall -Wextra -Werror -Wsign-conversion -fno-rtti -fno-exceptions)
  46. if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  47. set(c_flags ${c_flags} -Wno-missing-field-initializers)
  48. set(cxx_flags ${cxx_flags} -Wno-missing-field-initializers)
  49. endif()
  50. if (USE_ANALYZER)
  51. message(">> Configuring for static code analysis")
  52. set(c_flags ${c_flags} --analyze -Xanalyzer -analyzer-opt-analyze-headers)
  53. set(cxx_flags ${cxx_flags} --analyze -Xanalyzer -analyzer-opt-analyze-headers)
  54. set(link_flags ${link_flags} --analyze -Wno-unused-command-line-argument)
  55. endif()
  56. endif()
  57. if (EMSCRIPTEN)
  58. set(CMAKE_EXECUTABLE_SUFFIX ".html")
  59. set(link_flags ${link-flags} -sNO_FILESYSTEM=1 -sASSERTIONS=0 -sMALLOC=emmalloc -sINITIAL_MEMORY=33554432 --closure=1)
  60. elseif (OSX_IOS)
  61. set(exe_type MACOSX_BUNDLE)
  62. if (USE_ARC)
  63. set(c_flags ${c_flags} -fobjc-arc)
  64. set(cxx_flags ${cxx_flags} -fobjc-arc)
  65. endif()
  66. set(system_libs ${system_libs} "-framework Foundation" "-framework UIKit" "-framework AudioToolbox" "-framework AVFoundation")
  67. if (SOKOL_BACKEND STREQUAL SOKOL_METAL)
  68. set(system_libs ${system_libs} "-framework Metal" "-framework MetalKit")
  69. else()
  70. set(system_libs ${system_libs} "-framework OpenGLES" "-framework GLKit")
  71. endif()
  72. elseif (ANDROID)
  73. set(system_libs ${system_libs} GLESv3 EGL OpenSLES log android)
  74. # FIXME
  75. elseif (LINUX)
  76. set(THREADS_PREFER_PTHREAD_FLAG ON)
  77. find_package(Threads REQUIRED)
  78. set(system_libs ${system_libs} X11 Xi Xcursor GL asound dl m Threads::Threads)
  79. elseif (OSX_MACOS)
  80. set(exe_type MACOSX_BUNDLE)
  81. if (USE_ARC)
  82. set(c_flags ${c_flags} -fobjc-arc)
  83. set(cxx_flags ${cxx_flags} -fobjc-arc)
  84. endif()
  85. set(system_libs ${system_libs} "-framework QuartzCore" "-framework Cocoa" "-framework AudioToolbox")
  86. if (SOKOL_BACKEND STREQUAL SOKOL_METAL)
  87. set(system_libs ${system_libs} "-framework MetalKit" "-framework Metal")
  88. else()
  89. set(system_libs ${system_libs} "-framework OpenGL")
  90. endif()
  91. elseif (UWP)
  92. set(exe_type WIN32)
  93. elseif (WINDOWS)
  94. set(exe_type WIN32)
  95. endif()
  96. macro(configure_common target)
  97. target_compile_definitions(${target} PRIVATE ${SOKOL_BACKEND})
  98. target_link_options(${target} PRIVATE ${link_flags})
  99. target_link_libraries(${target} PRIVATE ${system_libs})
  100. target_include_directories(${target} PRIVATE ../.. ../../util)
  101. target_include_directories(${target} PRIVATE ../ext)
  102. endmacro()
  103. macro(configure_osx_properties target)
  104. if (OSX_IOS)
  105. target_compile_definitions(${target} PRIVATE GLES_SILENCE_DEPRECATION)
  106. endif()
  107. set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${target}")
  108. set_target_properties(${target} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "${target}")
  109. set_target_properties(${target} PROPERTIES MACOSX_BUNDLE_PRODUCT_NAME "${target}")
  110. set_target_properties(${target} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${target}")
  111. endmacro()
  112. macro(configure_c target)
  113. configure_common(${target})
  114. target_compile_options(${target} PRIVATE ${c_flags})
  115. if (OSX_MACOS OR OSX_IOS)
  116. target_compile_options(${target} PRIVATE -x objective-c)
  117. configure_osx_properties(${target})
  118. endif()
  119. endmacro()
  120. macro(configure_cxx target)
  121. configure_common(${target})
  122. target_compile_options(${target} PRIVATE ${cxx_flags})
  123. if (OSX_MACOS OR OSX_IOS)
  124. target_compile_options(${target} PRIVATE -x objective-c++)
  125. configure_osx_properties(${target})
  126. endif()
  127. endmacro()
  128. #--- cimgui
  129. add_library(cimgui
  130. ext/fips-cimgui/cimgui/cimgui.cpp
  131. ext/fips-cimgui/cimgui/imgui/imgui.cpp
  132. ext/fips-cimgui/cimgui/imgui/imgui_demo.cpp
  133. ext/fips-cimgui/cimgui/imgui/imgui_draw.cpp
  134. ext/fips-cimgui/cimgui/imgui/imgui_tables.cpp
  135. ext/fips-cimgui/cimgui/imgui/imgui_widgets.cpp)
  136. target_include_directories(cimgui SYSTEM PUBLIC ext/fips-cimgui)
  137. add_library(imgui
  138. ext/fips-cimgui/cimgui/imgui/imgui.cpp
  139. ext/fips-cimgui/cimgui/imgui/imgui_demo.cpp
  140. ext/fips-cimgui/cimgui/imgui/imgui_draw.cpp
  141. ext/fips-cimgui/cimgui/imgui/imgui_tables.cpp
  142. ext/fips-cimgui/cimgui/imgui/imgui_widgets.cpp)
  143. target_include_directories(imgui SYSTEM PUBLIC ext/fips-cimgui/cimgui/imgui)
  144. add_library(nuklear ext/nuklear.c)
  145. add_subdirectory(compile)
  146. add_subdirectory(functional)