CMakeLists.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. cmake_minimum_required(VERSION 3.15)
  2. project(Nuklear VERSION 0.0.1 LANGUAGES C)
  3. #===============#
  4. # Compiler args #
  5. #===============#
  6. set(CMAKE_C_VISIBILITY_PRESET hidden)
  7. set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
  8. set(CMAKE_C_STANDARD 90)
  9. add_library("${PROJECT_NAME}_compiler_flags" INTERFACE)
  10. target_compile_features("${PROJECT_NAME}_compiler_flags" INTERFACE "c_std_${CMAKE_C_STANDARD}")
  11. # add compiler warning flags just when building this project via
  12. # the BUILD_INTERFACE genex
  13. set(gcc_like "$<COMPILE_LANG_AND_ID:C,CXX,ARMClang,AppleClang,Clang,GNU,LCC>")
  14. set(msvc "$<COMPILE_LANG_AND_ID:C,CXX,MSVC>")
  15. target_compile_options(
  16. "${PROJECT_NAME}_compiler_flags"
  17. INTERFACE
  18. "$<${gcc_like}:$<BUILD_INTERFACE:-Wall;-Wextra;-pedantic;-Wno-misleading-indentation;-Wno-shift-negative-value;-O2>>"
  19. "$<${msvc}:$<BUILD_INTERFACE:-W3;-WX;-Zi;-permissive->>"
  20. )
  21. # Set the build directories
  22. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
  23. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
  24. #===========#
  25. # Configure #
  26. #===========#
  27. # configure a header file to pass the version number only
  28. configure_file(
  29. "${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in"
  30. "${PROJECT_NAME}Config.h"
  31. )
  32. #=============#
  33. # Sub-targets #
  34. #=============#
  35. option(BUILD_HEADER_ONLY "Header only variant" "ON")
  36. option(BUILD_DEMOS "Build demos" "ON")
  37. option(BUILD_EXAMPLES "Build examples" "ON")
  38. add_subdirectory("src")
  39. if (BUILD_DEMOS)
  40. add_subdirectory("demo")
  41. endif (BUILD_DEMOS)
  42. if (BUILD_EXAMPLES)
  43. add_subdirectory("example")
  44. endif (BUILD_EXAMPLES)
  45. include(CTest)
  46. if (BUILD_TESTING)
  47. #add_subdirectory("tests")
  48. endif (BUILD_TESTING)
  49. #=========#
  50. # Install #
  51. #=========#
  52. include(GNUInstallDirs)
  53. install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.h"
  54. DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/nuklear")
  55. include(InstallRequiredSystemLibraries)
  56. set(CPACK_BUNDLE_NAME "${PROJECT_NAME}")
  57. set(CPACK_PACKAGE_VENDOR "Micha Mettke")
  58. set(CPACK_PACKAGE_DESCRIPTION "A single-header ANSI C immediate mode cross-platform GUI library")
  59. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
  60. if (APPLE)
  61. set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
  62. set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
  63. set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CustomVolumeIcon.icns")
  64. endif (APPLE)
  65. set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/src/LICENSE")
  66. set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}")
  67. set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}")
  68. set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/cmake/README.txt")
  69. set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Welcome.txt")
  70. set(CPACK_PACKAGE_CONTACT "https://github.com/Immediate-Mode-UI/Nuklear")
  71. include(CPack)
  72. include(CMakePackageConfigHelpers)
  73. # generate the config file that is includes the exports
  74. configure_package_config_file(
  75. "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in"
  76. "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
  77. INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/nuklear"
  78. NO_SET_AND_CHECK_MACRO
  79. NO_CHECK_REQUIRED_COMPONENTS_MACRO
  80. )
  81. # generate the version file for the config file
  82. write_basic_package_version_file(
  83. "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
  84. VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}"
  85. COMPATIBILITY AnyNewerVersion
  86. )
  87. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
  88. DESTINATION "${CMAKE_INSTALL_DATADIR}/nuklear")