]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
modified cmake to handle shared/static libs
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 9 Jan 2022 18:37:47 +0000 (19:37 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 9 Jan 2022 18:37:47 +0000 (19:37 +0100)
CMakeLists.txt
Findvkh.cmake [new file with mode: 0644]

index 988c4c7ec1645d70bceb0b7832e9b5ee54c9eded..afdb8756401c7be9efd6596668941092553a5e99 100644 (file)
@@ -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 (file)
index 0000000..bd632c7
--- /dev/null
@@ -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)