From: Jean-Philippe Bruyère Date: Sun, 9 Jan 2022 18:37:47 +0000 (+0100) Subject: modified cmake to handle shared/static libs X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=58085f9026d05d57a36520138fdfa3102ec03e45;p=jp%2Fvkhelpers.git modified cmake to handle shared/static libs --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 988c4c7..afdb875 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.21) -OPTION (BUILD_SHARED_LIBS "Build using shared libraries" ON) +OPTION (VKH_BUILD_SHARED_LIB "Build using shared libraries" OFF) OPTION(VKH_ENABLE_VMA "enable Vulkan Memory Allocator" ON) if (VKH_ENABLE_VMA) @@ -53,36 +53,60 @@ FIND_PACKAGE(Vulkan REQUIRED) INCLUDE(GNUInstallDirs) -FILE(GLOB sources src/*.c) +FILE(GLOB VKH_SRC src/*.c) if (VKH_ENABLE_VMA) - LIST(APPEND sources src/VmaUsage.cpp) + LIST(APPEND VKH_SRC src/VmaUsage.cpp) ENDIF() CONFIGURE_FILE(vkh.pc.in vkh.pc @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/vkh.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig) -ADD_LIBRARY("${PROJECT_NAME}" ${sources}) - -SET_TARGET_PROPERTIES("${PROJECT_NAME}" PROPERTIES - OUTPUT_NAME ${PROJECT_NAME} - VERSION ${PROJECT_VERSION} - SOVERSION 1 - C_STANDARD 11 - C_EXTENSIONS OFF - PUBLIC_HEADER include/vkh.h -) -TARGET_INCLUDE_DIRECTORIES("${PROJECT_NAME}" - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src - PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${Vulkan_INCLUDE_DIRS} -) -TARGET_LINK_LIBRARIES("${PROJECT_NAME}" - PUBLIC - ${Vulkan_LIBRARIES} -) -INSTALL(TARGETS "${PROJECT_NAME}" - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +FUNCTION (setup_lib LibName) + SET_TARGET_PROPERTIES("${LibName}" PROPERTIES + OUTPUT_NAME ${PROJECT_NAME} + VERSION ${PROJECT_VERSION} + SOVERSION 1 + C_STANDARD 11 + C_EXTENSIONS OFF + PUBLIC_HEADER include/vkh.h + ) + TARGET_INCLUDE_DIRECTORIES("${LibName}" + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${Vulkan_INCLUDE_DIRS} + ) + TARGET_LINK_LIBRARIES("${LibName}" + PUBLIC + ${Vulkan_LIBRARIES} + ) + INSTALL(TARGETS "${LibName}" + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +ENDFUNCTION(setup_lib) + +GET_DIRECTORY_PROPERTY (vkh_has_root_project PARENT_DIRECTORY) + +IF (vkh_has_root_project) + IF (VKH_BUILD_SHARED_LIBS) + ADD_LIBRARY("${PROJECT_NAME}" SHARED ${VKH_SRC}) + setup_lib ("${PROJECT_NAME}") + ELSE() + ADD_LIBRARY("${PROJECT_NAME}" STATIC ${VKH_SRC}) + target_compile_definitions("${PROJECT_NAME}" PUBLIC -DVKVG_STATIC_BUILD) + setup_lib ("${PROJECT_NAME}") + ENDIF() +ELSE() + ADD_LIBRARY("${PROJECT_NAME}_shared" SHARED ${VKH_SRC}) + SET_PROPERTY(TARGET "${PROJECT_NAME}_shared" PROPERTY POSITION_INDEPENDENT_CODE ON) + setup_lib ("${PROJECT_NAME}_shared") + + ADD_LIBRARY("${PROJECT_NAME}_static" STATIC ${VKH_SRC}) + target_compile_definitions("${PROJECT_NAME}_static" PUBLIC -DVKH_STATIC_BUILD) + SET_PROPERTY(TARGET "${PROJECT_NAME}_static" PROPERTY POSITION_INDEPENDENT_CODE OFF) + setup_lib ("${PROJECT_NAME}_static") +ENDIF() + diff --git a/Findvkh.cmake b/Findvkh.cmake new file mode 100644 index 0000000..bd632c7 --- /dev/null +++ b/Findvkh.cmake @@ -0,0 +1,15 @@ +find_path(vkh_INCLUDE_DIR vkh.h) + +find_library(vkh_LIBRARY NAMES vkh) + +# handle the QUIETLY and REQUIRED arguments and set VKHFOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(vkh DEFAULT_MSG + vkh_LIBRARY vkh_INCLUDE_DIR) + +if(vkh_FOUND) + set( vkh_LIBRARIES ${vkh_LIBRARY} ) +endif() + +mark_as_advanced(vkh_INCLUDE_DIR vkh_LIBRARY vkh_LIBRARIES)