cmake_minimum_required(VERSION 3.16) set(namespace "fggl") option(FGGL_CONAN "Should we use conan to find missing dependencies?" ON) set(CONAN_BUILD_TYPE "Debug") # Define the project project(fggl VERSION 0.1 DESCRIPTION "" HOMEPAGE_URL "" LANGUAGES CXX) if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) # slightly cleaner conan support if ( FGGL_CONAN ) set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR} ${CMAKE_PREFIX_PATH}) include( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/conan.cmake ) conan_cmake_configure( REQUIRES opengl/system glfw/3.3.7 glad/0.1.35 glm/0.9.9.8 spdlog/1.10.0 freetype/2.11.1 bullet3/3.22a openal/1.21.1 GENERATORS cmake_find_package cmake_find_package_multi OPTIONS glfw:shared=True glad:gl_profile=core glad:gl_version=4.5 glad:extensions="GL_ARB_get_program_binary" ) if ( CMAKE_CONFIGURATION_TYPES ) foreach(TYPE ${CMAKE_CONFIGURATION_TYPES}) conan_cmake_autodetect( settings BUILD_TYPE ${TYPE} ) conan_cmake_install( PATH_OR_REFERENCE . BUILD missing SETTINGS ${settings} ) endforeach() else() conan_cmake_autodetect( settings BUILD_TYPE ${TYPE} ) conan_cmake_install( PATH_OR_REFERENCE . BUILD missing SETTINGS ${settings} ) endif() endif() # testing support include(CTest) # Documentation support find_package(Doxygen) if (Doxygen_FOUND) add_subdirectory( docs ) else() message(STATUS "Doxygen not found, not building docs") endif() endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ## # begin windows support ## if(MSVC) target_compile_options(${PROJECT_NAME} PUBLIC "/ZI") target_link_options(${PROJECT_NAME} PUBLIC "/INCREMENTAL") endif() ## # end windows support ## # engine #add_subdirectory(vendor/imgui/) add_subdirectory(fggl) ## G++ enable insane checks target_compile_options( ${PROJECT_NAME} PRIVATE -Wall -fno-strict-aliasing -fno-strict-overflow ) # extras #add_subdirectory(tests) add_subdirectory(demo) ## # INSTALL PHASE # see https://decovar.dev/blog/2021/03/08/cmake-cpp-library/ ## include(GNUInstallDirs) file(GLOB_RECURSE public_headers ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/*.hpp ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/*.h ) #include(CMakePrintHelpers) # Structure preserving header macro foreach(header ${public_headers}) file(RELATIVE_PATH header_file_path "${CMAKE_CURRENT_SOURCE_DIR}/include" "${header}") get_filename_component(header_directory_path "${header_file_path}" DIRECTORY) install( FILES ${header} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${header_directory_path}" ) endforeach() set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d") # generate and install export file install(EXPORT "${PROJECT_NAME}Targets" FILE "${PROJECT_NAME}Targets.cmake" NAMESPACE ${namespace}:: DESTINATION cmake ) include(CMakePackageConfigHelpers) # generate the version file for the config file write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" VERSION "${version}" COMPATIBILITY AnyNewerVersion ) # create config file configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION cmake ) # install config files install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION cmake ) # generate the export targets for the build tree export(EXPORT "${PROJECT_NAME}Targets" FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}Targets.cmake" NAMESPACE ${namespace}:: ) install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )