add cmake option to enable or disable using of msdf library

This commit is contained in:
ohyzha
2024-08-07 20:04:19 +03:00
parent 64712f0c94
commit 634b4431b3
2 changed files with 85 additions and 81 deletions

View File

@@ -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()

View File

@@ -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)