CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. cmake_minimum_required(VERSION 3.4)
  2. project(squirrel VERSION 3.1 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. add_subdirectory(sq)
  33. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  34. set(tgts)
  35. if(NOT DISABLE_DYNAMIC)
  36. list(APPEND tgts squirrel sqstdlib sq)
  37. endif()
  38. if(NOT DISABLE_STATIC)
  39. list(APPEND tgts squirrel_static sqstdlib_static sq_static)
  40. endif()
  41. foreach(t ${tgts})
  42. target_compile_definitions(${t} PUBLIC -D_SQ64)
  43. endforeach()
  44. endif()
  45. if(NOT DISABLE_DYNAMIC)
  46. set_target_properties(squirrel sqstdlib PROPERTIES SOVERSION 0 VERSION 0.0.0)
  47. endif()
  48. if(NOT SQ_DISABLE_INSTALLER AND NOT SQ_DISABLE_HEADER_INSTALLER)
  49. install(FILES
  50. include/sqconfig.h
  51. include/squirrel.h
  52. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  53. COMPONENT Development
  54. )
  55. install(FILES
  56. include/sqstdaux.h
  57. include/sqstdblob.h
  58. include/sqstdio.h
  59. include/sqstdmath.h
  60. include/sqstdstring.h
  61. include/sqstdsystem.h
  62. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  63. COMPONENT Development
  64. )
  65. endif()
  66. include(CMakePackageConfigHelpers)
  67. write_basic_package_version_file(
  68. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config-version.cmake"
  69. VERSION "${squirrel_VERSION}"
  70. COMPATIBILITY AnyNewerVersion
  71. )
  72. configure_package_config_file(
  73. "${CMAKE_CURRENT_SOURCE_DIR}/squirrel-config.cmake.in"
  74. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config.cmake"
  75. INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  76. )
  77. export(EXPORT squirrel
  78. NAMESPACE squirrel::
  79. FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-targets.cmake"
  80. )
  81. if(NOT SQ_DISABLE_INSTALLER AND NOT SQ_DISABLE_CMAKE_INSTALLER)
  82. install(FILES
  83. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config-version.cmake"
  84. "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/squirrel/squirrel-config.cmake"
  85. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  86. COMPONENT Development
  87. )
  88. install(EXPORT squirrel
  89. NAMESPACE squirrel::
  90. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/squirrel"
  91. FILE "squirrel-targets.cmake"
  92. COMPONENT Development
  93. )
  94. endif()