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_target: 12.0
|
||||||
deployment_arch: "x86_64;arm64"
|
deployment_arch: "x86_64;arm64"
|
||||||
compiler: ""
|
compiler: ""
|
||||||
- name: macOS_LLVM
|
# disabled due to https://github.com/llvm/llvm-project/issues/77653
|
||||||
os: macos-14
|
# https://github.com/maplibre/maplibre-native/pull/3879#issuecomment-3406495279
|
||||||
build_type: RelWithDebInfo
|
# - name: macOS_LLVM
|
||||||
qt_version: 6.9.1
|
# os: macos-14
|
||||||
qt_target: desktop
|
# build_type: RelWithDebInfo
|
||||||
deployment_target: 12.0
|
# qt_version: 6.9.1
|
||||||
deployment_arch: "arm64"
|
# qt_target: desktop
|
||||||
compiler: "llvm"
|
# deployment_target: 12.0
|
||||||
|
# deployment_arch: "arm64"
|
||||||
|
# compiler: "llvm"
|
||||||
- name: win64_msvc2022
|
- name: win64_msvc2022
|
||||||
os: windows-2022
|
os: windows-2022
|
||||||
build_type: "RelWithDebInfo"
|
build_type: "RelWithDebInfo"
|
||||||
@@ -191,6 +193,11 @@ jobs:
|
|||||||
key: Qt_${{ matrix.name }}_${{ matrix.qt_version }}
|
key: Qt_${{ matrix.name }}_${{ matrix.qt_version }}
|
||||||
max-size: 200M
|
max-size: 200M
|
||||||
|
|
||||||
|
- name: Print cmake version
|
||||||
|
run: |
|
||||||
|
cmake --version
|
||||||
|
which cmake
|
||||||
|
|
||||||
- name: Build maplibre-native (macOS)
|
- name: Build maplibre-native (macOS)
|
||||||
if: runner.os == 'macOS' && matrix.qt_target == 'desktop'
|
if: runner.os == 'macOS' && matrix.qt_target == 'desktop'
|
||||||
run: |
|
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_CORE_ONLY "Build only the core bits, no platform code" OFF)
|
||||||
option(MLN_WITH_CLANG_TIDY "Build with clang-tidy checks enabled" 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/freetype.cmake)
|
||||||
include(${PROJECT_SOURCE_DIR}/vendor/harfbuzz.cmake)
|
include(${PROJECT_SOURCE_DIR}/vendor/harfbuzz.cmake)
|
||||||
set(SHAPE_TARGETS
|
|
||||||
freetype
|
target_include_directories(
|
||||||
harfbuzz
|
mbgl-core SYSTEM
|
||||||
|
PUBLIC
|
||||||
|
${PROJECT_SOURCE_DIR}/vendor/freetype/include
|
||||||
|
${PROJECT_SOURCE_DIR}/vendor/harfbuzz/src
|
||||||
)
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
@@ -1457,7 +1461,8 @@ target_link_libraries(
|
|||||||
mbgl-vendor-wagyu
|
mbgl-vendor-wagyu
|
||||||
$<$<BOOL:${MLN_WITH_METAL}>:mbgl-vendor-metal-cpp>
|
$<$<BOOL:${MLN_WITH_METAL}>:mbgl-vendor-metal-cpp>
|
||||||
$<IF:$<BOOL:${MLN_USE_RUST}>,mbgl-rustutils,mbgl-vendor-csscolorparser>
|
$<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
|
PUBLIC
|
||||||
MapLibreNative::Base
|
MapLibreNative::Base
|
||||||
mbgl-vendor-expected-lite
|
mbgl-vendor-expected-lite
|
||||||
@@ -1498,7 +1503,6 @@ set(EXPORT_TARGETS
|
|||||||
mbgl-vendor-metal-cpp
|
mbgl-vendor-metal-cpp
|
||||||
mbgl-vendor-filesystem
|
mbgl-vendor-filesystem
|
||||||
unordered_dense
|
unordered_dense
|
||||||
${SHAPE_TARGETS} # from harfbuzz.cmake
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(MLN_USE_RUST)
|
if(MLN_USE_RUST)
|
||||||
@@ -1507,6 +1511,10 @@ else()
|
|||||||
list(APPEND EXPORT_TARGETS mbgl-vendor-csscolorparser)
|
list(APPEND EXPORT_TARGETS mbgl-vendor-csscolorparser)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(MLN_TEXT_SHAPING_HARFBUZZ)
|
||||||
|
list(APPEND EXPORT_TARGETS mbgl-freetype mbgl-harfbuzz)
|
||||||
|
endif()
|
||||||
|
|
||||||
export(TARGETS ${EXPORT_TARGETS} FILE MapboxCoreTargets.cmake)
|
export(TARGETS ${EXPORT_TARGETS} FILE MapboxCoreTargets.cmake)
|
||||||
|
|
||||||
if(MLN_WITH_VULKAN)
|
if(MLN_WITH_VULKAN)
|
||||||
|
|||||||
@@ -211,9 +211,9 @@ if(NOT MLN_USE_BUILTIN_ICU AND NOT "${ARMERGE}" STREQUAL "ARMERGE-NOTFOUND")
|
|||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
||||||
$<TARGET_FILE:mbgl-core>
|
$<TARGET_FILE:mbgl-core>
|
||||||
$<TARGET_FILE:freetype>
|
$<TARGET_FILE:mbgl-freetype>
|
||||||
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
||||||
$<TARGET_FILE:harfbuzz>
|
$<TARGET_FILE:mbgl-harfbuzz>
|
||||||
$<TARGET_FILE:mbgl-vendor-nunicode>
|
$<TARGET_FILE:mbgl-vendor-nunicode>
|
||||||
$<TARGET_FILE:mbgl-vendor-sqlite>
|
$<TARGET_FILE:mbgl-vendor-sqlite>
|
||||||
$<TARGET_FILE:mbgl-vendor-parsedate>
|
$<TARGET_FILE:mbgl-vendor-parsedate>
|
||||||
|
|||||||
@@ -160,9 +160,9 @@ if(NOT "${ARMERGE}" STREQUAL "ARMERGE-NOTFOUND")
|
|||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a
|
||||||
$<TARGET_FILE:mbgl-core>
|
$<TARGET_FILE:mbgl-core>
|
||||||
$<TARGET_FILE:freetype>
|
$<TARGET_FILE:mbgl-freetype>
|
||||||
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
$<TARGET_FILE:mbgl-vendor-csscolorparser>
|
||||||
$<TARGET_FILE:harfbuzz>
|
$<TARGET_FILE:mbgl-harfbuzz>
|
||||||
$<TARGET_FILE:mbgl-vendor-parsedate>
|
$<TARGET_FILE:mbgl-vendor-parsedate>
|
||||||
${STATIC_LIBS}
|
${STATIC_LIBS}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -212,12 +212,14 @@ if(NOT MLN_QT_LIBRARY_ONLY)
|
|||||||
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mbgl-test-runner
|
mbgl-test-runner
|
||||||
PRIVATE -Wl,-force_load mbgl-test
|
PRIVATE
|
||||||
|
-Wl,-force_load mbgl-test
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mbgl-test-runner
|
mbgl-test-runner
|
||||||
PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-test>
|
PRIVATE
|
||||||
|
$<LINK_LIBRARY:WHOLE_ARCHIVE,mbgl-test>
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
73
vendor/freetype.cmake
vendored
73
vendor/freetype.cmake
vendored
@@ -1,24 +1,71 @@
|
|||||||
if(TARGET freetype)
|
if(TARGET mbgl-freetype)
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
if (MLN_TEXT_SHAPING_HARFBUZZ)
|
if (MLN_TEXT_SHAPING_HARFBUZZ)
|
||||||
set(FT_DISABLE_BROTLI ON CACHE BOOL "freetype option")
|
add_library(mbgl-freetype STATIC
|
||||||
set(FT_REQUIRE_BROTLI OFF CACHE BOOL "freetype option")
|
${CMAKE_CURRENT_LIST_DIR}/freetype/src/autofit/autofit.c
|
||||||
set(FT_DISABLE_ZLIB ON CACHE BOOL "freetype option")
|
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbase.c
|
||||||
set(FT_REQUIRE_ZLIB OFF CACHE BOOL "freetype option")
|
${CMAKE_CURRENT_LIST_DIR}/freetype/src/base/ftbbox.c
|
||||||
add_subdirectory(vendor/freetype)
|
${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(
|
set_target_properties(
|
||||||
freetype
|
mbgl-freetype
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
INTERFACE_MAPLIBRE_NAME "freetype"
|
INTERFACE_MAPLIBRE_NAME "freetype"
|
||||||
INTERFACE_MAPLIBRE_URL "https://github.com/freetype/freetype"
|
INTERFACE_MAPLIBRE_URL "https://github.com/freetype/freetype"
|
||||||
INTERFACE_MAPLIBRE_AUTHOR "David Turner, Robert Wilhelm, Werner Lemberg and FreeType contributors"
|
INTERFACE_MAPLIBRE_AUTHOR "David Turner, Robert Wilhelm, Werner Lemberg and FreeType contributors"
|
||||||
INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/freetype/docs/FTL.TXT
|
INTERFACE_MAPLIBRE_LICENSE ${CMAKE_CURRENT_LIST_DIR}/freetype/docs/FTL.TXT
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(
|
|
||||||
mbgl-core SYSTEM
|
|
||||||
PUBLIC vendor/freetype/include
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
26
vendor/harfbuzz.cmake
vendored
26
vendor/harfbuzz.cmake
vendored
@@ -1,22 +1,26 @@
|
|||||||
if(TARGET harfbuzz)
|
if(TARGET mbgl-harfbuzz)
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
if (MLN_TEXT_SHAPING_HARFBUZZ)
|
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(
|
set_target_properties(
|
||||||
harfbuzz
|
mbgl-harfbuzz
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
INTERFACE_MAPLIBRE_NAME "harfbuzz"
|
INTERFACE_MAPLIBRE_NAME "harfbuzz"
|
||||||
INTERFACE_MAPLIBRE_URL "https://github.com/harfbuzz/harfbuzz"
|
INTERFACE_MAPLIBRE_URL "https://github.com/harfbuzz/harfbuzz"
|
||||||
INTERFACE_MAPLIBRE_AUTHOR ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/AUTHORS
|
INTERFACE_MAPLIBRE_AUTHOR ${CMAKE_CURRENT_LIST_DIR}/harfbuzz/AUTHORS
|
||||||
INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/COPYING
|
INTERFACE_MAPLIBRE_LICENSE ${CMAKE_CURRENT_LIST_DIR}/harfbuzz/COPYING
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(
|
|
||||||
mbgl-core SYSTEM
|
|
||||||
PUBLIC vendor/harfbuzz/src
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user