Merge from main

This commit is contained in:
Ashley Rogers 2025-04-22 15:51:57 -04:00
commit 79759cceea
40 changed files with 582 additions and 129 deletions

View File

@ -1,5 +1,10 @@
name: cesium-native
on: [push, pull_request]
env:
VCPKG_BINARY_SOURCES: 'clear;x-aws,s3://cesium-builds/vcpkg/cesium-native-cache/,readwrite'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_INTERNAL_SERVICES_VCPKG_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_INTERNAL_SERVICES_VCPKG_SECRET_KEY }}
AWS_REGION: us-east-1
jobs:
QuickChecks:
name: "Quick Checks"
@ -31,18 +36,11 @@ jobs:
chmod +x llvm.sh
sudo ./llvm.sh 19
sudo apt-get install clang-tidy-19
- name: Cache vcpkg artifacts
uses: actions/cache@v4
with:
path: ~/.ezvcpkg
key: vcpkg-ubuntu-24.04-clang-${{ hashFiles('CMakeLists.txt') }}
restore-keys: |
vcpkg-ubuntu-24.04-clang-${{ hashFiles('CMakeLists.txt') }}
vcpkg-ubuntu-24.04-clang
- name: Set CC and CXX
run: |
echo "CC=/usr/bin/clang-19" >> "$GITHUB_ENV"
echo "CXX=/usr/bin/clang++-19" >> "$GITHUB_ENV"
echo "VCPKG_ROOT=${VCPKG_INSTALLATION_ROOT}" >> "$GITHUB_ENV"
- name: Make more swap space available
run: |
sudo swapoff -a
@ -54,8 +52,14 @@ jobs:
- name: Run clang-tidy
run: |
echo `$CC --version | head -n 1`, `cmake --version | head -n 1`
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -DCESIUM_CLANG_TIDY_USE_THREADS=4
cp doc/cmake-presets/CMakeUserPresets.json .
cmake --preset=vcpkg-linux -DCMAKE_BUILD_TYPE=Debug -DCESIUM_CLANG_TIDY_USE_THREADS=4
cmake --build build --target clang-tidy > output.log
- name: Print vcpkg problems
if: ${{ failure() }}
run: |
cat "/usr/local/share/vcpkg/buildtrees/doctest/config-x64-linux-dbg-out.log"
cat "/usr/local/share/vcpkg/buildtrees/doctest/config-x64-linux-dbg-err.log"
- name: List clang-tidy warnings & errors
if: ${{ !cancelled() }}
run: |
@ -75,6 +79,7 @@ jobs:
tar xzf doxygen-1.13.2.linux.bin.tar.gz
export PATH=$PWD/doxygen-1.13.2/bin:$PATH
echo "PATH=$PATH" >> "$GITHUB_ENV"
echo "VCPKG_ROOT=${VCPKG_INSTALLATION_ROOT}" >> "$GITHUB_ENV"
doxygen --version
- name: Install latest CMake 3 and Ninja
uses: lukka/get-cmake@latest
@ -88,18 +93,11 @@ jobs:
uses: hendrikmuhs/ccache-action@v1.2.9
with:
key: ccache-ubuntu-22.04-doxygen
- name: Cache vcpkg artifacts
uses: actions/cache@v4
with:
path: ~/.ezvcpkg
key: vcpkg-ubuntu-22.04-doxygen-${{ hashFiles('CMakeLists.txt') }}
restore-keys: |
vcpkg-ubuntu-22.04-doxygen-${{ hashFiles('CMakeLists.txt') }}
vcpkg-ubuntu-22.04-doxygen
- name: Generate Documentation
run: |
npm install
cmake -B build -S .
cp doc/cmake-presets/CMakeUserPresets.json .
cmake --preset=vcpkg-linux
cmake --build build --target cesium-native-docs
- name: Publish Documentation Artifact
if: ${{ success() }}
@ -135,14 +133,11 @@ jobs:
with:
key: ccache-${{ env.CACHE_KEY}}-${{matrix.build_type}}-1
variant: sccache
- name: Cache vcpkg artifacts
uses: actions/cache@v4
with:
path: /.ezvcpkg
key: vcpkg-${{ env.CACHE_KEY }}-${{ hashFiles('CMakeLists.txt') }}-1
- name: Compile ${{matrix.build_type}} Configuration
run: |
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DCMAKE_C_COMPILER_LAUNCHER=C:\\Users\\runneradmin\\.cargo\\bin\\sccache -DCMAKE_CXX_COMPILER_LAUNCHER=C:\\Users\\runneradmin\\.cargo\\bin\\sccache
$env:VCPKG_ROOT="$env:VCPKG_INSTALLATION_ROOT"
Copy .\doc\cmake-presets\CMakeUserPresets.json .\
cmake --preset=vcpkg-windows -G Ninja -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DCMAKE_C_COMPILER_LAUNCHER=C:\\Users\\runneradmin\\.cargo\\bin\\sccache -DCMAKE_CXX_COMPILER_LAUNCHER=C:\\Users\\runneradmin\\.cargo\\bin\\sccache
cmake --build build
- name: Test ${{matrix.build_type}} Configuration
run: |
@ -181,19 +176,14 @@ jobs:
uses: hendrikmuhs/ccache-action@v1.2.9
with:
key: ccache-${{ env.CACHE_KEY}}-${{matrix.build_type}}
- name: Cache vcpkg artifacts
uses: actions/cache@v4
with:
path: ~/.ezvcpkg
key: vcpkg-${{ env.CACHE_KEY }}-${{ hashFiles('CMakeLists.txt') }}
restore-keys: |
vcpkg-${{ env.CACHE_KEY }}-${{ hashFiles('CMakeLists.txt') }}
vcpkg-${{ env.CACHE_KEY }}
- name: Set CC and CXX
if: ${{ matrix.compiler == 'clang' && matrix.platform != 'macos-13'}}
run: |
echo "CC=clang" >> "$GITHUB_ENV"
echo "CXX=clang++" >> "$GITHUB_ENV"
- name: add VCPKG_ROOT
run: |
echo "VCPKG_ROOT=${VCPKG_INSTALLATION_ROOT}" >> "$GITHUB_ENV"
- name: Make more swap space available
if: ${{ matrix.platform != 'macos-13'}}
run: |
@ -217,10 +207,11 @@ jobs:
set(VCPKG_OSX_ARCHITECTURES x86_64)
" > vcpkg/triplets/x64-macos-10-15.cmake
# Specify the overlay triplet, and also tell cesium-native to build with the same settings.
echo "EXTRA_CMAKE_OPTIONS=-DVCPKG_OVERLAY_TRIPLETS=$PWD/vcpkg/triplets -DVCPKG_TRIPLET=x64-macos-10-15 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=x86_64" >> "$GITHUB_ENV"
echo "EXTRA_CMAKE_OPTIONS=-DVCPKG_OVERLAY_TRIPLETS=$PWD/vcpkg/triplets -DVCPKG_TRIPLET=x64-macos-10-15 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DVCPKG_TARGET_TRIPLET=x64-macos-10-15" >> "$GITHUB_ENV"
- name: Compile ${{matrix.build_type}} Configuration
run: |
cmake -B build -S . -DCMAKE_BUILD_TYPE:STRING=${{matrix.build_type}} $EXTRA_CMAKE_OPTIONS
cp doc/cmake-presets/CMakeUserPresets.json .
cmake --preset=vcpkg -DCMAKE_BUILD_TYPE:STRING=${{matrix.build_type}} $EXTRA_CMAKE_OPTIONS
cmake --build build --parallel
- name: Test ${{matrix.build_type}} Configuration
run: |

