bambu-studio: 02.05.00.67 -> 02.08.00.50 (#518218)

This commit is contained in:
Gaétan Lepage
2026-07-07 16:32:13 +00:00
committed by GitHub
4 changed files with 284 additions and 28 deletions
+28 -9
View File
@@ -6,6 +6,7 @@
ninja,
pkg-config,
wrapGAppsHook3,
assimp,
boost183,
cacert,
cereal,
@@ -27,6 +28,7 @@
libpng,
libsecret,
makeFontsConf,
libnoise,
mpfr,
nanum,
nlopt,
@@ -39,6 +41,7 @@
webkitgtk_4_1,
wxwidgets_3_1,
libx11,
libharu,
withSystemd ? stdenv.hostPlatform.isLinux,
# 3D viewport blank on NVIDIA proprietary GL; routes through Mesa + zink.
# https://github.com/NixOS/nixpkgs/issues/498311
@@ -66,13 +69,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "bambu-studio";
version = "02.05.00.67";
version = "02.08.00.50";
src = fetchFromGitHub {
owner = "bambulab";
repo = "BambuStudio";
tag = "v${finalAttrs.version}";
hash = "sha256-jLaSUs6OmoD0yw1hOcJarYKfr1rbhB2TwRiBBU0utEI=";
hash = "sha256-zIizozfZkaXo5wymuBFBCUu/lu+FyYTpa4+3SoC2x7k=";
};
nativeBuildInputs = [
@@ -83,6 +86,7 @@ stdenv.mkDerivation (finalAttrs: {
];
buildInputs = [
assimp
boost183
cereal
cgal_5
@@ -104,6 +108,7 @@ stdenv.mkDerivation (finalAttrs: {
hicolor-icon-theme
libpng
libsecret
libnoise
mpfr
nlopt
opencascade-occt_7_6
@@ -113,6 +118,7 @@ stdenv.mkDerivation (finalAttrs: {
webkitgtk_4_1
wxGTK'
libx11
libharu
opencv
]
++ lib.optionals withSystemd [ systemd ]
@@ -129,8 +135,25 @@ stdenv.mkDerivation (finalAttrs: {
./patches/no-cereal.patch
# Cmake 4 support
./patches/cmake.patch
# Disable nodejs
./patches/no-device-web-node-download.patch
];
postPatch =
# Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
# now seems to be integrated into the main lib.
''
substituteInPlace cmake/modules/FindNLopt.cmake \
--replace-fail "nlopt_cxx" "nlopt"
''
# Fix libharu include
+ ''
substituteInPlace src/slic3r/GUI/Overview/AssemblyStepsUtils.cpp \
--replace-fail \
"#include <hpdf/hpdf.h>" \
"#include <hpdf.h>"
'';
doCheck = true;
checkInputs = [ gtest ];
@@ -156,13 +179,6 @@ stdenv.mkDerivation (finalAttrs: {
NIX_LDFLAGS = lib.optionalString withSystemd "-ludev" + " -L${opencv}/lib -lopencv_imgcodecs";
};
# TODO: macOS
prePatch = ''
# Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
# now seems to be integrated into the main lib.
sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake
'';
cmakeFlags = [
(lib.cmakeBool "SLIC3R_STATIC" false)
(lib.cmakeBool "SLIC3R_FHS" true)
@@ -177,6 +193,9 @@ stdenv.mkDerivation (finalAttrs: {
(lib.cmakeBool "DEP_WX_GTK3" true)
(lib.cmakeBool "SLIC3R_BUILD_TESTS" false)
(lib.cmakeFeature "CMAKE_CXX_FLAGS" "-DBOOST_LOG_DYN_LINK")
(lib.cmakeFeature "LIBNOISE_INCLUDE_DIR" "${lib.getInclude libnoise}/include/noise")
(lib.cmakeFeature "LIBNOISE_LIBRARY" "${lib.getLib libnoise}/lib/libnoise-static.a")
];
preFixup = ''
@@ -1,14 +1,14 @@
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 2cdc525..44e6602 100644
index 2315928..55a2f1b 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -533,7 +533,8 @@ target_link_libraries(libslic3r
@@ -627,7 +627,8 @@ target_link_libraries(libslic3r
${OCCT_LIBS}
Clipper2
mcut
- opencv_world
+ opencv_core
+ opencv_imgproc
${_cgal_tgt}
assimp::assimp
)
if(NOT WIN32)
@@ -1,22 +1,22 @@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0b4b9a8..8c22f60 100644
index 1f12e26..ffd7888 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -125,7 +125,7 @@ if (NOT WIN32 AND NOT APPLE)
@@ -128,7 +128,7 @@ if (NOT WIN32 AND NOT APPLE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/unix/BuildLinuxImage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/BuildLinuxImage.sh @ONLY)
endif ()
-target_link_libraries(BambuStudio libslic3r cereal)
+target_link_libraries(BambuStudio libslic3r)
if (APPLE)
# add_compile_options(-stdlib=libc++)
# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE)
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 4481362..7d41af3 100644
index 2315928..f89b770 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -574,7 +574,6 @@ set(OCCT_LIBS
target_link_libraries(libslic3r
@@ -608,7 +608,6 @@ target_link_libraries(libslic3r
noise::noise
libnest2d
admesh
- cereal
@@ -24,17 +24,19 @@ index 4481362..7d41af3 100644
miniz
boost_libs
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 0a852a4..2da0533 100644
index 63671a0..0b77a9f 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -671,8 +671,8 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
encoding_check(libslic3r_gui)
-target_link_libraries(libslic3r_gui libslic3r cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto)
@@ -743,10 +743,10 @@ else ()
find_library(HPDF_LIBRARY NAMES hpdf)
endif ()
-target_link_libraries(libslic3r_gui libslic3r cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi
+target_link_libraries(libslic3r_gui libslic3r imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi
${HPDF_LIBRARY}
${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto)
-#target_link_libraries(libslic3r_gui libslic3r cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi libcurl OpenSSL::SSL OpenSSL::Crypto ${wxWidgets_LIBRARIES} glfw)
+target_link_libraries(libslic3r_gui libslic3r imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto)
+#target_link_libraries(libslic3r_gui libslic3r imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi libcurl OpenSSL::SSL OpenSSL::Crypto ${wxWidgets_LIBRARIES} glfw)
if (MSVC)
target_link_libraries(libslic3r_gui Setupapi.lib)
target_link_libraries(libslic3r_gui Setupapi.lib dwmapi.lib)
@@ -0,0 +1,235 @@
diff --git a/src/slic3r/GUI/DeviceWeb/CMakeLists.txt b/src/slic3r/GUI/DeviceWeb/CMakeLists.txt
index bb65ab0..06684d4 100644
--- a/src/slic3r/GUI/DeviceWeb/CMakeLists.txt
+++ b/src/slic3r/GUI/DeviceWeb/CMakeLists.txt
@@ -3,225 +3,11 @@
# date -- 2025.01.01
# status -- Building
-# ==================== Node.js/pnpm 环境准备(仅用于 deviceweb 构建)====================
-
-function(prepare_node_env)
- # 定义版本号
- set(NODE_VERSION "22.22.2")
- set(PNPM_VERSION "10.12.1")
-
- # 定义本地缓存目录(放在项目同级目录,clean build 后不会丢失)
- set(NODE_CACHE_DIR "${CMAKE_SOURCE_DIR}/../node-cache")
-
- # 根据平台确定下载 URL、文件名和 hash 值
- if(WIN32)
- set(NODE_URL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-win-x64.zip")
- set(NODE_ARCHIVE_NAME "node-v${NODE_VERSION}-win-x64.zip")
- set(NODE_BIN_DIR "node-v${NODE_VERSION}-win-x64")
- set(NODE_EXEC "node.exe")
- set(NODE_HASH "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c")
- set(PNPM_URL "https://github.com/pnpm/pnpm/releases/download/v${PNPM_VERSION}/pnpm-win-x64.exe")
- set(PNPM_EXEC_NAME "pnpm.exe")
- set(PNPM_HASH "9b802759436b3bccfe0a78cb0b86e937ac44902ec16597260f59d5394602f092")
- elseif(APPLE)
- if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
- set(NODE_URL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-darwin-arm64.tar.gz")
- set(NODE_ARCHIVE_NAME "node-v${NODE_VERSION}-darwin-arm64.tar.gz")
- set(NODE_BIN_DIR "node-v${NODE_VERSION}-darwin-arm64/bin")
- set(NODE_HASH "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000")
-
- set(PNPM_URL "https://github.com/pnpm/pnpm/releases/download/v${PNPM_VERSION}/pnpm-macos-arm64")
- set(PNPM_HASH "8b39b2129a19eeec9511eb7cdde2450b604e389551d59ad738167f7495b56d52")
- else()
- set(NODE_URL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-darwin-x64.tar.gz")
- set(NODE_ARCHIVE_NAME "node-v${NODE_VERSION}-darwin-x64.tar.gz")
- set(NODE_BIN_DIR "node-v${NODE_VERSION}-darwin-x64/bin")
- set(NODE_HASH "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba")
-
- set(PNPM_URL "https://github.com/pnpm/pnpm/releases/download/v${PNPM_VERSION}/pnpm-macos-x64")
- set(PNPM_HASH "4c78e34022bfecfae60c041148a8022858b80b50e3b31c8fa8ba7b2b6259dd4a")
- endif()
- set(NODE_EXEC "node")
- set(PNPM_EXEC_NAME "pnpm")
- else()
- set(NODE_URL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz")
- set(NODE_ARCHIVE_NAME "node-v${NODE_VERSION}-linux-x64.tar.xz")
- set(NODE_BIN_DIR "node-v${NODE_VERSION}-linux-x64/bin")
- set(NODE_EXEC "node")
- set(NODE_HASH "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a")
-
- set(PNPM_URL "https://github.com/pnpm/pnpm/releases/download/v${PNPM_VERSION}/pnpm-linux-x64")
- set(PNPM_EXEC_NAME "pnpm")
- set(PNPM_HASH "eb2dc1f109bca046ce734d062c8dd8f34db2b58a115992f9b086456efd7b2305")
- endif()
-
- # 定义最终的可执行文件路径
- set(NODE_EXECUTABLE "${NODE_CACHE_DIR}/${NODE_BIN_DIR}/${NODE_EXEC}")
- # pnpm 放到 node 同目录,这样执行 pnpm 时 PATH 中天然能找到 node
- set(PNPM_EXECUTABLE "${NODE_CACHE_DIR}/${NODE_BIN_DIR}/${PNPM_EXEC_NAME}")
-
- # ============ Node.js 下载 + 解压 ============
- if(NOT EXISTS "${NODE_EXECUTABLE}")
- message(STATUS "Downloading Node.js v${NODE_VERSION} from ${NODE_URL}")
- file(MAKE_DIRECTORY "${NODE_CACHE_DIR}")
-
- file(DOWNLOAD
- ${NODE_URL}
- "${NODE_CACHE_DIR}/${NODE_ARCHIVE_NAME}"
- SHOW_PROGRESS
- STATUS node_dl_status
- EXPECTED_HASH SHA256=${NODE_HASH}
- TLS_VERIFY OFF
- )
- list(GET node_dl_status 0 node_dl_code)
- list(GET node_dl_status 1 node_dl_msg)
- if(NOT node_dl_code EQUAL 0)
- file(REMOVE "${NODE_CACHE_DIR}/${NODE_ARCHIVE_NAME}")
- message(FATAL_ERROR "Failed to download Node.js: ${node_dl_msg}")
- endif()
-
- message(STATUS "Extracting Node.js...")
- if(WIN32)
- execute_process(
- COMMAND powershell -NoProfile -Command
- "Expand-Archive -Path '${NODE_CACHE_DIR}/${NODE_ARCHIVE_NAME}' -DestinationPath '${NODE_CACHE_DIR}' -Force"
- WORKING_DIRECTORY "${NODE_CACHE_DIR}"
- RESULT_VARIABLE extract_result
- OUTPUT_VARIABLE extract_output
- ERROR_VARIABLE extract_error
- )
- else()
- execute_process(
- COMMAND tar -xf "${NODE_ARCHIVE_NAME}"
- WORKING_DIRECTORY "${NODE_CACHE_DIR}"
- RESULT_VARIABLE extract_result
- OUTPUT_VARIABLE extract_output
- ERROR_VARIABLE extract_error
- )
- endif()
-
- if(NOT extract_result EQUAL 0)
- message(FATAL_ERROR "Failed to extract Node.js archive: ${extract_error}")
- endif()
-
- # 清理压缩包(节省空间)
- file(REMOVE "${NODE_CACHE_DIR}/${NODE_ARCHIVE_NAME}")
-
- if(NOT EXISTS "${NODE_EXECUTABLE}")
- message(FATAL_ERROR "Node.js extraction finished but executable not found: ${NODE_EXECUTABLE}")
- endif()
-
- message(STATUS "Node.js extracted to: ${NODE_EXECUTABLE}")
- else()
- message(STATUS "Found cached Node.js: ${NODE_EXECUTABLE}")
- endif()
-
- # ============ pnpm 独立二进制下载 ============
- if(NOT EXISTS "${PNPM_EXECUTABLE}")
- message(STATUS "Downloading pnpm v${PNPM_VERSION} from ${PNPM_URL}")
-
- file(DOWNLOAD
- ${PNPM_URL}
- "${PNPM_EXECUTABLE}"
- SHOW_PROGRESS
- STATUS pnpm_dl_status
- EXPECTED_HASH SHA256=${PNPM_HASH}
- TLS_VERIFY OFF
- )
- list(GET pnpm_dl_status 0 pnpm_dl_code)
- list(GET pnpm_dl_status 1 pnpm_dl_msg)
- if(NOT pnpm_dl_code EQUAL 0)
- file(REMOVE "${PNPM_EXECUTABLE}")
- message(FATAL_ERROR "Failed to download pnpm: ${pnpm_dl_msg}")
- endif()
-
- if(NOT WIN32)
- execute_process(
- COMMAND chmod +x "${PNPM_EXECUTABLE}"
- RESULT_VARIABLE chmod_result
- ERROR_VARIABLE chmod_error
- )
- if(NOT chmod_result EQUAL 0)
- message(FATAL_ERROR "Failed to chmod +x pnpm: ${chmod_error}")
- endif()
- endif()
-
- message(STATUS "pnpm installed: ${PNPM_EXECUTABLE}")
- else()
- message(STATUS "Found cached pnpm: ${PNPM_EXECUTABLE}")
- endif()
-
- # 设置输出变量(使用绝对路径)
- set(NODE_EXECUTABLE "${NODE_EXECUTABLE}" PARENT_SCOPE)
- set(PNPM_EXECUTABLE "${PNPM_EXECUTABLE}" PARENT_SCOPE)
-endfunction()
-
-# 执行环境准备(在 config 阶段执行)
-prepare_node_env()
-
-# ==================== 前端工程构建 ====================
-
-set(DEVICE_PAGE_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/device_page")
-set(DEVICE_PAGE_DIST_DIR "${DEVICE_PAGE_SRC_DIR}/dist")
-set(DEVICE_PAGE_TARGET_DIR "${CMAKE_SOURCE_DIR}/resources/web/device_page/dist")
-
-get_filename_component(NODE_BIN_PATH "${NODE_EXECUTABLE}" DIRECTORY)
-
-if(WIN32)
- # 原本PATH末尾的\会影响后续的分隔符,需要处理
- set(DEVICE_PAGE_PATH_UNESCAPED "${NODE_BIN_PATH};$ENV{PATH}")
- string(REPLACE "\;" ";" DEVICE_PAGE_PATH "${DEVICE_PAGE_PATH_UNESCAPED}")
-else()
- # Unix PATH 分隔符是 :
- set(DEVICE_PAGE_PATH "${NODE_BIN_PATH}:$ENV{PATH}")
-endif()
-
-set(PNPM_STORE_DIR "${CMAKE_CURRENT_BINARY_DIR}/.pnpm-store")
-file(MAKE_DIRECTORY "${PNPM_STORE_DIR}")
-
-set(DEVICE_PAGE_BUILD_STAMP "${CMAKE_CURRENT_BINARY_DIR}/device_page.stamp")
-
-file(GLOB_RECURSE DEVICE_PAGE_SRC_FILES CONFIGURE_DEPENDS
- "${DEVICE_PAGE_SRC_DIR}/src/*"
-)
-file(GLOB_RECURSE DEVICE_PAGE_LOCALE_FILES CONFIGURE_DEPENDS
- "${DEVICE_PAGE_SRC_DIR}/locales/*"
-)
-file(GLOB_RECURSE DEVICE_PAGE_PUBLIC_FILES CONFIGURE_DEPENDS
- "${DEVICE_PAGE_SRC_DIR}/public/*"
-)
-
-set(DEVICE_PAGE_BUILD_INPUTS
- ${DEVICE_PAGE_SRC_FILES}
- ${DEVICE_PAGE_LOCALE_FILES}
- ${DEVICE_PAGE_PUBLIC_FILES}
- "${DEVICE_PAGE_SRC_DIR}/index.html"
- "${DEVICE_PAGE_SRC_DIR}/package.json"
- "${DEVICE_PAGE_SRC_DIR}/pnpm-lock.yaml"
- "${DEVICE_PAGE_SRC_DIR}/vite.config.ts"
- "${DEVICE_PAGE_SRC_DIR}/tsconfig.json"
- "${DEVICE_PAGE_SRC_DIR}/tsconfig.app.json"
- "${DEVICE_PAGE_SRC_DIR}/tsconfig.node.json"
- "${DEVICE_PAGE_SRC_DIR}/eslint.config.js"
- "${DEVICE_PAGE_SRC_DIR}/i18next-parser.config.js"
-)
-
-add_custom_command(
- OUTPUT "${DEVICE_PAGE_BUILD_STAMP}"
- COMMAND ${CMAKE_COMMAND} -E env "PATH=${DEVICE_PAGE_PATH}" "PNPM_STORE_DIR=${PNPM_STORE_DIR}" ${PNPM_EXECUTABLE} install
- COMMAND ${CMAKE_COMMAND} -E env "PATH=${DEVICE_PAGE_PATH}" "PNPM_STORE_DIR=${PNPM_STORE_DIR}" ${PNPM_EXECUTABLE} run build
- COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEVICE_PAGE_TARGET_DIR}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${DEVICE_PAGE_TARGET_DIR}"
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${DEVICE_PAGE_DIST_DIR}" "${DEVICE_PAGE_TARGET_DIR}"
- COMMAND ${CMAKE_COMMAND} -E touch "${DEVICE_PAGE_BUILD_STAMP}"
- DEPENDS ${DEVICE_PAGE_BUILD_INPUTS}
- WORKING_DIRECTORY ${DEVICE_PAGE_SRC_DIR}
- COMMENT "Building device_page web bundle when sources change..."
- VERBATIM
-)
-
-# Not ALL: rebuilt only when a dependent target (libslic3r_gui / BambuStudio) is built.
-add_custom_target(device_page_build DEPENDS "${DEVICE_PAGE_BUILD_STAMP}")
+# NOTE (nixpkgs): the device_page frontend build has been removed.
+# Upstream downloads Node.js + pnpm at configure time and runs `pnpm install`
+# and `pnpm run build` at build time, none of which works in the offline Nix
+# sandbox. The C++ GUI sources below are still compiled; only the web resource
+# bundle (resources/web/device_page/dist) is not produced.
list(APPEND SLIC3R_GUI_SOURCES
GUI/DeviceWeb/DeviceHttpServer.cpp