CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Distro package just use libastcenc.so, find it first
  2. find_library(LIBASTCENC_LIBRARY NAMES libastcenc astcenc astcenc-avx2-static astcenc-sse4.1-static astcenc-sse2-static astcenc-neon-static astcenc-native-static)
  3. find_path(LIBASTCENC_INCLUDEDIR NAMES astcenc.h PATHS)
  4. if (LIBASTCENC_LIBRARY AND LIBASTCENC_INCLUDEDIR)
  5. set(ENABLE_LIBASTCENC 1)
  6. add_definitions(-DENABLE_LIBASTCENC)
  7. include_directories("${LIBASTCENC_INCLUDEDIR}")
  8. message(STATUS "Use libastcenc: ${LIBASTCENC_LIBRARY}")
  9. if (NOT MSVC)
  10. set(CMAKE_REQUIRED_FLAGS "-std=c++11")
  11. endif()
  12. set(CMAKE_REQUIRED_INCLUDES ${LIBASTCENC_INCLUDEDIR})
  13. set(CMAKE_REQUIRED_LIBRARIES ${LIBASTCENC_LIBRARY})
  14. include(CheckCXXSourceCompiles)
  15. check_cxx_source_compiles("
  16. #define ASTCENC_DYNAMIC_LIBRARY 1
  17. #include <astcenc.h>
  18. int main()
  19. {
  20. astcenc_context_free(NULL);
  21. return 0;
  22. }
  23. " ASTCENC_DLL)
  24. if (NOT MSVC)
  25. unset(CMAKE_REQUIRED_FLAGS)
  26. endif()
  27. unset(CMAKE_REQUIRED_INCLUDES)
  28. unset(CMAKE_REQUIRED_LIBRARIES)
  29. if (ASTCENC_DLL AND NOT IOS)
  30. message(STATUS "libastcenc: -DASTCENC_DYNAMIC_LIBRARY required")
  31. add_definitions(-DASTCENC_DYNAMIC_LIBRARY)
  32. endif()
  33. else()
  34. message(WARNING "Missing astc-encoder for astc support, "
  35. "visit https://github.com/ARM-software/astc-encoder for details")
  36. endif()
  37. include_directories("${PROJECT_SOURCE_DIR}/lib/graphics_engine/include")
  38. include_directories("${PROJECT_SOURCE_DIR}/lib/graphics_utils")
  39. include_directories("${PROJECT_SOURCE_DIR}/lib/irrlicht/include")
  40. include_directories("${PROJECT_SOURCE_DIR}/lib/bullet/src")
  41. find_path(SDL2_INCLUDEDIR NAMES SDL.h PATH_SUFFIXES SDL2 include/SDL2 include PATHS)
  42. if (NOT SDL2_INCLUDEDIR)
  43. message(FATAL_ERROR "SDL2 not found.")
  44. else()
  45. include_directories("${SDL2_INCLUDEDIR}")
  46. endif()
  47. if(APPLE AND NOT DLOPEN_MOLTENVK)
  48. find_path(VULKAN_INCLUDEDIR NAMES vulkan/vulkan.h PATHS)
  49. if (NOT VULKAN_INCLUDEDIR)
  50. message(FATAL_ERROR "Vulkan not found.")
  51. else()
  52. include_directories("${VULKAN_INCLUDEDIR}")
  53. endif()
  54. endif()
  55. if(UNIX OR MINGW)
  56. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x")
  57. endif()
  58. set(GE_SOURCES
  59. src/gl.c
  60. src/ge_compressor_astc_4x4.cpp
  61. src/ge_compressor_bptc_bc7.cpp
  62. src/ge_compressor_s3tc_bc3.cpp
  63. src/ge_culling_tool.cpp
  64. src/ge_dx9_texture.cpp
  65. src/ge_main.cpp
  66. src/ge_occlusion_culling.cpp
  67. src/ge_texture.cpp
  68. src/ge_vma.cpp
  69. src/ge_vulkan_2d_renderer.cpp
  70. src/ge_vulkan_array_texture.cpp
  71. src/ge_vulkan_animated_mesh_scene_node.cpp
  72. src/ge_vulkan_attachment_texture.cpp
  73. src/ge_vulkan_billboard_buffer.cpp
  74. src/ge_vulkan_camera_scene_node.cpp
  75. src/ge_vulkan_command_loader.cpp
  76. src/ge_vulkan_driver.cpp
  77. src/ge_vulkan_draw_call.cpp
  78. src/ge_vulkan_dynamic_buffer.cpp
  79. src/ge_vulkan_dynamic_spm_buffer.cpp
  80. src/ge_vulkan_environment_map.cpp
  81. src/ge_vulkan_fbo_texture.cpp
  82. src/ge_vulkan_features.cpp
  83. src/ge_vulkan_light_handler.cpp
  84. src/ge_vulkan_mesh_cache.cpp
  85. src/ge_vulkan_mesh_scene_node.cpp
  86. src/ge_vulkan_scene_manager.cpp
  87. src/ge_vulkan_shader_manager.cpp
  88. src/ge_vulkan_skybox_renderer.cpp
  89. src/ge_vulkan_texture.cpp
  90. src/ge_vulkan_texture_descriptor.cpp
  91. src/ge_gl_texture.cpp
  92. src/ge_spm.cpp
  93. src/ge_spm_buffer.cpp
  94. )
  95. if(NOT APPLE OR DLOPEN_MOLTENVK)
  96. set(GE_SOURCES ${GE_SOURCES} src/vulkan.c)
  97. endif()
  98. option(BC7_ISPC "Enable BC7 (BPTC) support (requires ispc and cmake >= 3.19)" OFF)
  99. if(BC7_ISPC)
  100. add_definitions(-DBC7_ISPC)
  101. enable_language(ISPC)
  102. set(CMAKE_ISPC_FLAGS "${CMAKE_ISPC_FLAGS} --opt=fast-math --opt=disable-assertions --pic")
  103. set(GE_SOURCES
  104. ${GE_SOURCES}
  105. src/bc7e.ispc
  106. )
  107. include_directories("${CMAKE_CURRENT_BINARY_DIR}")
  108. endif()
  109. add_library(graphics_engine STATIC ${GE_SOURCES})
  110. if(BC7_ISPC)
  111. set_property(TARGET graphics_engine PROPERTY ISPC_INSTRUCTION_SETS avx2)
  112. endif()
  113. target_link_libraries(graphics_engine ${SQUISH_LIBRARY})
  114. if(ENABLE_LIBASTCENC)
  115. target_link_libraries(graphics_engine ${LIBASTCENC_LIBRARY})
  116. endif()