diff --git a/CMakeLists.txt b/CMakeLists.txt index 27a49460..7ead4fab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,23 +24,14 @@ FetchContent_Declare(mapget GIT_SHALLOW ON) FetchContent_MakeAvailable(mapget) -set(CESIUM_TESTS_ENABLED OFF) -set(CESIUM_GLM_STRICT_ENABLED OFF) -set(CESIUM_TRACING_ENABLED OFF) -set(DRACO_JS_GLUE OFF CACHE BOOL "Disable JS glue for Draco" FORCE) -FetchContent_Declare( - cesiumnative - GIT_REPOSITORY https://github.com/Klebert-Engineering/cesium-native.git - GIT_TAG "spdlog-upgrade" - GIT_SHALLOW ON) -FetchContent_MakeAvailable(cesiumnative) - FetchContent_Declare(yaml-cpp GIT_REPOSITORY "https://github.com/jbeder/yaml-cpp.git" GIT_TAG "yaml-cpp-0.7.0" GIT_SHALLOW ON) FetchContent_MakeAvailable(yaml-cpp) +include(cmake/cesium.cmake) + # Erdblick Core Library add_subdirectory(libs/core) diff --git a/ci/10_linux_build.bash b/ci/10_linux_build.bash index cafb34be..1c4c181c 100755 --- a/ci/10_linux_build.bash +++ b/ci/10_linux_build.bash @@ -7,11 +7,11 @@ source "$ci_dir/emsdk/emsdk_env.sh" cd "$ci_dir/.." export EMSCRIPTEN="$ci_dir/emsdk/upstream/emscripten" -export PATH=$PATH:"$(pwd)/node_modules/.bin/" +export PATH="$PATH:$(pwd)/node_modules/.bin/" rm -rf build && mkdir build cd build mkdir deps mkdir assets emcmake cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF .. -cmake --build . -- -j +cmake --build . -- -j"$(nproc)" diff --git a/ci/20_linux_rebuild.bash b/ci/20_linux_rebuild.bash index 3764c07c..5acd3988 100755 --- a/ci/20_linux_rebuild.bash +++ b/ci/20_linux_rebuild.bash @@ -9,4 +9,4 @@ export EMSCRIPTEN="$ci_dir/emsdk/upstream/emscripten" export PATH=$PATH:"$ci_dir/../node_modules/.bin/" cd "$ci_dir/../build" -cmake --build . -- -j +cmake --build . -- -j"$(nproc)" diff --git a/cmake/cesium.cmake b/cmake/cesium.cmake new file mode 100644 index 00000000..651d4fd2 --- /dev/null +++ b/cmake/cesium.cmake @@ -0,0 +1,86 @@ +include(FetchContent) +include(ExternalProject) + +block() + +if (NOT CMAKE_BUILD_TYPE) + message(FATAL_ERROR "Setting CMAKE_BUILD_TYPE is required!") +endif() + +# List of cesium libs we want to expose as CMake targets +set(CESIUM_LIBS + CesiumUtility + Cesium3DTilesWriter + CesiumGeospatial + CesiumGltf + CesiumGltfWriter) + +# Use fetch content for cloning the repository durring +# configure phase. We do not call `FetchContent_MakeAvailable`, +# but instead use `ExternalProject_Add` to compile Cesium in +# isolation. +FetchContent_Declare(cesiumnative_src + GIT_REPOSITORY "https://github.com/Klebert-Engineering/cesium-native.git" + GIT_TAG "main" + GIT_SUBMODULES_RECURSE YES + GIT_PROGRESS YES) + +FetchContent_GetProperties(cesiumnative_src) +if (NOT cesiumnative_src_POPULATED) + FetchContent_Populate(cesiumnative_src) +endif() + +# Cesium sets CMAKE_{DEBUG,RELEASE}_POSTFIX manually +set(CMAKE_DEBUG_POSTFIX "d") +set(CMAKE_RELEASE_POSTFIX "") + +# CMake uses some pre-, post- and suffix variables to decorate +# library names with. We have to take them into account. +if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(LIB_SUFFIX "${CMAKE_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}") +else() + set(LIB_SUFFIX "${CMAKE_RELEASE_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() + +# Ninja generators _require_ a known list of byproducts. +set(CESIUM_BYPRODUCTS "") +foreach (lib ${CESIUM_LIBS}) + list(APPEND CESIUM_BYPRODUCTS "/${lib}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${LIB_SUFFIX}") +endforeach() +message(STATUS "cesium byproducts: ${CESIUM_BYPRODUCTS}") + +ExternalProject_Add(cesiumnative + SOURCE_DIR ${cesiumnative_src_SOURCE_DIR} + CMAKE_ARGS + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCESIUM_TESTS_ENABLED=OFF + -DCESIUM_GLM_STRICT_ENABLED=OFF + -DCESIUM_TRACING_ENABLED=OFF + -DDRACO_JS_GLUE=OFF + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + BUILD_BYPRODUCTS + ${CESIUM_BYPRODUCTS} + INSTALL_COMMAND "" + STEP_TARGETS build + USES_TERMINAL_CONFIGURE TRUE + USES_TERMINAL_BUILD TRUE) + +function (add_cesium_lib TARGET) + ExternalProject_Get_Property(cesiumnative + SOURCE_DIR BINARY_DIR) + message(STATUS "Adding Cesium library: ${TARGET} (${BINARY_DIR}/${TARGET}/${CMAKE_STATIC_LIBRARY_PREFIX}${TARGET}${LIB_SUFFIX})") + + add_library(${TARGET} STATIC IMPORTED) + set_target_properties(${TARGET} PROPERTIES + IMPORTED_LOCATION "${BINARY_DIR}/${TARGET}/${CMAKE_STATIC_LIBRARY_PREFIX}${TARGET}${LIB_SUFFIX}" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/${TARGET}/include") + add_dependencies(${TARGET} cesiumnative-build) +endfunction() + +foreach (lib ${CESIUM_LIBS}) + add_cesium_lib(${lib}) +endforeach() + +endblock() diff --git a/libs/core/CMakeLists.txt b/libs/core/CMakeLists.txt index cddaf148..6dad0b0f 100644 --- a/libs/core/CMakeLists.txt +++ b/libs/core/CMakeLists.txt @@ -70,6 +70,7 @@ target_include_directories(erdblick-core target_link_libraries(erdblick-core PUBLIC + CesiumUtility Cesium3DTilesWriter CesiumGeospatial CesiumGltf