diff --git a/3rdParty/msdf/CMakeLists.txt b/3rdParty/msdf/CMakeLists.txt index 2f4b0e8..00a89e6 100644 --- a/3rdParty/msdf/CMakeLists.txt +++ b/3rdParty/msdf/CMakeLists.txt @@ -1,92 +1,96 @@ -include(FetchContent) +if (ENABLE_MSDF) + include(FetchContent) -if(NOT DEFINED MSDFGEN_REPO) - set(MSDFGEN_REPO https://github.com/Chlumsky/msdfgen.git) -endif () + if(NOT DEFINED MSDFGEN_REPO) + set(MSDFGEN_REPO https://github.com/Chlumsky/msdfgen.git) + endif () -if(NOT DEFINED MSDFGEN_ATRLAS_REPO) - set(MSDFGEN_ATRLAS_REPO https://github.com/Chlumsky/msdf-atlas-gen.git) -endif() + if(NOT DEFINED MSDFGEN_ATRLAS_REPO) + set(MSDFGEN_ATRLAS_REPO https://github.com/Chlumsky/msdf-atlas-gen.git) + endif() -if(NOT DEFINED FREETYPE_REPO) - set(FREETYPE_REPO https://github.com/freetype/freetype.git) -endif() + if(NOT DEFINED FREETYPE_REPO) + set(FREETYPE_REPO https://github.com/freetype/freetype.git) + endif() + + unset(Freetype_FOUND) + find_package(Freetype QUIET) + if (NOT Freetype_FOUND OR NOT EXISTS "${CMAKE_BINARY_DIR}/_deps/freetype-src/build") + message("Installing freetype from sources") + FetchContent_Declare( + freetype + EXCLUDE_FROM_ALL + GIT_REPOSITORY ${FREETYPE_REPO} + GIT_TAG master + GIT_SHALLOW TRUE + ) + set(FT_DISABLE_ZLIB ON CACHE BOOL "" FORCE) + set(FT_DISABLE_BZIP2 ON CACHE BOOL "" FORCE) + set(FT_DISABLE_PNG ON CACHE BOOL "" FORCE) + set(FT_DISABLE_HARFBUZZ ON CACHE BOOL "" FORCE) + set(FT_DISABLE_BROTLI ON CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(freetype) + + set(FT_SRC_DIR "${CMAKE_BINARY_DIR}/_deps/freetype-src") + set(FT_BUILD_DIR "${FT_SRC_DIR}/build") + file(MAKE_DIRECTORY ${FT_BUILD_DIR}) + set(PLATFORM_ARG "") + if (IOS) + set(PLATFORM_ARG "-DPLATFORM=OS64") + endif() + execute_process( + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} -S ${FT_SRC_DIR} -B ${FT_BUILD_DIR} + -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${FT_SRC_DIR}/freetype-install ${PLATFORM_ARG} + WORKING_DIRECTORY ${FT_BUILD_DIR} + ) + execute_process( + COMMAND ${CMAKE_COMMAND} --build ${FT_BUILD_DIR} --config Release --target install + WORKING_DIRECTORY ${FT_BUILD_DIR} RESULT_VARIABLE build_result + ) + if (NOT ${build_result} EQUAL "0") + message(FATAL_ERROR "Failed to build freetype!") + endif() + set(FREETYPE_INCLUDE_DIR "${FT_SRC_DIR}/freetype-install/include/freetype2" CACHE INTERNAL "ft include dir") + set(FREETYPE_BUILT_FROM_SOURCES ON CACHE BOOL "ft built from sources") + list(APPEND CMAKE_PREFIX_PATH "${FT_SRC_DIR}/freetype-install") + endif() + + set(MSDFGEN_DISABLE_SVG TRUE CACHE INTERNAL "disable msdfgen svg") + set(MSDFGEN_USE_SKIA OFF CACHE BOOL "use skia" FORCE) + set(MSDF_ATLAS_USE_SKIA OFF CACHE BOOL "use skia" FORCE) + set(MSDF_ATLAS_MSDFGEN_EXTERNAL ON CACHE BOOL "do not build msdfgen submodule" FORCE) + set(MSDFGEN_DYNAMIC_RUNTIME ON CACHE BOOL "msvc dynamic runtime" FORCE) + set(MSDF_ATLAS_DYNAMIC_RUNTIME ON CACHE BOOL "msvc dynamic runtime" FORCE) + set(MSDFGEN_DISABLE_PNG ON CACHE BOOL "disable png" FORCE) + set(MSDFGEN_USE_VCPKG OFF CACHE BOOL "do not use vcpkg" FORCE) + set(MSDF_ATLAS_USE_VCPKG OFF CACHE BOOL "do not use vcpkg" FORCE) -unset(Freetype_FOUND) -find_package(Freetype QUIET) -if (NOT Freetype_FOUND OR NOT EXISTS "${CMAKE_BINARY_DIR}/_deps/freetype-src/build") - message("Installing freetype from sources") FetchContent_Declare( - freetype - EXCLUDE_FROM_ALL - GIT_REPOSITORY ${FREETYPE_REPO} - GIT_TAG master - GIT_SHALLOW TRUE + msdfgen + EXCLUDE_FROM_ALL + GIT_REPOSITORY ${MSDFGEN_REPO} + GIT_TAG v1.12 + GIT_SHALLOW TRUE ) - set(FT_DISABLE_ZLIB ON CACHE BOOL "" FORCE) - set(FT_DISABLE_BZIP2 ON CACHE BOOL "" FORCE) - set(FT_DISABLE_PNG ON CACHE BOOL "" FORCE) - set(FT_DISABLE_HARFBUZZ ON CACHE BOOL "" FORCE) - set(FT_DISABLE_BROTLI ON CACHE BOOL "" FORCE) - FetchContent_MakeAvailable(freetype) + FetchContent_MakeAvailable(msdfgen) - set(FT_SRC_DIR "${CMAKE_BINARY_DIR}/_deps/freetype-src") - set(FT_BUILD_DIR "${FT_SRC_DIR}/build") - file(MAKE_DIRECTORY ${FT_BUILD_DIR}) - set(PLATFORM_ARG "") - if (IOS) - set(PLATFORM_ARG "-DPLATFORM=OS64") - endif() - execute_process( - COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} -S ${FT_SRC_DIR} -B ${FT_BUILD_DIR} - -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${FT_SRC_DIR}/freetype-install ${PLATFORM_ARG} - WORKING_DIRECTORY ${FT_BUILD_DIR} + FetchContent_Declare( + msdfgen_atlas + EXCLUDE_FROM_ALL + GIT_REPOSITORY ${MSDFGEN_ATRLAS_REPO} + GIT_TAG master + GIT_SHALLOW TRUE ) - execute_process( - COMMAND ${CMAKE_COMMAND} --build ${FT_BUILD_DIR} --config Release --target install - WORKING_DIRECTORY ${FT_BUILD_DIR} RESULT_VARIABLE build_result - ) - if (NOT ${build_result} EQUAL "0") - message(FATAL_ERROR "Failed to build freetype!") - endif() - set(FREETYPE_INCLUDE_DIR "${FT_SRC_DIR}/freetype-install/include/freetype2" CACHE INTERNAL "ft include dir") - set(FREETYPE_BUILT_FROM_SOURCES ON CACHE BOOL "ft built from sources") - list(APPEND CMAKE_PREFIX_PATH "${FT_SRC_DIR}/freetype-install") + FetchContent_MakeAvailable(msdfgen_atlas) endif() -set(MSDFGEN_DISABLE_SVG TRUE CACHE INTERNAL "disable msdfgen svg") -set(MSDFGEN_USE_SKIA OFF CACHE BOOL "use skia" FORCE) -set(MSDF_ATLAS_USE_SKIA OFF CACHE BOOL "use skia" FORCE) -set(MSDF_ATLAS_MSDFGEN_EXTERNAL ON CACHE BOOL "do not build msdfgen submodule" FORCE) -set(MSDFGEN_DYNAMIC_RUNTIME ON CACHE BOOL "msvc dynamic runtime" FORCE) -set(MSDF_ATLAS_DYNAMIC_RUNTIME ON CACHE BOOL "msvc dynamic runtime" FORCE) -set(MSDFGEN_DISABLE_PNG ON CACHE BOOL "disable png" FORCE) -set(MSDFGEN_USE_VCPKG OFF CACHE BOOL "do not use vcpkg" FORCE) -set(MSDF_ATLAS_USE_VCPKG OFF CACHE BOOL "do not use vcpkg" FORCE) - -FetchContent_Declare( - msdfgen - EXCLUDE_FROM_ALL - GIT_REPOSITORY ${MSDFGEN_REPO} - GIT_TAG v1.12 - GIT_SHALLOW TRUE -) -FetchContent_MakeAvailable(msdfgen) - -FetchContent_Declare( - msdfgen_atlas - EXCLUDE_FROM_ALL - GIT_REPOSITORY ${MSDFGEN_ATRLAS_REPO} - GIT_TAG master - GIT_SHALLOW TRUE -) -FetchContent_MakeAvailable(msdfgen_atlas) - function(LinkMsdf TARGET) - target_link_libraries(${TARGET} PRIVATE msdfgen::msdfgen msdfgen::msdfgen-ext msdf-atlas-gen) - if (FREETYPE_BUILT_FROM_SOURCES) - target_include_directories(${TARGET} PUBLIC ${FREETYPE_INCLUDE_DIR}) - else() - target_include_directories(${TARGET} PUBLIC ${FREETYPE_INCLUDE_DIRS}) + if (ENABLE_MSDF) + target_link_libraries(${TARGET} PRIVATE msdfgen::msdfgen msdfgen::msdfgen-ext msdf-atlas-gen) + if (FREETYPE_BUILT_FROM_SOURCES) + target_include_directories(${TARGET} PUBLIC ${FREETYPE_INCLUDE_DIR}) + else() + target_include_directories(${TARGET} PUBLIC ${FREETYPE_INCLUDE_DIRS}) + endif() endif() -endfunction() +endfunction() \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index f23e88c..ca70a70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") option(TRACY_ENABLE "Enable Tracy Profiler" OFF) - +option(ENABLE_MSDF "Enable msdf library" ON) add_subdirectory(3rdParty) project (openVulkanoCpp VERSION 1.0 LANGUAGES C CXX)