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")
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
- $<$<BOOL:${VKVG_USE_FREETYPE}>:${FREETYPE_INCLUDE_DIRS}>
- $<$<BOOL:${VKVG_USE_HARFBUZZ}>:${HarfBuzz_INCLUDE_DIRS}>
- $<$<BOOL:${VKVG_USE_FONTCONFIG}>:${Fontconfig_INCLUDE_DIRS}>
- $<$<NOT:$<BOOL:${VKVG_SVG}>>:${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
- "$<$<BOOL:${UNIX} AND ${BUILD_SHARED_LIBS}>:-lm>"
- PRIVATE
- "$<$<BOOL:${VKVG_USE_FREETYPE}>:${FREETYPE_LIBRARIES}>"
- "$<$<BOOL:${VKVG_USE_HARFBUZZ}>:${HarfBuzz_LIBRARIES}>"
- "$<$<BOOL:${VKVG_USE_FONTCONFIG}>:${Fontconfig_LIBRARIES}>"
- "$<$<BOOL:${VKVG_FILL_NZ_GLUTESS}>:glutess>"
-)
+ TARGET_INCLUDE_DIRECTORIES("${LibName}"
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}/vkh/src
+ $<$<BOOL:${VKVG_USE_FREETYPE}>:${FREETYPE_INCLUDE_DIRS}>
+ $<$<BOOL:${VKVG_USE_HARFBUZZ}>:${HarfBuzz_INCLUDE_DIRS}>
+ $<$<BOOL:${VKVG_USE_FONTCONFIG}>:${Fontconfig_INCLUDE_DIRS}>
+ $<$<NOT:$<BOOL:${VKVG_SVG}>>:${CMAKE_CURRENT_SOURCE_DIR}/src/nsvg>
+ $<$<BOOL:${VKVG_RECORDING}>:${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
+ "$<$<BOOL:${UNIX} AND ${VKVG_BUILD_SHARED_LIB}>:-lm>"
+ PRIVATE
+ "$<$<BOOL:${VKVG_USE_FREETYPE}>:${FREETYPE_LIBRARIES}>"
+ "$<$<BOOL:${VKVG_USE_HARFBUZZ}>:${HarfBuzz_LIBRARIES}>"
+ "$<$<BOOL:${VKVG_USE_FONTCONFIG}>:${Fontconfig_LIBRARIES}>"
+ "$<$<BOOL:${VKVG_FILL_NZ_GLUTESS}>: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.")
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 ()
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")