View File

@ -5,6 +5,8 @@
##### Additions :tada:
- Added `CesiumVectorData` library for loading data from vector formats. Currently only GeoJSON is supported.
- Added `convertAccessorTypeToPropertyType` and `convertPropertyTypeToAccessorType` to `CesiumGltf::PropertyType`.
- Added support for building in `vcpkg` manifest mode.
### v0.46.0 - 2025-04-01
@ -24,6 +26,7 @@
- Fixed bugs that could prevent valid metadata in Instanced 3D Model (i3dm) files from being parsed correctly.
- Fixed a memory leak in `CesiumGltfReader`.
- Fixed a bug in `ImplicitTilingUtilities::computeBoundingVolume` that incorrectly subdivided a `BoundingCylinderRegion` across the discontinuity line.
- Fixed a broken link in the `ktx` vcpkg portfile that would cause this library to fail to build.
### v0.45.0 - 2025-03-03

View File

@ -4,12 +4,43 @@ if (NOT VCPKG_LIBRARY_LINKAGE)
set(VCPKG_LIBRARY_LINKAGE static)
endif()
if(NOT VCPKG_MANIFEST_MODE)
# By default, Use ezvcpkg to install dependencies. But don't use
# ezvcpkg if it appears that this configuration is using vcpkg
# manifest mode already, either by building cesium-native directly,
# or via a higher level project that has added cesium-native as a
# subdirectory and is using vcpkg to statisfy its dependencies.
#In a fresh build, before CMakeCache.txt exists, determine whether to
#use ezvcpkg. After this, CESIUM_USE_EZVCPG will be in the cache.
set(CESIUM_USE_EZVCPKG_DEFAULT ON)
if (VCPKG_MANIFEST_MODE)
set(CESIUM_USE_EZVCPKG_DEFAULT OFF)
elseif (CMAKE_TOOLCHAIN_FILE)
get_filename_component(toolchainFile "${CMAKE_TOOLCHAIN_FILE}" NAME)
if(toolchainFile STREQUAL "vcpkg.cmake")
set(CESIUM_USE_EZVCPKG_DEFAULT OFF)
endif()
endif()
option(CESIUM_USE_EZVCPKG "use ezvcpkg helper" ${CESIUM_USE_EZVCPKG_DEFAULT})
if(CESIUM_USE_EZVCPKG)
# Keep vcpkg from running in manifset mode. It will try to because
# this directory contains a vcpkg.json manifest.
set(VCPKG_MANIFEST_MODE OFF CACHE BOOL "vcpkg manifest mode should not be enabled with ezvcpg!")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ezvcpkg/ezvcpkg.cmake)
endif()
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/detect-vcpkg-triplet.cmake)
# Note: VCPKG_TRIPLET is not used by vcpkg! The relevant variables are
# VCPKG_TARGET_TRIPLET and VCPKG_HOST_TRIPLET. ezvcpkg and our custom
# installation code use VCPKG_TRIPLET, so initialize it here.
if (VCPKG_TARGET_TRIPLET)
set(VCPKG_TRIPLET "${VCPKG_TARGET_TRIPLET}")
endif()
if (NOT VCPKG_TRIPLET)
if (DEFINED ENV{VCPKG_TRIPLET})
set(VCPKG_TRIPLET "$ENV{VCPKG_TRIPLET}")
@ -21,9 +52,13 @@ if (NOT VCPKG_TRIPLET)
else()
set(VCPKG_TRIPLET "${DETECTED_VCPKG_TRIPLET}")
endif()
if (NOT CESIUM_USE_EZVCPKG)
set(VCPKG_TARGET_TRIPLET "${VCPKG_TRIPLET}")
endif()
endif()
message(STATUS "VCPKG_TRIPLET ${VCPKG_TRIPLET}")
message(STATUS "VCPKG_TARGET_TRIPLET ${VCPKG_TARGET_TRIPLET}")
if (NOT VCPKG_OVERLAY_PORTS)
if (DEFINED ENV{VCPKG_OVERLAY_PORTS})
@ -60,7 +95,7 @@ set(PACKAGES_PRIVATE
# Packages only used for testing
set(PACKAGES_TEST doctest)
if(NOT VCPKG_MANIFEST_MODE)
if(CESIUM_USE_EZVCPKG)
set(PACKAGES_ALL ${PACKAGES_PUBLIC})
list(APPEND PACKAGES_ALL ${PACKAGES_PRIVATE})
list(APPEND PACKAGES_ALL ${PACKAGES_TEST})
@ -97,7 +132,7 @@ include(CMakeDependentOption)
set(PACKAGE_BASE_DIR "${EZVCPKG_PACKAGES_DIR}")
set(PACKAGE_BUILD_DIR "${EZVCPKG_DIR}")
if(VCPKG_MANIFEST_MODE)
if(NOT EZVCPKG_PACKAGES_DIR)
set(PACKAGE_BUILD_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TRIPLET}/")
set(PACKAGE_BASE_DIR "$ENV{VCPKG_ROOT}/packages")
endif()
@ -120,7 +155,7 @@ cmake_dependent_option(
set(CESIUM_CLANG_TIDY_USE_THREADS 14 CACHE STRING "Sets the number of threads for run-clang-tidy to use.")
if(CESIUM_INSTALL_STATIC_LIBS OR CESIUM_INSTALL_HEADERS)
if(CESIUM_INSTALL_STATIC_LIBS OR CESIUM_INSTALL_HEADERS AND EZVCPKG_PACKAGES_DIR)
foreach(PACKAGE ${PACKAGES_PUBLIC})
string(REGEX REPLACE "\[.*\]" "" PACKAGE ${PACKAGE})
set(PACKAGE_DIR ${PACKAGE_BASE_DIR}/${PACKAGE}_${VCPKG_TRIPLET})
@ -142,7 +177,7 @@ if(CESIUM_INSTALL_STATIC_LIBS OR CESIUM_INSTALL_HEADERS)
endforeach()
endif()
if(CESIUM_INSTALL_STATIC_LIBS)
if(CESIUM_INSTALL_STATIC_LIBS AND NOT VCPKG_MANIFEST_MODE)
foreach(PACKAGE ${PACKAGES_PRIVATE})
set(PACKAGE_DIR ${PACKAGE_BASE_DIR}/${PACKAGE}_${VCPKG_TRIPLET})
message(DEBUG "PACKAGE_DIR ${PACKAGE_DIR}")
@ -211,6 +246,7 @@ if(CESIUM_ENABLE_CLANG_TIDY)
endif()
# Add Modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/extern/cmake-modules/")
if (CESIUM_COVERAGE_ENABLED AND NOT MSVC)
include(CodeCoverage)
@ -244,6 +280,14 @@ list(APPEND CMAKE_PREFIX_PATH "${PACKAGE_BUILD_DIR}")
# However, for some of the vcpkg built libraries where they don't provide a prope cmake config file, we have to declare
# and imporeted library target ourselves. This is the case for modp_b64::modp_b64, picosha2::picosha2 and earcut. In
# these cases, we *do* have the somewhat ugly and verbose details in the extern/CMakeLists.txt file.
#
# XXX Above comment should be obsoleted by these first calls to
# find_package, which resolve to our own modules that provide
# targets. If needed, they can be installed with CMake config files
# etc.
find_package(zlib-ng REQUIRED)
find_package(modp_b64 REQUIRED)
find_package(Async++ CONFIG REQUIRED)
find_package(doctest CONFIG REQUIRED)
find_package(draco CONFIG REQUIRED)
@ -299,3 +343,21 @@ endif()
add_subdirectory(doc)
include(CMakePackageConfigHelpers)
install(EXPORT CesiumExports
FILE cesium-nativeTargets.cmake
DESTINATION ${CMAKE_INSTALL_DATADIR}/cesium-native/cmake)
install(FILES
"${CMAKE_CURRENT_LIST_DIR}/cmake/modules/Findzlib-ng.cmake"
"${CMAKE_CURRENT_LIST_DIR}/cmake/modules/Findmodp_b64.cmake"
DESTINATION ${CMAKE_INSTALL_DATADIR}/cesium-native/cmake)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/cesium-nativeConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/cesium-native/cmake)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cesium-nativeConfig.cmake
DESTINATION ${CMAKE_INSTALL_DATADIR}/cesium-native/cmake)

