From: Jean-Philippe Bruyère Date: Sun, 9 Jan 2022 18:45:05 +0000 (+0100) Subject: try to better handle static/shared libraries and linkage X-Git-Tag: v0.3.0-beta~34 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=08bd94048c4fb8f68ba83da4d47c319e8e489d3b;p=jp%2Fvkvg.git try to better handle static/shared libraries and linkage --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 1866ef5..41e0aef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ SET(LANG "CXX") SET(CMAKE_C_STANDARD 11) SET(CMAKE_CXX_STANDARD 11) -OPTION (BUILD_SHARED_LIBS "Build using shared libraries" ON) +OPTION (VKVG_BUILD_SHARED_LIB "Build using shared libraries" ON) PROJECT(vkvg VERSION 0.3.0 DESCRIPTION "Vulkan Vector Graphic") @@ -215,116 +215,188 @@ ENDIF() CONFIGURE_FILE(vkvg.pc.in vkvg.pc @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/vkvg.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig) -ADD_LIBRARY("${PROJECT_NAME}" ${VKVG_SRC} ${SHADERS} ${SHADERS_H} ) -IF (VKVG_SVG AND NOT TARGET vkvk-svg) - ADD_SUBDIRECTORY (external/vkvg-svg) -ENDIF() +FUNCTION (setup_lib LibName) + LIST (APPEND VKVG_TARGETS ${LibName}) -SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES - OUTPUT_NAME ${PROJECT_NAME} - VERSION ${vkvg_VERSION_MAJOR}.${vkvg_VERSION_MINOR} - SOVERSION ${vkvg_VERSION_MAJOR} - C_STANDARD 11 - PUBLIC_HEADER "${VKVG_PUBLIC_HEADERS}" -) + SET_TARGET_PROPERTIES(${LibName} PROPERTIES + OUTPUT_NAME ${PROJECT_NAME} + VERSION ${vkvg_VERSION_MAJOR}.${vkvg_VERSION_MINOR} + SOVERSION ${vkvg_VERSION_MAJOR} + C_STANDARD 11 + PUBLIC_HEADER "${VKVG_PUBLIC_HEADERS}" + ) -TARGET_INCLUDE_DIRECTORIES("${PROJECT_NAME}" - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/vkh/src - $<$:${FREETYPE_INCLUDE_DIRS}> - $<$:${HarfBuzz_INCLUDE_DIRS}> - $<$:${Fontconfig_INCLUDE_DIRS}> - $<$>:${CMAKE_CURRENT_SOURCE_DIR}/src/nsvg> - PUBLIC - ${Vulkan_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include -) -TARGET_LINK_LIBRARIES("${PROJECT_NAME}" - PUBLIC - ${Vulkan_LIBRARIES} - vkh - "$<$:-lm>" - PRIVATE - "$<$:${FREETYPE_LIBRARIES}>" - "$<$:${HarfBuzz_LIBRARIES}>" - "$<$:${Fontconfig_LIBRARIES}>" - "$<$:glutess>" -) + TARGET_INCLUDE_DIRECTORIES("${LibName}" + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/vkh/src + $<$:${FREETYPE_INCLUDE_DIRS}> + $<$:${HarfBuzz_INCLUDE_DIRS}> + $<$:${Fontconfig_INCLUDE_DIRS}> + $<$>:${CMAKE_CURRENT_SOURCE_DIR}/src/nsvg> + $<$:${CMAKE_CURRENT_SOURCE_DIR}/src/recording> + PUBLIC + ${Vulkan_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include + ) -INSTALL(TARGETS "${PROJECT_NAME}" - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + TARGET_LINK_LIBRARIES("${LibName}" + PUBLIC + ${Vulkan_LIBRARIES} + vkh + "$<$:-lm>" + PRIVATE + "$<$:${FREETYPE_LIBRARIES}>" + "$<$:${HarfBuzz_LIBRARIES}>" + "$<$:${Fontconfig_LIBRARIES}>" + "$<$:glutess>" + ) -IF (SHADERS_H) - ADD_DEPENDENCIES("${PROJECT_NAME}" BuildShadersHeader) -ENDIF () + 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 (vkvg_has_root_project PARENT_DIRECTORY) + +IF (vkvg_has_root_project) + IF (VKVG_BUILD_SHARED_LIBS) + ADD_LIBRARY("${PROJECT_NAME}" SHARED ${VKVG_SRC} ${SHADERS} ${SHADERS_H}) + SET_PROPERTY(TARGET "${PROJECT_NAME}" PROPERTY POSITION_INDEPENDENT_CODE ON) + SET_PROPERTY(TARGET vkh PROPERTY POSITION_INDEPENDENT_CODE ON) + SET_PROPERTY(TARGET glutess PROPERTY POSITION_INDEPENDENT_CODE ON) + setup_lib ("${PROJECT_NAME}") + ELSE() + ADD_LIBRARY("${PROJECT_NAME}" STATIC ${VKVG_SRC} ${SHADERS} ${SHADERS_H} ) + target_compile_definitions("${PROJECT_NAME}" PUBLIC -DVKVG_STATIC_BUILD) + SET_PROPERTY(TARGET "${PROJECT_NAME}" PROPERTY POSITION_INDEPENDENT_CODE OFF) + SET_PROPERTY(TARGET vkh PROPERTY POSITION_INDEPENDENT_CODE OFF) + SET_PROPERTY(TARGET glutess PROPERTY POSITION_INDEPENDENT_CODE OFF) + setup_lib ("${PROJECT_NAME}") + ENDIF() +ELSE() + SET_PROPERTY(TARGET vkh PROPERTY POSITION_INDEPENDENT_CODE ON) + SET_PROPERTY(TARGET glutess PROPERTY POSITION_INDEPENDENT_CODE ON) + + ADD_LIBRARY("${PROJECT_NAME}_shared" SHARED ${VKVG_SRC} ${SHADERS} ${SHADERS_H}) + SET_PROPERTY(TARGET "${PROJECT_NAME}_shared" PROPERTY POSITION_INDEPENDENT_CODE ON) + setup_lib ("${PROJECT_NAME}_shared") + + ADD_LIBRARY("${PROJECT_NAME}_static" STATIC ${VKVG_SRC} ${SHADERS} ${SHADERS_H} ) + target_compile_definitions("${PROJECT_NAME}_static" PUBLIC -DVKVG_STATIC_BUILD) + SET_PROPERTY(TARGET "${PROJECT_NAME}_static" PROPERTY POSITION_INDEPENDENT_CODE OFF) + setup_lib ("${PROJECT_NAME}_static") + + IF (VKVG_BUILD_TESTS) + ADD_SUBDIRECTORY(tests) + ELSEIF (VKVG_BUILD_OFFSCREEN_TEST) + ADD_EXECUTABLE(test_offscreen "${CMAKE_CURRENT_SOURCE_DIR}/tests/offscreen.c") + TARGET_INCLUDE_DIRECTORIES(test_offscreen PRIVATE + ${Vulkan_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) + TARGET_LINK_LIBRARIES(test_offscreen + ${Vulkan_LIBRARIES} + vkvg + ) + ENDIF (VKVG_BUILD_TESTS) + + IF (VKVG_BUILD_DOCS) + set(DOXYGEN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc) + set(DOXYGEN_INPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include") + set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doc) + set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html) + + set(DOXYFILE_IN ${DOXYGEN_DIR}/Doxygen.in) + set(DOXYFILE_OUT ${DOXYGEN_OUTPUT_DIR}/Doxyfile) + + #configure_file(${DOXYGEN_DIR}/dox_layout.xml ${DOXYGEN_OUTPUT_DIR}/dox_layout.xml @ONLY) + + configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY) + + add_custom_target(copy-doc-files ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory "${DOXYGEN_DIR}/doxy_theme" ${DOXYGEN_OUTPUT_DIR}) + + add_custom_command(OUTPUT ${DOXYGEN_INDEX_FILE} + DEPENDS "${VKVG_PUBLIC_HEADERS}" copy-doc-files + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} + MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN} + COMMENT "Generating docs") + add_custom_target(doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE}) + + find_package(Sphinx) + + IF (Sphinx_FOUND) + + set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc) + set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/sphinx) + set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html) + + add_custom_command(OUTPUT ${SPHINX_INDEX_FILE} + COMMAND + ${SPHINX_EXECUTABLE} -b html + -Dbreathe_projects.VKVG=${DOXYGEN_OUTPUT_DIR}/xml + ${SPHINX_SOURCE} ${SPHINX_BUILD} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS + doxygen + # Other docs files you want to track should go here (or in some variable) + ${SPHINX_SOURCE}/index.rst + ${DOXYGEN_INDEX_FILE} + MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py + COMMENT "Generating documentation with Sphinx") + + add_custom_target(sphinx ALL DEPENDS ${SPHINX_INDEX_FILE}) + ENDIF () + ENDIF (VKVG_BUILD_DOCS) -IF (VKVG_BUILD_TESTS) - ADD_SUBDIRECTORY(tests) -ELSEIF (VKVG_BUILD_OFFSCREEN_TEST) - ADD_EXECUTABLE(test_offscreen "${CMAKE_CURRENT_SOURCE_DIR}/tests/offscreen.c") - TARGET_INCLUDE_DIRECTORIES(test_offscreen PRIVATE - ${Vulkan_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/include - ) - TARGET_LINK_LIBRARIES(test_offscreen - ${Vulkan_LIBRARIES} - vkvg - ) -ENDIF (VKVG_BUILD_TESTS) + IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + INCLUDE(InstallRequiredSystemLibraries) -IF (VKVG_BUILD_DOCS) - set(DOXYGEN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc) - set(DOXYGEN_INPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include") - set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doc) - set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html) + set(CPACK_ADD_LDCONFIG_CALL 1) + SET(CPACK_SET_DESTDIR "on") + SET(CPACK_PACKAGING_INSTALL_PREFIX "/tmp") + SET(CPACK_GENERATOR "DEB") - set(DOXYFILE_IN ${DOXYGEN_DIR}/Doxygen.in) - set(DOXYFILE_OUT ${DOXYGEN_OUTPUT_DIR}/Doxyfile) + SET(CPACK_PACKAGE_DESCRIPTION "Vulkan vector graphic library") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "2d vector drawing library using vulkan") + SET(CPACK_PACKAGE_VENDOR "jp Bruyere") + SET(CPACK_PACKAGE_CONTACT "jp_bruyere@hotmail.com") - #configure_file(${DOXYGEN_DIR}/dox_layout.xml ${DOXYGEN_OUTPUT_DIR}/dox_layout.xml @ONLY) + SET(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") + SET(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") + SET(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") + SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") + SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") - configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY) + #dependencies for this service menu + SET(CPACK_DEBIAN_PACKAGE_DEPENDS " libharfbuzz-gobject0 , libfontconfig1 , libfreetype6 ") - add_custom_target(copy-doc-files ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory "${DOXYGEN_DIR}/doxy_theme" ${DOXYGEN_OUTPUT_DIR}) + SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") + SET(CPACK_DEBIAN_PACKAGE_SECTION "libraries") + SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) - add_custom_command(OUTPUT ${DOXYGEN_INDEX_FILE} - DEPENDS "${VKVG_PUBLIC_HEADERS}" copy-doc-files - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} - MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN} - COMMENT "Generating docs") - add_custom_target(doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE}) + SET(CPACK_COMPONENTS_ALL Libraries ApplicationData) - find_package(Sphinx) - IF (Sphinx_FOUND) + INCLUDE(CPack) + ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") - set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc) - set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/sphinx) - set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html) - - add_custom_command(OUTPUT ${SPHINX_INDEX_FILE} - COMMAND - ${SPHINX_EXECUTABLE} -b html - -Dbreathe_projects.VKVG=${DOXYGEN_OUTPUT_DIR}/xml - ${SPHINX_SOURCE} ${SPHINX_BUILD} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS - doxygen - # Other docs files you want to track should go here (or in some variable) - ${SPHINX_SOURCE}/index.rst - ${DOXYGEN_INDEX_FILE} - MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py - COMMENT "Generating documentation with Sphinx") - - add_custom_target(sphinx ALL DEPENDS ${SPHINX_INDEX_FILE}) - ENDIF () -ENDIF (VKVG_BUILD_DOCS) +ENDIF() + +IF (SHADERS_H) + FOREACH(VKVG_TARGET IN ${VKVG_TARGETS}) + MESSAGE(STATUS "TARGETS: ${VKVG_TARGET}") + ADD_DEPENDENCIES("${VKVG_TARGET}" BuildShadersHeader) + ENDFOREACH() +ENDIF () + +IF (VKVG_SVG AND NOT TARGET vkvk-svg) + ADD_SUBDIRECTORY (external/vkvg-svg) +ENDIF() IF (BUILD_SHARED_LIBS) MESSAGE(STATUS "Build Shared library.") @@ -391,7 +463,7 @@ ELSE () MESSAGE(STATUS "Font filtering\t= Grayscale.") ENDIF () IF (VKVG_FILL_NZ_GLUTESS) - MESSAGE(STATUS "Fill NON ZERO\t= glu tessellatro.") + MESSAGE(STATUS "Fill NON ZERO\t= glu tessellator.") ELSE () MESSAGE(STATUS "Fill NON ZERO\t= ear clipping.") ENDIF () @@ -405,36 +477,3 @@ IF (VKVG_BUILD_DOCS) ELSE () MESSAGE(STATUS "Build documentation\t= disabled.") ENDIF () - - -IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") - INCLUDE(InstallRequiredSystemLibraries) - - set(CPACK_ADD_LDCONFIG_CALL 1) - SET(CPACK_SET_DESTDIR "on") - SET(CPACK_PACKAGING_INSTALL_PREFIX "/tmp") - SET(CPACK_GENERATOR "DEB") - - SET(CPACK_PACKAGE_DESCRIPTION "Vulkan vector graphic library") - SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "2d vector drawing library using vulkan") - SET(CPACK_PACKAGE_VENDOR "jp Bruyere") - SET(CPACK_PACKAGE_CONTACT "jp_bruyere@hotmail.com") - - SET(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") - SET(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") - SET(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") - SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") - SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") - - #dependencies for this service menu - SET(CPACK_DEBIAN_PACKAGE_DEPENDS " libharfbuzz-gobject0 , libfontconfig1 , libfreetype6 ") - - SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") - SET(CPACK_DEBIAN_PACKAGE_SECTION "libraries") - SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) - - SET(CPACK_COMPONENTS_ALL Libraries ApplicationData) - - - INCLUDE(CPack) -ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e281c64..73bfec8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,7 +32,8 @@ TARGET_LINK_LIBRARIES(tests_common PUBLIC ${Vulkan_LIBRARIES} ${GLFW3_LIBRARY} - vkvg + $<$:vkvg_static> + $<$:vkvg> $<$:vkvg-svg> ) diff --git a/vkh b/vkh index b301373..58085f9 160000 --- a/vkh +++ b/vkh @@ -1 +1 @@ -Subproject commit b3013732ffe957758ba1c857e11b1c9bebc68d7c +Subproject commit 58085f9026d05d57a36520138fdfa3102ec03e45