CMakeLists.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. cmake_minimum_required(VERSION 3.4)
  2. project(squirrel VERSION 3.2 LANGUAGES C CXX)
  3. option(DISABLE_STATIC "Avoid building/installing static libraries.")
  4. option(LONG_OUTPUT_NAMES "Use longer names for binaries and libraries: squirrel3 (not sq).")
  5. if (NOT CMAKE_BUILD_TYPE)
  6. set(CMAKE_BUILD_TYPE "Release")
  7. endif ()
  8. include(GNUInstallDirs)
  9. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
  10. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
  11. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
  12. set(CMAKE_CXX_STANDARD 11)
  13. if(CMAKE_COMPILER_IS_GNUCXX)
  14. add_compile_options(
  15. "$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti;-fno-exceptions>"
  16. -fno-strict-aliasing
  17. -Wall
  18. -Wextra
  19. -pedantic
  20. -Wcast-qual
  21. "$<$<CONFIG:Release>:-O3>"
  22. "$<$<CONFIG:RelWithDebInfo>:-O3;-g>"
  23. "$<$<CONFIG:MinSizeRel>:-Os>"
  24. "$<$<CONFIG:Debug>:-pg;-pie;-gstabs;-g3;-Og>"
  25. )
  26. elseif(MSVC)
  27. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  28. add_definitions(-D_CRT_SECURE_NO_WARNINGS)
  29. endif()
  30. add_subdirectory(squirrel)
  31. add_subdirectory(sqstdlib)
  32. if(NOT SQ_DISABLE_INTERPRETER)
  33. add_subdirectory(sq)
  34. endif()
  35. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  36. set(tgts)
  37. if(NOT DISABLE_DYNAMIC)
  38. list(APPEND tgts squirrel sqstdlib)
  39. if(NOT SQ_DISABLE_INTERPRETER)
  40. list(APPEND tgts sq)
  41. endif()
  42. endif()
  43. if(NOT DISABLE_STATIC)
  44. list(APPEND tgts squirrel_static sqstdlib_static)
  45. if(NOT SQ_DISABLE_INTERPRETER)
  46. list(APPEND tgts sq_static)
  47. endif()
  48. endif()
  49. foreach(t ${tgts})
  50. target_compile_definitions(${t} PUBLIC -D_SQ64)
  51. endforeach()
  52. endif()
  53. if(NOT DISABLE_DYNAMIC)
  54. set_target_properties(squirrel sqstdlib PROPERTIES SOVERSION 0 VERSION 0.0.0)
  55. endif()
  56. if(NOT SQ_DISABLE_INSTALLER AND NOT SQ_DISABLE_HEADER_INSTALLER)
  57. install(FILES
  58. include/sqconfig.h
  59. include/squirrel.h
  60. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  61. COMPONENT Development
  62. )
  63. install(FILES
  64. include/sqstdaux.h
  65. include/sqstdblob.h
  66. include/sqstdio.h
  67. include/sqstdmath.h
  68. include/sqstdstring.h
  69. include/sqstdsystem.h
  70. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  71. COMPONENT Development
  72. )
  73. endif()
  74. include(CMakePackageConfigHelpers)
  75. write_basic_package_version_file(
  76. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config-version.cmake"
  77. VERSION "${squirrel_VERSION}"
  78. COMPATIBILITY AnyNewerVersion
  79. )
  80. configure_package_config_file(
  81. "${CMAKE_CURRENT_SOURCE_DIR}/squirrel-config.cmake.in"
  82. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config.cmake"
  83. INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  84. )
  85. if(NOT SQ_DISABLE_INSTALLER AND NOT SQ_DISABLE_CMAKE_INSTALLER)
  86. export(EXPORT squirrel
  87. NAMESPACE squirrel::
  88. FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-targets.cmake"
  89. )
  90. install(FILES
  91. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config-version.cmake"
  92. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config.cmake"
  93. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  94. COMPONENT Development
  95. )
  96. install(EXPORT squirrel
  97. NAMESPACE squirrel::
  98. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  99. FILE "squirrel-targets.cmake"
  100. COMPONENT Development
  101. )
  102. endif()