CMakeLists.txt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. cmake_minimum_required(VERSION 3.11)
  2. include(ExternalProject)
  3. project(DoRayMe)
  4. set(CMAKE_CXX_STANDARD 11)
  5. option(COVERALLS "Generate coveralls data" OFF)
  6. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/external/coveralls-cmake/cmake)
  7. option(PACKAGE_TESTS "Build the tests" ON)
  8. option(ENABLE_COVERAGE "Build for code coverage" OFF)
  9. option(SHOW_STATS "Show rendering stat" OFF)
  10. if (SHOW_STATS)
  11. add_compile_options(-DRENDER_STATS)
  12. endif()
  13. option(USE_GPROF "Enable profiling" OFF)
  14. if (USE_GPROF)
  15. add_compile_options(-pg)
  16. add_link_options(-pg)
  17. endif()
  18. option(USE_LUA "Enable the use of Lua" ON)
  19. if (USE_LUA)
  20. add_compile_options(-DENABLE_LUA_SUPPORT)
  21. endif()
  22. if (ENABLE_COVERAGE AND COVERALLS)
  23. message(FATAL_ERROR "You can't enable both ENABLE_COVERAGE and COVERALLS at the same time")
  24. endif()
  25. if (COVERALLS)
  26. include(Coveralls)
  27. coveralls_turn_on_coverage()
  28. endif()
  29. if (ENABLE_COVERAGE)
  30. if("${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang" OR
  31. "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
  32. message("Building with LLVM Code Coverage Tools")
  33. set(CMAKE_CXX_FLAGS "-fprofile-instr-generate -fcoverage-mapping")
  34. elseif(CMAKE_COMPILER_IS_GNUCXX)
  35. message("Building with lcov Code Coverage Tools")
  36. set(CMAKE_CXX_FLAGS "--coverage")
  37. else()
  38. message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for code coverage")
  39. endif()
  40. endif()
  41. # LodePNG don't make a .a or .so, so let's build a library here
  42. add_library(LodePNG STATIC)
  43. set(LODEPNG_INCLUDE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/external/lodepng)
  44. target_sources(LodePNG PRIVATE external/lodepng/lodepng.cpp external/lodepng/lodepng.h)
  45. if (USE_LUA)
  46. if (CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
  47. set(LUA_MAKE_TARGET linux)
  48. elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
  49. set(LUA_MAKE_TARGET macosx)
  50. elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
  51. set(LUA_MAKE_TARGET posix)
  52. else()
  53. set(LUA_MAKE_TARGET posix)
  54. endif()
  55. message("-- Lua: Building Lua for ${LUA_MAKE_TARGET}")
  56. ExternalProject_Add(LuaCore
  57. URL "https://www.lua.org/ftp/lua-5.3.5.tar.gz"
  58. URL_HASH SHA1=112eb10ff04d1b4c9898e121d6bdf54a81482447
  59. SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/lua
  60. CONFIGURE_COMMAND ""
  61. BUILD_IN_SOURCE True
  62. BUILD_COMMAND make ${LUA_MAKE_TARGET}
  63. INSTALL_COMMAND ""
  64. )
  65. set(LUA_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/lua/src")
  66. set(LUA_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/external/lua/src/liblua.a" -ldl)
  67. endif()
  68. # NanoJPEG
  69. file(DOWNLOAD
  70. http://svn.emphy.de/nanojpeg/trunk/nanojpeg/nanojpeg.c
  71. ${CMAKE_CURRENT_SOURCE_DIR}/external/nanojpeg/nanojpeg.c
  72. EXPECTED_HASH MD5=03ce304a71ae0ad1c43663fb386cc233
  73. )
  74. add_library(NanoJPEG STATIC)
  75. set(NANOJPEG_INCLUDE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/external/nanojpeg)
  76. target_sources(NanoJPEG PRIVATE external/nanojpeg/nanojpeg.c)
  77. # Main app
  78. add_subdirectory(source)
  79. if(PACKAGE_TESTS OR COVERALLS)
  80. enable_testing()
  81. include(GoogleTest)
  82. add_subdirectory("${PROJECT_SOURCE_DIR}/external/googletest" "external/googletest")
  83. add_subdirectory(tests)
  84. endif()
  85. if (COVERALLS)
  86. # Create the coveralls target.
  87. coveralls_setup(
  88. "${COVERAGE_SRCS}" # The source files.
  89. ON # If we should upload.
  90. ) # (Optional) Alternate project cmake module path.
  91. endif()