if(WIN32 OR UNIX OR APPLE OR IOS) include(FetchContent) 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 VCPKG_REPO) set(VCPKG_REPO https://github.com/microsoft/vcpkg.git) endif() set(VCPKG_SRC_DIR "${CMAKE_BINARY_DIR}/_deps/vcpkg-src" CACHE INTERNAL "vcpkg source dir") if (NOT EXISTS ${VCPKG_SRC_DIR} OR VCPKG_EXECUTABLE STREQUAL "" OR NOT DEFINED VCPKG_EXECUTABLE) message("Cloning vcpkg...") FetchContent_Declare( vcpkg EXCLUDE_FROM_ALL GIT_REPOSITORY ${VCPKG_REPO} GIT_TAG master GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(vcpkg) if (WIN32) execute_process(COMMAND "${VCPKG_SRC_DIR}/bootstrap-vcpkg.bat") set(VCPKG_EXECUTABLE "${VCPKG_SRC_DIR}/vcpkg.exe" CACHE INTERNAL "vcpkg executable") else() execute_process(COMMAND bash "${VCPKG_SRC_DIR}/bootstrap-vcpkg.sh") set(VCPKG_EXECUTABLE "${VCPKG_SRC_DIR}/vcpkg" CACHE INTERNAL "vcpkg executable") endif() endif() if (WIN32) set(TRIPLET x64-windows-static-md-release CACHE INTERNAL "triplet") elseif(UNIX AND NOT APPLE) set(TRIPLET x64-linux CACHE INTERNAL "triplet") elseif(APPLE AND NOT IOS) set(TRIPLET arm64-osx CACHE INTERNAL "triplet") elseif(IOS) set(TRIPLET arm64-ios CACHE INTERNAL "triplet") endif() execute_process(COMMAND ${VCPKG_EXECUTABLE} install freetype:${TRIPLET} libpng:${TRIPLET}) set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/_deps/vcpkg-src/scripts/buildsystems/vcpkg.cmake" CACHE STRING "cmake toolchain") include("${VCPKG_SRC_DIR}/scripts/buildsystems/vcpkg.cmake") list(APPEND CMAKE_PREFIX_PATH "${VCPKG_SRC_DIR}/installed/${TRIPLET}/lib") list(APPEND CMAKE_PREFIX_PATH "${VCPKG_SRC_DIR}/installed/${TRIPLET}/include") 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) 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) endif() function(LinkMsdf TARGET) if (WIN32 OR UNIX OR APPLE OR IOS) target_link_libraries(${TARGET} PRIVATE msdfgen::msdfgen msdfgen::msdfgen-ext msdf-atlas-gen) if(WIN32) set(STATIC_LIB_EXT "lib") set(freetype_lib_name "freetype") else() set(STATIC_LIB_EXT "a") set(freetype_lib_name "libfreetype") endif() # link freetype first to fix linkage issues on linux target_link_libraries(${TARGET} PUBLIC "${VCPKG_SRC_DIR}/installed/${TRIPLET}/lib/${freetype_lib_name}.${STATIC_LIB_EXT}") file(GLOB installed_libs "${VCPKG_SRC_DIR}/installed/${TRIPLET}/lib/*.${STATIC_LIB_EXT}") foreach(lib ${installed_libs}) get_filename_component(libname ${lib} NAME_WE) if (NOT ${libname} STREQUAL ${freetype_lib_name}) target_link_libraries(${TARGET} PUBLIC ${lib}) endif() endforeach() endif() endfunction()