Improve CMake build setup Harfbuzz and Freetype deps (#3879)
This commit is contained in:
23
.github/workflows/qt-ci.yml
vendored
23
.github/workflows/qt-ci.yml
vendored
@@ -73,14 +73,16 @@ jobs:
|
||||
deployment_target: 12.0
|
||||
deployment_arch: "x86_64;arm64"
|
||||
compiler: ""
|
||||
- name: macOS_LLVM
|
||||
os: macos-14
|
||||
build_type: RelWithDebInfo
|
||||
qt_version: 6.9.1
|
||||
qt_target: desktop
|
||||
deployment_target: 12.0
|
||||
deployment_arch: "arm64"
|
||||
compiler: "llvm"
|
||||
# disabled due to https://github.com/llvm/llvm-project/issues/77653
|
||||
# https://github.com/maplibre/maplibre-native/pull/3879#issuecomment-3406495279
|
||||
# - name: macOS_LLVM
|
||||
# os: macos-14
|
||||
# build_type: RelWithDebInfo
|
||||
# qt_version: 6.9.1
|
||||
# qt_target: desktop
|
||||
# deployment_target: 12.0
|
||||
# deployment_arch: "arm64"
|
||||
# compiler: "llvm"
|
||||
- name: win64_msvc2022
|
||||
os: windows-2022
|
||||
build_type: "RelWithDebInfo"
|
||||
@@ -191,6 +193,11 @@ jobs:
|
||||
key: Qt_${{ matrix.name }}_${{ matrix.qt_version }}
|
||||
max-size: 200M
|
||||
|
||||
- name: Print cmake version
|
||||
run: |
|
||||
cmake --version
|
||||
which cmake
|
||||
|
||||
- name: Build maplibre-native (macOS)
|
||||
if: runner.os == 'macOS' && matrix.qt_target == 'desktop'
|
||||
run: |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.24 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
|
||||
|
||||
option(MLN_WITH_CORE_ONLY "Build only the core bits, no platform code" OFF)
|
||||
option(MLN_WITH_CLANG_TIDY "Build with clang-tidy checks enabled" OFF)
|
||||
@@ -1342,10 +1342,14 @@ if (MLN_TEXT_SHAPING_HARFBUZZ)
|
||||
)
|
||||
include(${PROJECT_SOURCE_DIR}/vendor/freetype.cmake)
|
||||
include(${PROJECT_SOURCE_DIR}/vendor/harfbuzz.cmake)
|
||||
set(SHAPE_TARGETS
|
||||
freetype
|
||||
harfbuzz
|
||||
|
||||
target_include_directories(
|
||||
mbgl-core SYSTEM
|
||||
PUBLIC
|
||||
${PROJECT_SOURCE_DIR}/vendor/freetype/include
|
||||
${PROJECT_SOURCE_DIR}/vendor/harfbuzz/src
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
@@ -1457,7 +1461,8 @@ target_link_libraries(
|
||||
mbgl-vendor-wagyu
|
||||
$<$<BOOL:${MLN_WITH_METAL}>:mbgl-vendor-metal-cpp>
|
||||
$<IF:$<BOOL:${MLN_USE_RUST}>,mbgl-rustutils,mbgl-vendor-csscolorparser>
|
||||
${SHAPE_TARGETS} # from harfbuzz.cmake
|
||||
$<$<BOOL:${MLN_TEXT_SHAPING_HARFBUZZ}>:mbgl-freetype>
|
||||
$<$<BOOL:${MLN_TEXT_SHAPING_HARFBUZZ}>:mbgl-harfbuzz>
|
||||
PUBLIC
|
||||
MapLibreNative::Base
|
||||
mbgl-vendor-expected-lite
|
||||
@@ -1498,7 +1503,6 @@ set(EXPORT_TARGETS
|
||||
mbgl-vendor-metal-cpp
|
||||
mbgl-vendor-filesystem
|
||||
unordered_dense
|
||||
${SHAPE_TARGETS} # from harfbuzz.cmake
|
||||
)
|
||||
|
||||
if(MLN_USE_RUST)
|
||||
@@ -1507,6 +1511,10 @@ else()
|
||||
list(APPEND EXPORT_TARGETS mbgl-vendor-csscolorparser)
|
||||
endif()
|
||||
|
||||
if(MLN_TEXT_SHAPING_HARFBUZZ)
|
||||
list(APPEND EXPORT_TARGETS mbgl-freetype mbgl-harfbuzz)
|
||||
endif()
|
||||
|
||||
export(TARGETS ${EXPORT_TARGETS} FILE MapboxCoreTargets.cmake)
|
||||
|
||||
if(MLN_WITH_VULKAN)
|
||||
|
||||
@@ -211,9 +211,9 @@ if(NOT MLN_USE_BUILTIN_ICU AND NOT "${ARMERGE}" STREQUAL "ARMERGE-NOTFOUND")
|
||||
POST_BUILD
|
||||
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
||||
$<TARGET_FILE:mbgl-core>
|
||||
$<TARGET_FILE:freetype>
|
||||
$<TARGET_FILE:mbgl-freetype>
|
||||
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
||||
$<TARGET_FILE:harfbuzz>
|
||||
$<TARGET_FILE:mbgl-harfbuzz>
|
||||
$<TARGET_FILE:mbgl-vendor-nunicode>
|
||||
$<TARGET_FILE:mbgl-vendor-sqlite>
|
||||
$<TARGET_FILE:mbgl-vendor-parsedate>
|
||||
|
||||
@@ -160,9 +160,9 @@ if(NOT "${ARMERGE}" STREQUAL "ARMERGE-NOTFOUND")
|
||||
POST_BUILD
|
||||
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
||||
$<TARGET_FILE:mbgl-core>
|
||||
$<TARGET_FILE:freetype>
|
||||
$<TARGET_FILE:mbgl-freetype>
|
||||
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
||||
$<TARGET_FILE:harfbuzz>
|
||||
$<TARGET_FILE:mbgl-harfbuzz>
|
||||
$<TARGET_FILE:mbgl-vendor-parsedate>
|
||||
${STATIC_LIBS}
|
||||
)
|
||||
|
||||
@@ -212,12 +212,14 @@ if(NOT MLN_QT_LIBRARY_ONLY)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
target_link_libraries(
|
||||
mbgl-test-runner
|
||||
PRIVATE -Wl,-force_load mbgl-test
|
||||
PRIVATE
|
||||
-Wl,-force_load mbgl-test
|
||||
)
|
||||
else()
|
||||
target_link_libraries(
|
||||
mbgl-test-runner
|
||||
PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-test>
|
||||
PRIVATE
|
||||
$<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-test>
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
73
vendor/freetype.cmake
vendored
73
vendor/freetype.cmake
vendored
@@ -1,24 +1,71 @@
|
||||
if(TARGET freetype)
|
||||
if(TARGET mbgl-freetype)
|
||||
return()
|
||||
endif()
|
||||
if (MLN_TEXT_SHAPING_HARFBUZZ)
|
||||
set(FT_DISABLE_BROTLI ON CACHE BOOL "freetype option")
|
||||
set(FT_REQUIRE_BROTLI OFF CACHE BOOL "freetype option")
|
||||
set(FT_DISABLE_ZLIB ON CACHE BOOL "freetype option")
|
||||
set(FT_REQUIRE_ZLIB OFF CACHE BOOL "freetype option")
|
||||
add_subdirectory(vendor/freetype)
|
||||
add_library(mbgl-freetype STATIC
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/autofit/autofit.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbase.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbbox.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbdf.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbitmap.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftcid.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftfstype.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftgasp.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftglyph.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftgxval.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftinit.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftmm.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftotval.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftpatent.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftpfr.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftstroke.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftsynth.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/fttype1.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftwinfnt.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/bdf/bdf.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/bzip2/ftbzip2.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/cache/ftcache.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/cff/cff.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/cid/type1cid.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/gzip/ftgzip.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/lzw/ftlzw.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/pcf/pcf.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/pfr/pfr.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/psaux/psaux.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/pshinter/pshinter.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/psnames/psnames.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/raster/raster.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/sdf/sdf.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/sfnt/sfnt.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/smooth/smooth.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/svg/svg.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/truetype/truetype.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/type1/type1.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/type42/type42.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/winfonts/winfnt.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftsystem.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftdebug.c
|
||||
)
|
||||
|
||||
target_include_directories(mbgl-freetype
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_LIST_DIR}/freetype/include
|
||||
)
|
||||
|
||||
target_compile_definitions(mbgl-freetype PRIVATE
|
||||
FT2_BUILD_LIBRARY
|
||||
FT_DISABLE_BROTLI
|
||||
FT_REQUIRE_BROTLI=0
|
||||
FT_DISABLE_ZLIB
|
||||
FT_REQUIRE_ZLIB=0
|
||||
)
|
||||
|
||||
set_target_properties(
|
||||
freetype
|
||||
mbgl-freetype
|
||||
PROPERTIES
|
||||
INTERFACE_MAPLIBRE_NAME "freetype"
|
||||
INTERFACE_MAPLIBRE_URL "https://github.com/freetype/freetype"
|
||||
INTERFACE_MAPLIBRE_AUTHOR "David Turner, Robert Wilhelm, Werner Lemberg and FreeType contributors"
|
||||
INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/freetype/docs/FTL.TXT
|
||||
)
|
||||
|
||||
target_include_directories(
|
||||
mbgl-core SYSTEM
|
||||
PUBLIC vendor/freetype/include
|
||||
INTERFACE_MAPLIBRE_LICENSE ${CMAKE_CURRENT_LIST_DIR}/freetype/docs/FTL.TXT
|
||||
)
|
||||
endif()
|
||||
|
||||
26
vendor/harfbuzz.cmake
vendored
26
vendor/harfbuzz.cmake
vendored
@@ -1,22 +1,26 @@
|
||||
if(TARGET harfbuzz)
|
||||
if(TARGET mbgl-harfbuzz)
|
||||
return()
|
||||
endif()
|
||||
if (MLN_TEXT_SHAPING_HARFBUZZ)
|
||||
add_subdirectory(vendor/harfbuzz)
|
||||
add_library(mbgl-harfbuzz STATIC
|
||||
${CMAKE_CURRENT_LIST_DIR}/harfbuzz/src/harfbuzz.cc
|
||||
)
|
||||
|
||||
target_compile_definitions(harfbuzz PRIVATE -DHAVE_FREETYPE)
|
||||
target_include_directories(mbgl-harfbuzz
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_LIST_DIR}/harfbuzz/src
|
||||
)
|
||||
|
||||
target_link_libraries(mbgl-harfbuzz PRIVATE mbgl-freetype)
|
||||
target_include_directories(mbgl-harfbuzz PRIVATE ${CMAKE_CURRENT_LIST_DIR}/freetype/include)
|
||||
target_compile_definitions(mbgl-harfbuzz PRIVATE -DHAVE_FREETYPE)
|
||||
|
||||
set_target_properties(
|
||||
harfbuzz
|
||||
mbgl-harfbuzz
|
||||
PROPERTIES
|
||||
INTERFACE_MAPLIBRE_NAME "harfbuzz"
|
||||
INTERFACE_MAPLIBRE_URL "https://github.com/harfbuzz/harfbuzz"
|
||||
INTERFACE_MAPLIBRE_AUTHOR ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/AUTHORS
|
||||
INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/COPYING
|
||||
)
|
||||
|
||||
target_include_directories(
|
||||
mbgl-core SYSTEM
|
||||
PUBLIC vendor/harfbuzz/src
|
||||
INTERFACE_MAPLIBRE_AUTHOR ${CMAKE_CURRENT_LIST_DIR}/harfbuzz/AUTHORS
|
||||
INTERFACE_MAPLIBRE_LICENSE ${CMAKE_CURRENT_LIST_DIR}/harfbuzz/COPYING
|
||||
)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user