Skip to content

Commit 3ec21d8

Browse files
committed
cmake: Use ExternalProject for Cesium
1 parent 41c4feb commit 3ec21d8

File tree

8 files changed

+72
-50
lines changed

8 files changed

+72
-50
lines changed

.github/workflows/build-release.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@ jobs:
1717
- name: Install Ninja
1818
run: |
1919
sudo apt update && sudo apt install ninja-build
20+
2021
- name: Install Conan
2122
run: |
2223
pip install conan
2324
conan profile detect
2425
26+
- name: Install mapget (git+conan)
27+
run: |
28+
cd $(mktemp -d)
29+
git clone "https://github.com/ndsev/mapget.git" -b conan-pkg
30+
cd mapget
31+
conan create . -o with_service=False -s compiler.cppstd=20 -b missing
32+
2533
- name: Build demo with Emscripten
2634
run: |
2735
$GITHUB_WORKSPACE/ci/00_linux_setup.bash

CMakeLists.txt

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.24)
2-
include(FetchContent)
2+
project(erdblick)
33

44
set(CMAKE_CXX_STANDARD 20)
55

@@ -13,45 +13,14 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
1313
endif()
1414

1515
# External dependencies.
16-
17-
message("Building for ${CMAKE_SYSTEM_NAME}.")
18-
19-
find_package(glm REQUIRED)
16+
find_package(mapget REQUIRED COMPONENTS model)
17+
find_package(glm REQUIRED)
2018
find_package(yaml-cpp REQUIRED)
2119

22-
FetchContent_Declare(mapget
23-
GIT_REPOSITORY "https://github.com/Klebert-Engineering/mapget"
24-
GIT_TAG "relations"
25-
GIT_SHALLOW ON)
26-
FetchContent_MakeAvailable(mapget)
27-
28-
# Fetch cesium-native
29-
set(CESIUM_TESTS_ENABLED OFF)
30-
set(CESIUM_GLM_STRICT_ENABLED OFF)
31-
set(CESIUM_TRACING_ENABLED OFF)
32-
set(DRACO_JS_GLUE OFF CACHE BOOL "Disable JS glue for Draco" FORCE)
33-
FetchContent_Declare(
34-
cesiumnative
35-
GIT_REPOSITORY https://github.com/Klebert-Engineering/cesium-native.git
36-
GIT_TAG "spdlog-upgrade"
37-
GIT_SHALLOW ON)
38-
FetchContent_MakeAvailable(cesiumnative)
39-
40-
if (NOT TARGET mapget)
41-
if (MAPGET_DIR)
42-
FetchContent_Declare(mapget
43-
SOURCE_DIR "${MAPGET_DIR}"
44-
PATCH_COMMAND conan install "${MAPGET_DIR}" -of "${CMAKE_BINARY_DIR}" --build=missing)
45-
else()
46-
FetchContent_Declare(mapget
47-
GIT_REPOSITORY "https://github.com/Klebert-Engineering/mapget"
48-
GIT_TAG "main"
49-
GIT_SHALLOW ON
50-
PATCH_COMMAND conan install "${MAPGET_DIR}" -of "${CMAKE_BINARY_DIR}" --build=missing)
51-
endif()
52-
FetchContent_MakeAvailable(mapget)
53-
endif()
20+
# Cesium
21+
include(cmake/cesium.cmake)
5422

23+
message("Building for ${CMAKE_SYSTEM_NAME}.")
5524
add_subdirectory(libs/core)
5625

5726
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten")

ci/00_linux_setup.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ mkdir -p build/deps
66
mkdir -p build/assets
77

88
conan install . -pr:b default -pr:h conan-profiles/emscripten.profile \
9-
-s build_type=Release -b missing -of build
9+
-s build_type=Release -s compiler.cppstd=20 -b missing -of build

ci/10_linux_build.bash

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,5 @@ set -e
33
source "./build/conanbuild.sh"
44

55
set -eu
6-
7-
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake \
8-
-DBUILD_SHARED_LIBS=OFF \
9-
-DCMAKE_CONAN=OFF \
10-
-DCMAKE_BUILD_TYPE=Release
11-
12-
cmake --build build -- -j
6+
cmake --preset conan-release
7+
cmake --build --preset conan-release -- -j

ci/20_linux_rebuild.bash

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
#!/usr/bin/env bash
22
set -eu
3-
4-
cmake --build build -- -j
3+
cmake --build --preset conan-release -- -j

cmake/cesium.cmake

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
include(FetchContent)
2+
include(ExternalProject)
3+
4+
# Use fetch content for cloning the repository durring
5+
# configure phase. We do not call `FetchContent_MakeAvailable`,
6+
# but instead use `ExternalProject_Add` to compile Cesium in
7+
# isolation.
8+
FetchContent_Declare(cesiumnative_src
9+
GIT_REPOSITORY "https://github.com/Klebert-Engineering/cesium-native.git"
10+
GIT_TAG "main"
11+
GIT_SUBMODULES_RECURSE YES
12+
GIT_PROGRESS YES)
13+
14+
FetchContent_GetProperties(cesiumnative_src)
15+
if (NOT cesiumnative_src_POPULATED)
16+
FetchContent_Populate(cesiumnative_src)
17+
endif()
18+
19+
ExternalProject_Add(cesiumnative
20+
SOURCE_DIR ${cesiumnative_src_SOURCE_DIR}
21+
CMAKE_ARGS
22+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
23+
-DCESIUM_TESTS_ENABLED=OFF
24+
-DCESIUM_GLM_STRICT_ENABLED=OFF
25+
-DCESIUM_TRACING_ENABLED=OFF
26+
-DDRACO_JS_GLUE=OFF
27+
#-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} # FIXME: Is this needed?
28+
INSTALL_COMMAND "")
29+
30+
function (add_cesium_lib TARGET)
31+
message(STATUS "Adding Cesium library: ${TARGET}")
32+
ExternalProject_Get_Property(cesiumnative
33+
SOURCE_DIR BINARY_DIR)
34+
35+
add_library(${TARGET} SHARED IMPORTED)
36+
set_target_properties(${TARGET} PROPERTIES
37+
IMPORTED_LOCATION "${BINARY_DIR}/${TARGET}/${CMAKE_STATIC_LIBRARY_PREFIX}${TARGET}${CMAKE_STATIC_LIBRARY_SUFFIX}"
38+
INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/${TARGET}/include")
39+
endfunction()
40+
41+
add_cesium_lib(CesiumUtility)
42+
add_cesium_lib(Cesium3DTilesWriter)
43+
add_cesium_lib(CesiumGeospatial)
44+
add_cesium_lib(CesiumGltf)
45+
add_cesium_lib(CesiumGltfWriter)

conanfile.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
[requires]
2+
mapget/dev
23
glm/cci.20230113
34
yaml-cpp/0.8.0
45

6+
[options]
7+
mapget/*:with_service=False
8+
mapget/*:with_httplib=False
9+
510
[generators]
611
CMakeDeps
712
CMakeToolchain

libs/core/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,10 @@ target_link_libraries(erdblick-core
6565
CesiumGeospatial
6666
CesiumGltf
6767
CesiumGltfWriter
68-
glm
69-
mapget-model
70-
yaml-cpp)
68+
CesiumUtility
69+
glm::glm
70+
mapget::model
71+
yaml-cpp::yaml-cpp)
7172

7273
add_custom_target(erdblick-ui ALL
7374
COMMAND bash "${CMAKE_SOURCE_DIR}/build-ui.bash" "${CMAKE_SOURCE_DIR}"

0 commit comments

Comments
 (0)