| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- cmake_minimum_required(VERSION 3.15)
- project(Nuklear VERSION 0.0.1 LANGUAGES C)
- #===============#
- # Compiler args #
- #===============#
- set(CMAKE_C_VISIBILITY_PRESET hidden)
- set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
- set(CMAKE_C_STANDARD 90)
- add_library("${PROJECT_NAME}_compiler_flags" INTERFACE)
- target_compile_features("${PROJECT_NAME}_compiler_flags" INTERFACE "c_std_${CMAKE_C_STANDARD}")
- # add compiler warning flags just when building this project via
- # the BUILD_INTERFACE genex
- set(gcc_like "$<COMPILE_LANG_AND_ID:C,CXX,ARMClang,AppleClang,Clang,GNU,LCC>")
- set(msvc "$<COMPILE_LANG_AND_ID:C,CXX,MSVC>")
- target_compile_options(
- "${PROJECT_NAME}_compiler_flags"
- INTERFACE
- "$<${gcc_like}:$<BUILD_INTERFACE:-Wall;-Wextra;-pedantic;-Wno-misleading-indentation;-Wno-shift-negative-value;-O2>>"
- "$<${msvc}:$<BUILD_INTERFACE:-W3;-WX;-Zi;-permissive->>"
- )
- # Set the build directories
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
- #===========#
- # Configure #
- #===========#
- # configure a header file to pass the version number only
- configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in"
- "${PROJECT_NAME}Config.h"
- )
- #=============#
- # Sub-targets #
- #=============#
- option(BUILD_HEADER_ONLY "Header only variant" "ON")
- option(BUILD_DEMOS "Build demos" "ON")
- option(BUILD_EXAMPLES "Build examples" "ON")
- add_subdirectory("src")
- if (BUILD_DEMOS)
- add_subdirectory("demo")
- endif (BUILD_DEMOS)
- if (BUILD_EXAMPLES)
- add_subdirectory("example")
- endif (BUILD_EXAMPLES)
- include(CTest)
- if (BUILD_TESTING)
- #add_subdirectory("tests")
- endif (BUILD_TESTING)
- #=========#
- # Install #
- #=========#
- include(GNUInstallDirs)
- install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.h"
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/nuklear")
- include(InstallRequiredSystemLibraries)
- set(CPACK_BUNDLE_NAME "${PROJECT_NAME}")
- set(CPACK_PACKAGE_VENDOR "Micha Mettke")
- set(CPACK_PACKAGE_DESCRIPTION "A single-header ANSI C immediate mode cross-platform GUI library")
- set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
- if (APPLE)
- set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
- set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
- set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CustomVolumeIcon.icns")
- endif (APPLE)
- set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/src/LICENSE")
- set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}")
- set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}")
- set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/cmake/README.txt")
- set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Welcome.txt")
- set(CPACK_PACKAGE_CONTACT "https://github.com/Immediate-Mode-UI/Nuklear")
- include(CPack)
- include(CMakePackageConfigHelpers)
- # generate the config file that is includes the exports
- configure_package_config_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
- INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/nuklear"
- NO_SET_AND_CHECK_MACRO
- NO_CHECK_REQUIRED_COMPONENTS_MACRO
- )
- # generate the version file for the config file
- write_basic_package_version_file(
- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
- VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}"
- COMPATIBILITY AnyNewerVersion
- )
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
- DESTINATION "${CMAKE_INSTALL_DATADIR}/nuklear")
|