cmake_minimum_required(VERSION 3.16) set(namespace "fggl") set(CONAN_BUILD_TYPE "Debug") # Define the project project(fggl VERSION 0.1 DESCRIPTION "" HOMEPAGE_URL "" LANGUAGES CXX) ## # begin conan support ## if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake" TLS_VERIFY ON) endif() include(${CMAKE_BINARY_DIR}/conan.cmake) include(${CMAKE_BINARY_DIR}/conan_paths.cmake) #list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) #list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) #conan_cmake_autodetect(settings) conan_cmake_run(CONANFILE conanfile.txt # or relative build/conanfile.txt BUILD_TYPE ${CONAN_BUILD_TYPE} BASIC_SETUP CMAKE_TARGETS BUILD missing SETTINGS ${settings} ) ## # end conan support ## # Set C++ version set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_library(${PROJECT_NAME} STATIC) ## # begin windows support ## if(MSVC) target_compile_options(${PROJECT_NAME} PUBLIC "/ZI") target_link_options(${PROJECT_NAME} PUBLIC "/INCREMENTAL") endif() ## # end windows support ## set(FGGL_WAYLAND True) include(GNUInstallDirs) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/headers PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) # Doxygen Support # Based on https://vicrucann.github.io/tutorials/quick-cmake-doxygen/ option(BUILD_DOC "Build Documentation" ON) find_package( Doxygen ) if (DOXYGEN_FOUND) # Set docs folder set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) # configure file configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) message("Doxygen build started") # note the option ALL which allows to build the docs together with the application add_custom_target( doc_doxygen ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) endif (DOXYGEN_FOUND) # depedencies find_package( glfw3 ) if ( GLFW3_FOUND ) target_link_libraries(fggl PRIVATE glfw) else() message("GLFW couldn't be found - something strange is going on") find_package( CONAN_PKG::glfw ) target_link_libraries(fggl PRIVATE glfw) endif() # engine #add_subdirectory(vendor/imgui/) add_subdirectory(fggl) # extras #add_subdirectory(tests) add_subdirectory(demo) ## # INSTALL PHASE # see https://decovar.dev/blog/2021/03/08/cmake-cpp-library/ ## 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} )