View File

@ -36,7 +36,6 @@ target_sources(
PRIVATE
${CESIUM_3DTILES_SOURCES}
${CESIUM_3DTILES_HEADERS}
PUBLIC
${CESIUM_3DTILES_PUBLIC_HEADERS}
)
@ -44,8 +43,9 @@ cesium_target_include_directories(
TARGET
Cesium3DTiles
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -37,7 +37,6 @@ target_sources(
PRIVATE
${CESIUM_3DTILES_CONTENT_SOURCES}
${CESIUM_3DTILES_CONTENT_HEADERS}
PUBLIC
${CESIUM_3DTILES_CONTENT_PUBLIC_HEADERS}
)

View File

@ -37,7 +37,6 @@ target_sources(
PRIVATE
${CESIUM_3DTILES_READER_SOURCES}
${CESIUM_3DTILES_READER_HEADERS}
PUBLIC
${CESIUM_3DTILES_READER_PUBLIC_HEADERS}
)
@ -45,8 +44,9 @@ cesium_target_include_directories(
TARGET
Cesium3DTilesReader
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_3DTILES_SELECTION_SOURCES}
${CESIUM_3DTILES_SELECTION_HEADERS}
PUBLIC
${CESIUM_3DTILES_SELECTION_PUBLIC_HEADERS}
)
@ -33,8 +32,9 @@ cesium_target_include_directories(
TARGET
Cesium3DTilesSelection
PUBLIC
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
)

