diff --git a/.github/workflows/qt-ci.yml b/.github/workflows/qt-ci.yml index f689fa2a7..b5c03cab3 100644 --- a/.github/workflows/qt-ci.yml +++ b/.github/workflows/qt-ci.yml @@ -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: | diff --git a/CMakeLists.txt b/CMakeLists.txt index eb43e3640..f9936c86a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 $<$:mbgl-vendor-metal-cpp> $,mbgl-rustutils,mbgl-vendor-csscolorparser> - ${SHAPE_TARGETS} # from harfbuzz.cmake + $<$:mbgl-freetype> + $<$: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) diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake index 8ca64a031..e7a7800c1 100644 --- a/platform/linux/linux.cmake +++ b/platform/linux/linux.cmake @@ -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 $ - $ + $ $ - $ + $ $ $ $ diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index 6dc62dfde..816108d2f 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -160,9 +160,9 @@ if(NOT "${ARMERGE}" STREQUAL "ARMERGE-NOTFOUND") POST_BUILD COMMAND armerge --keep-symbols 'mbgl.*' --output libmbgl-core-amalgam.a $ - $ + $ $ - $ + $ $ ${STATIC_LIBS} ) diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index 1c06dd6ca..9fbc49fc4 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -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 $ + PRIVATE + $ ) endif() diff --git a/vendor/freetype.cmake b/vendor/freetype.cmake index a459a3d57..e82c726b4 100644 --- a/vendor/freetype.cmake +++ b/vendor/freetype.cmake @@ -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() diff --git a/vendor/harfbuzz.cmake b/vendor/harfbuzz.cmake index 7869feb06..b1a1866c3 100644 --- a/vendor/harfbuzz.cmake +++ b/vendor/harfbuzz.cmake @@ -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()