View File

@ -17,14 +17,14 @@ TileIdUtilities::createTileIdString(const TileID& tileId) {
std::string
operator()(const CesiumGeometry::QuadtreeTileID& quadtreeTileId) {
// Strings of the form "L10-X23-Y144"
return "L" + std::to_string(quadtreeTileId.level) + "-" + "X" +
std::to_string(quadtreeTileId.x) + "-" + "Y" +
return std::string("L") + std::to_string(quadtreeTileId.level) + "-" +
"X" + std::to_string(quadtreeTileId.x) + "-" + "Y" +
std::to_string(quadtreeTileId.y);
}
std::string operator()(const CesiumGeometry::OctreeTileID& octreeTileId) {
// Strings of the form "L10-X23-Y144-Z42"
return "L" + std::to_string(octreeTileId.level) + "-" + "X" +
return std::string("L") + std::to_string(octreeTileId.level) + "-" + "X" +
std::to_string(octreeTileId.x) + "-" + "Y" +
std::to_string(octreeTileId.y) + "-" + "Z" +
std::to_string(octreeTileId.z);
@ -33,7 +33,7 @@ TileIdUtilities::createTileIdString(const TileID& tileId) {
std::string operator()(
const CesiumGeometry::UpsampledQuadtreeNode& upsampledQuadtreeNode) {
// Strings of the form "upsampled-L10-X23-Y144"
return "upsampled-L" +
return std::string("upsampled-L") +
std::to_string(upsampledQuadtreeNode.tileID.level) + "-" + "X" +
std::to_string(upsampledQuadtreeNode.tileID.x) + "-" + "Y" +
std::to_string(upsampledQuadtreeNode.tileID.y);

View File

@ -37,7 +37,6 @@ target_sources(
PRIVATE
${CESIUM_3DTILES_WRITER_SOURCES}
${CESIUM_3DTILES_WRITER_HEADERS}
PUBLIC
${CESIUM_3DTILES_WRITER_PUBLIC_HEADERS}
)
@ -45,8 +44,9 @@ cesium_target_include_directories(
TARGET
Cesium3DTilesWriter
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -24,15 +24,15 @@ target_sources(
PRIVATE
${CESIUM_ASYNC_SOURCES}
${CESIUM_ASYNC_HEADERS}
PUBLIC
${CESIUM_ASYNC_PUBLIC_HEADERS}
)
cesium_target_include_directories(
TARGET
TARGET
CesiumAsync
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src/
)

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_CLIENT_COMMON_SOURCES}
${CESIUM_CLIENT_COMMON_HEADERS}
PUBLIC
${CESIUM_CLIENT_COMMON_PUBLIC_HEADERS}
)
@ -33,7 +32,9 @@ cesium_target_include_directories(
TARGET
CesiumClientCommon
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(CesiumClientCommon

View File

@ -24,7 +24,6 @@ target_sources(
PRIVATE
${CESIUM_GEOMETRY_SOURCES}
${CESIUM_GEOMETRY_HEADERS}
PUBLIC
${CESIUM_GEOMETRY_PUBLIC_HEADERS}
)
@ -32,7 +31,8 @@ cesium_target_include_directories(
TARGET
CesiumGeometry
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(CesiumGeometry PUBLIC

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_GEOSPATIAL_SOURCES}
${CESIUM_GEOSPATIAL_HEADERS}
PUBLIC
${CESIUM_GEOSPATIAL_PUBLIC_HEADERS}
)
@ -33,15 +32,16 @@ cesium_target_include_directories(
TARGET
CesiumGeospatial
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(CesiumGeospatial
PUBLIC
CesiumGeometry
CesiumUtility
earcut
PRIVATE
$<BUILD_INTERFACE:earcut>
s2::s2
)

View File

@ -3,7 +3,9 @@
#pragma warning(disable : 4100 4127 4309 4996)
#define _CHAR_UNSIGNED
#ifndef NOMINMAX
#define NOMINMAX
#endif
#define _USE_MATH_DEFINES
#endif

View File

@ -36,7 +36,6 @@ target_sources(
PRIVATE
${CESIUM_GLTF_SOURCES}
${CESIUM_GLTF_HEADERS}
PUBLIC
${CESIUM_GLTF_PUBLIC_HEADERS}
)
@ -44,8 +43,9 @@ cesium_target_include_directories(
TARGET
CesiumGltf
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -127,6 +127,26 @@ std::string convertPropertyTypeToString(PropertyType type);
*/
PropertyType convertStringToPropertyType(const std::string& str);
/**
* @brief Converts a string type listed in \ref AccessorSpec::Type to its
* corresponding \ref PropertyType.
*
* @param type The string to convert to a \ref PropertyType.
* @returns The corresponding \ref PropertyType, or \ref PropertyType::Invalid
* if no conversion is possible.
*/
PropertyType convertAccessorTypeToPropertyType(const std::string& type);
/**
* @brief Converts a \ref PropertyType to a string type listed in \ref
* AccessorSpec::Type.
*
* @param type The \ref PropertyType to convert to a string.
* @returns The string listed in AccessorSpec::Type, or `"INVALID"` if no
* conversion is possible.
*/
std::string convertPropertyTypeToAccessorType(PropertyType type);
/**
* @brief Converts a \ref PropertyComponentType value to a string.
*

View File

@ -81,6 +81,59 @@ PropertyType convertStringToPropertyType(const std::string& str) {
return PropertyType::Invalid;
}
PropertyType convertAccessorTypeToPropertyType(const std::string& type) {
if (type == AccessorSpec::Type::SCALAR) {
return PropertyType::Scalar;
}
if (type == AccessorSpec::Type::VEC2) {
return PropertyType::Vec2;
}
if (type == AccessorSpec::Type::VEC3) {
return PropertyType::Vec3;
}
if (type == AccessorSpec::Type::VEC4) {
return PropertyType::Vec4;
}
if (type == AccessorSpec::Type::MAT2) {
return PropertyType::Mat2;
}
if (type == AccessorSpec::Type::MAT3) {
return PropertyType::Mat3;
}
if (type == AccessorSpec::Type::MAT4) {
return PropertyType::Mat4;
}
return PropertyType::Invalid;
}
std::string convertPropertyTypeToAccessorType(PropertyType type) {
switch (type) {
case PropertyType::Scalar:
return AccessorSpec::Type::SCALAR;
case PropertyType::Vec2:
return AccessorSpec::Type::VEC2;
case PropertyType::Vec3:
return AccessorSpec::Type::VEC3;
case PropertyType::Vec4:
return AccessorSpec::Type::VEC4;
case PropertyType::Mat2:
return AccessorSpec::Type::MAT2;
case PropertyType::Mat3:
return AccessorSpec::Type::MAT3;
case PropertyType::Mat4:
return AccessorSpec::Type::MAT4;
default:
return "INVALID";
}
}
std::string convertPropertyComponentTypeToString(PropertyComponentType type) {
switch (type) {
case PropertyComponentType::None:

View File

@ -141,6 +141,60 @@ TEST_CASE("Test convertPropertyTypeToString") {
REQUIRE(
convertPropertyTypeToString(PropertyType::Enum) ==
ClassProperty::Type::ENUM);
REQUIRE(convertPropertyTypeToString(PropertyType::Invalid) == "INVALID");
}
TEST_CASE("Test convertAccessorTypeToPropertyType") {
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::SCALAR) ==
PropertyType::Scalar);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::VEC2) ==
PropertyType::Vec2);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::VEC3) ==
PropertyType::Vec3);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::VEC4) ==
PropertyType::Vec4);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::MAT2) ==
PropertyType::Mat2);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::MAT3) ==
PropertyType::Mat3);
REQUIRE(
convertAccessorTypeToPropertyType(AccessorSpec::Type::MAT4) ==
PropertyType::Mat4);
REQUIRE(
convertAccessorTypeToPropertyType("invalid") == PropertyType::Invalid);
}
TEST_CASE("Test convertPropertyTypeToAccessorType") {
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Scalar) ==
AccessorSpec::Type::SCALAR);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Vec2) ==
AccessorSpec::Type::VEC2);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Vec3) ==
AccessorSpec::Type::VEC3);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Vec4) ==
AccessorSpec::Type::VEC4);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Mat2) ==
AccessorSpec::Type::MAT2);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Mat3) ==
AccessorSpec::Type::MAT3);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Mat4) ==
AccessorSpec::Type::MAT4);
REQUIRE(
convertPropertyTypeToAccessorType(PropertyType::Invalid) == "INVALID");
}
TEST_CASE("Test convertPropertyComponentTypeToString") {
@ -183,6 +237,10 @@ TEST_CASE("Test convertPropertyComponentTypeToString") {
REQUIRE(
convertPropertyComponentTypeToString(PropertyComponentType::Float64) ==
ClassProperty::ComponentType::FLOAT64);
REQUIRE(
convertPropertyComponentTypeToString(PropertyComponentType::None) ==
"NONE");
}
TEST_CASE("Test convertArrayOffsetTypeStringToPropertyComponentType") {

View File

@ -37,7 +37,6 @@ target_sources(
PRIVATE
${CESIUM_GLTF_CONTENT_SOURCES}
${CESIUM_GLTF_CONTENT_HEADERS}
PUBLIC
${CESIUM_GLTF_CONTENT_PUBLIC_HEADERS}
)
@ -45,8 +44,9 @@ cesium_target_include_directories(
TARGET
CesiumGltfContent
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -37,7 +37,6 @@ target_sources(
PRIVATE
${CESIUM_GLTF_READER_SOURCES}
${CESIUM_GLTF_READER_HEADERS}
PUBLIC
${CESIUM_GLTF_READER_PUBLIC_HEADERS}
)
@ -45,8 +44,9 @@ cesium_target_include_directories(
TARGET
CesiumGltfReader
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -36,7 +36,6 @@ target_sources(
PRIVATE
${CESIUM_GLTF_WRITER_SOURCES}
${CESIUM_GLTF_WRITER_HEADERS}
PUBLIC
${CESIUM_GLTF_WRITER_PUBLIC_HEADERS}
)
@ -44,8 +43,9 @@ cesium_target_include_directories(
TARGET
CesiumGltfWriter
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/generated/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_LIST_DIR}/generated/src

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_ITWIN_CLIENT_SOURCES}
${CESIUM_ITWIN_CLIENT_HEADERS}
PUBLIC
${CESIUM_ITWIN_CLIENT_PUBLIC_HEADERS}
)
@ -33,7 +32,9 @@ cesium_target_include_directories(
TARGET
CesiumITwinClient
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/generated/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(CesiumITwinClient

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_ION_CLIENT_SOURCES}
${CESIUM_ION_CLIENT_HEADERS}
PUBLIC
${CESIUM_ION_CLIENT_PUBLIC_HEADERS}
)
@ -33,7 +32,8 @@ cesium_target_include_directories(
TARGET
CesiumIonClient
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(CesiumIonClient

View File

@ -24,7 +24,6 @@ target_sources(
PRIVATE
${CESIUM_JSON_READER_SOURCES}
${CESIUM_JSON_READER_HEADERS}
PUBLIC
${CESIUM_JSON_READER_PUBLIC_HEADERS}
)
@ -32,8 +31,9 @@ cesium_target_include_directories(
TARGET
CesiumJsonReader
PUBLIC
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
)

View File

@ -33,7 +33,6 @@ target_sources(
PRIVATE
${CESIUM_JSON_WRITER_SOURCES}
${CESIUM_JSON_WRITER_HEADERS}
PUBLIC
${CESIUM_JSON_WRITER_PUBLIC_HEADERS}
)
@ -41,7 +40,8 @@ cesium_target_include_directories(
TARGET
CesiumJsonWriter
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
)

View File

@ -36,7 +36,6 @@ target_sources(
PRIVATE
${CESIUM_QUANTIZED_MESH_TERRAIN_SOURCES}
${CESIUM_QUANTIZED_MESH_TERRAIN_HEADERS}
PUBLIC
${CESIUM_QUANTIZED_MESH_TERRAIN_PUBLIC_HEADERS}
)

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_RASTER_OVERLAYS_SOURCES}
${CESIUM_RASTER_OVERLAYS_HEADERS}
PUBLIC
${CESIUM_RASTER_OVERLAYS_PUBLIC_HEADERS}
)
@ -33,7 +32,8 @@ cesium_target_include_directories(
TARGET
CesiumRasterOverlays
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
)

View File

@ -25,7 +25,6 @@ target_sources(
PRIVATE
${CESIUM_UTILITY_SOURCES}
${CESIUM_UTILITY_HEADERS}
PUBLIC
${CESIUM_UTILITY_PUBLIC_HEADERS}
)
@ -33,11 +32,10 @@ cesium_target_include_directories(
TARGET
CesiumUtility
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/include
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}/../extern/zlib
${CMAKE_CURRENT_BINARY_DIR}/../extern/zlib-src
)
target_link_libraries(

View File

@ -0,0 +1 @@
include(${CMAKE_CURRENT_LIST_DIR}/cesium-nativeTargets.cmake)

View File

@ -0,0 +1,29 @@
@PACKAGE-INIT@
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
include(CMakeFindDependencyMacro)
find_dependency(zlib-ng REQUIRED)
find_dependency(modp_b64 REQUIRED)
find_dependency(Async++ CONFIG REQUIRED)
find_dependency(doctest CONFIG REQUIRED)
find_dependency(draco CONFIG REQUIRED)
find_dependency(expected-lite CONFIG REQUIRED)
find_dependency(glm CONFIG REQUIRED)
find_dependency(meshoptimizer CONFIG REQUIRED)
find_dependency(Microsoft.GSL REQUIRED)
find_dependency(httplib CONFIG REQUIRED)
find_dependency(Ktx CONFIG REQUIRED)
find_dependency(libmorton CONFIG REQUIRED)
find_dependency(libjpeg-turbo CONFIG REQUIRED)
find_dependency(OpenSSL REQUIRED)
find_dependency(s2 CONFIG REQUIRED)
find_dependency(spdlog CONFIG REQUIRED)
find_dependency(tinyxml2 CONFIG REQUIRED)
find_dependency(unofficial-sqlite3 CONFIG REQUIRED)
find_dependency(ada CONFIG REQUIRED)
find_dependency(WebP CONFIG REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/cesium-nativeTargets.cmake")

View File

@ -54,6 +54,11 @@ function(configure_cesium_library targetName)
${capitalizedTargetName}_BUILDING
)
install(TARGETS ${targetName}
EXPORT CesiumExports
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if(CESIUM_INSTALL_HEADERS)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include
DESTINATION ${CMAKE_INSTALL_PREFIX}

View File

@ -0,0 +1,50 @@
# Yes, on non-windows platforms the name of the library really is liblibmodpbase64.a
# Don't ask me, I didn't do it.
find_library(modp_b64_DEBUG_LIBRARIES
NAMES
modpbase64d
libmodpbase64d
)
# vcpkg specific locations for debug libraries if they are not already found
set(modpbase64SavePrefixPath ${CMAKE_PREFIX_PATH})
list(FILTER CMAKE_PREFIX_PATH INCLUDE REGEX "/debug")
find_library(modp_b64_DEBUG_LIBRARIES
NAMES
modpbase64
libmodpbase64
)
set(CMAKE_PREFIX_PATH ${modpbase64SavePrefixPath})
set(modpbase64SavePrefixPath ${CMAKE_PREFIX_PATH})
list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "/debug")
find_library(modp_b64_LIBRARIES NAMES modpbase64 libmodpbase64)
set(CMAKE_PREFIX_PATH ${modpbase64SavePrefixPath})
find_path(modp_b64_INCLUDE_DIRS NAMES modp_b64.h)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(modp_b64
FOUND_VAR
modp_b64_FOUND
REQUIRED_VARS
modp_b64_LIBRARIES
modp_b64_INCLUDE_DIRS
)
mark_as_advanced(modp_b64_LIBRARIES modp_b64_INCLUDE_DIRS)
if(modp_b64_FOUND AND NOT TARGET modp_b64::modp_b64)
add_library(modp_b64::modp_b64 UNKNOWN IMPORTED)
set_target_properties(modp_b64::modp_b64 PROPERTIES
IMPORTED_LOCATION "${modp_b64_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${modp_b64_INCLUDE_DIRS}"
)
if(modp_b64_DEBUG_LIBRARIES)
set_target_properties(modp_b64::modp_b64 PROPERTIES
IMPORTED_LOCATION_DEBUG "${modp_b64_DEBUG_LIBRARIES}"
)
endif()
endif()

View File

@ -0,0 +1,46 @@
find_library(zlib-ng_LIBRARIES NAMES zlibstatic-ng z-ng zlib-ng)
find_library(zlib-ng_DEBUG_LIBRARIES
NAMES
"zlibstatic-ngd"
"z-ngd"
"zlib-ngd"
)
# vcpkg specific locations for debug libraries if they are not already found
set(zlibngSavePrefixPath ${CMAKE_PREFIX_PATH})
list(FILTER CMAKE_PREFIX_PATH INCLUDE REGEX "/debug")
find_library(zlib-ng_DEBUG_LIBRARIES
NAMES
zlibstatic
z-ng
zlib-ng
)
set(CMAKE_PREFIX_PATH ${zlibngSavePrefixPath})
find_path(zlib-ng_INCLUDE_DIRS NAMES zlib-ng.h)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(zlib-ng
FOUND_VAR
zlib-ng_FOUND
REQUIRED_VARS
zlib-ng_LIBRARIES
zlib-ng_INCLUDE_DIRS
)
mark_as_advanced(zlib-ng_LIBRARIES zlib-ng_INCLUDE_DIRS)
if(zlib-ng_FOUND AND NOT TARGET zlib-ng::zlib-ng)
add_library(zlib-ng::zlib-ng UNKNOWN IMPORTED)
set_target_properties(zlib-ng::zlib-ng PROPERTIES
IMPORTED_LOCATION "${zlib-ng_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${zlib-ng_INCLUDE_DIRS}"
)
if(zlib-ng_DEBUG_LIBRARIES)
set_target_properties(zlib-ng::zlib-ng PROPERTIES
IMPORTED_LOCATION_DEBUG "${zlib-ng_DEBUG_LIBRARIES}"
)
endif()
endif()

View File

@ -0,0 +1,48 @@
{
"version": 3,
"configurePresets": [
{
"name": "vcpkg",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"CESIUM_USE_EZVCPKG": "OFF"
},
"environment": {
"CMAKE_POLICY_VERSION_MINIMUM": "3.5",
"VCPKG_KEEP_ENV_VARS": "CMAKE_POLICY_VERSION_MINIMUM"
}
},
{
"name": "vcpkg-ninja",
"generator": "Ninja",
"inherits": ["vcpkg"]
},
{
"name": "vcpkg-ninja-multi",
"generator": "Ninja Multi-Config",
"inherits": ["vcpkg"]
},
{
"name": "vcpkg-linux",
"inherits": ["vcpkg"],
"cacheVariables": {
"VCPKG_TARGET_TRIPLET": "x64-linux",
"VCPKG_HOST_TRIPLET": "x64-linux"
}
},
{
"name": "vcpkg-windows",
"inherits": ["vcpkg"],
"cacheVariables": {
"VCPKG_TARGET_TRIPLET": "x64-windows-static-md",
"VCPKG_HOST_TRIPLET": "x64-windows-static-md"
}
},
{
"name": "vcpkg-windows-vs",
"inherits": ["vcpkg-windows"],
"generator": "Visual Studio 17 2022"
}
]
}

View File

@ -0,0 +1,4 @@
{
"version": 4,
"include": ["doc/cmake-presets/CMakePresets.json"]
}

View File

@ -30,30 +30,87 @@ This guide contains the basic setup information for developers looking to work w
Check out the repo with:
```bash
git clone git@github.com:CesiumGS/cesium-native.git --recurse-submodules
git clone git@github.com:CesiumGS/cesium-native.git
```
If you forget the `--recurse-submodules`, nothing will work because the git submodules will be missing. You should be able to fix it with:
## Dependencies
Cesium Native manages its many dependencies using
[vcpkg](https://github.com/microsoft/vcpkg). We use vcpkg's manifest
mode, in which vcpkg reads the list of Cesium Native's dependencies
and installs them. This requires a local installation of `vcpkg` and
some extra arguments to CMake.
## vcpkg
After installing `vcpkg` -- usually by cloning it from
https://github.com/microsoft/vcpkg -- run the proper bootstrap script
and set the `VCPKG_ROOT` environment variable so that Cesium Native's
build can find it:
```bash
git submodule update --init --recursive
cd vcpkg
./bootstrap-vcpkg.sh
export VCPKG_ROOT=$PWD
```
## vcpkg and CMake
`vcpkg` hooks into CMake by loading a toolchain file, which is usually
used in cross-compilation scenarios. You can specify this on the
command line, but this can become a bit verbose as additional `vcpkg` options
get added, so specifying them all in a CMake presets file is an
interesting option. There are example preset files in the
[cmake-presets](../cmake-presets) directory. We haven't included them
in their normal spot in the source tree because they can cause some
issues with VS Code, but you can copy
[CMakeUserPresets.cmake](../cmake-presets/CMakeUserPresets.cmake) to
the root of the Cesium Native source tree to use these predefined
presets.
## Compiling Cesium Native
### Compile from command line
```bash
## Windows compilation using Visual Studio
cmake -B build -S . -G "Visual Studio 17 2022" -A x64
cmake --build build --config Debug
cmake --build build --config Release
Using presets (on Linux):
## Linux compilation
cmake -B build -S .
```bash
cp doc/cmake-presets/CMakeUserPresets.json .
cmake --preset=vcpkg-linux -DCMAKE_BUILD_TYPE=Debug
cmake --build build
```
By hand:
```bash
cmake -B build -S . \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DCESIUM_USE_EZVCPG=OFF
```
On Windows:
```bash
cp doc/cmake-presets/CMakeUserPresets.json .
cmake --preset=vcpkg-windows-vs
cmake --build build --config Debug
cmake --build build --config Release
```
`vcpkg` specifies all information about the compilation target in a
"triplet". For compiling Cesium Native as a stand-alone, the system
defaults will usually work, but consumers of Cesium Native might need
something more exotic. For example, one could configure a Windows
build with:
```bash
cmake -B build -S . \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DCESIUM_USE_EZVCPG=OFF \
-DVCPKG_TARGET_TRIPLET=x64-windows-static-md
cmake --build build --config Debug
cmake --build build --config Release
```
### Compile from Visual Studio Code
1) Install the `CMake Tools` extension. It should prompt you to generate project files from CMake.

21
extern/CMakeLists.txt vendored
View File

@ -15,29 +15,8 @@ add_library(earcut INTERFACE)
find_path(EARCUT_HPP_INCLUDE_DIRS "mapbox/earcut.hpp")
target_include_directories(earcut INTERFACE "${EARCUT_HPP_INCLUDE_DIRS}")
# Modp_b64 doesn't contain a CMake config, so we construct a fake import library here
add_library(modp_b64::modp_b64 STATIC IMPORTED GLOBAL)
set_target_properties(modp_b64::modp_b64 PROPERTIES
INCLUDE_DIRECTORIES "${PACKAGE_BUILD_DIR}/include"
# Yes, on non-windows platforms the name of the library really is liblibmodpbase64.a
# Don't ask me, I didn't do it.
IMPORTED_LOCATION "${PACKAGE_BUILD_DIR}/lib/${EXTERN_LIB_PREFIX}libmodpbase64.${EXTERN_LIB_SUFFIX}"
IMPORTED_LOCATION_DEBUG "${PACKAGE_BUILD_DIR}/debug/lib/${EXTERN_LIB_PREFIX}libmodpbase64.${EXTERN_LIB_SUFFIX}"
)
# picosha2 also doesn't contain a CMake config, so we construct a fake header-only import library here
add_library(picosha2::picosha2 IMPORTED INTERFACE GLOBAL)
set_target_properties(picosha2::picosha2 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_BUILD_DIR}/include"
)
find_library(ZLIB_NG_RELEASE_LIB NAMES zlibstatic-ng z-ng PATHS ${PACKAGE_BUILD_DIR}/lib NO_DEFAULT_PATH)
find_library(ZLIB_NG_DEBUG_LIB NAMES zlibstatic-ngd z-ng PATHS ${PACKAGE_BUILD_DIR}/debug/lib NO_DEFAULT_PATH)
add_library(zlib-ng::zlib-ng STATIC IMPORTED GLOBAL)
target_include_directories(zlib-ng::zlib-ng INTERFACE "${PACKAGE_BUILD_DIR}/include")
set_target_properties(zlib-ng::zlib-ng PROPERTIES
IMPORTED_LOCATION "${ZLIB_NG_RELEASE_LIB}"
IMPORTED_LOCATION_DEBUG "${ZLIB_NG_DEBUG_LIB}"
)

View File

@ -21,11 +21,11 @@ if(VCPKG_TARGET_IS_WINDOWS)
bash
DIRECT_PACKAGES
# Required for "getopt"
"https://repo.msys2.org/msys/x86_64/util-linux-2.35.2-3-x86_64.pkg.tar.zst"
da26540881cd5734072717133307e5d1a27a60468d3656885507833b80f24088c5382eaa0234b30bdd9e8484a6638b4514623f5327f10b19eed36f12158e8edb
"https://repo.msys2.org/msys/x86_64/util-linux-2.40.2-2-x86_64.pkg.tar.zst"
bf45b16cd470f8d82a9fe03842a09da2e6c60393c11f4be0bab354655072c7a461afc015b9c07f9f5c87a0e382cd867e4f079ede0d42f1589aa99ebbb3f76309
# Required for "dos2unix"
"https://mirror.msys2.org/msys/x86_64/dos2unix-7.5.1-1-x86_64.pkg.tar.zst"
83d85e6ccea746ef9e8153a0d605e774dbe7efc0ee952804acfee4ffd7e3b0386a353b45ff989dd99bc3ce75968209fea3d246ad2af88bbb5c4eca12fc5a8f92
"https://mirror.msys2.org/msys/x86_64/dos2unix-7.5.2-1-x86_64.pkg.tar.zst"
e5e949f01b19c82630131e338a4642da75e42f84220f5af4a97a11dd618e363396567b233d2adab79e05422660a0000abcbbabcd17efcadf37f07fe7565f041e
)
vcpkg_add_to_path("${MSYS_ROOT}/usr/bin")
vcpkg_list(APPEND OPTIONS "-DBASH_EXECUTABLE=${MSYS_ROOT}/usr/bin/bash.exe")

17
vcpkg-configuration.json Normal file
View File

@ -0,0 +1,17 @@
{
"default-registry": {
"kind": "git",
"baseline": "b2cb0da531c2f1f740045bfe7c4dac59f0b2b69c",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "artifact",
"location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip",
"name": "microsoft"
}
],
"overlay-ports": [
"./extern/vcpkg/ports"
]
}

30
vcpkg.json Normal file
View File

@ -0,0 +1,30 @@
{
"dependencies": [
"asyncplusplus",
"doctest",
"expected-lite",
"glm",
"ms-gsl",
"rapidjson",
"spdlog",
"stb",
"ada-url",
"draco",
"ktx",
"modp-base64",
"meshoptimizer",
"openssl",
"s2geometry",
"libjpeg-turbo",
"sqlite3",
"tinyxml2",
"libwebp",
"zlib-ng",
"picosha2",
"earcut-hpp",
"cpp-httplib",
"libmorton",
"zstd"
]
}