mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-18 22:42:37 +00:00
First successful link of orca-slicer in this fork's history (158 MB, 738/738
objects, plus OrcaSlicer_profile_validator). 1633005bba got the test binary
green; the GUI had still never linked.
The blocker was in the deps image, not the code. That commit's message says
OCCT V7_6_0, Boost 1.84.0 and OpenCV 4.6.0 "are pinned identically in both
forks and were reused as-is". That is true of the VERSIONS and false of the
FLAGS: this fork's deps/OpenCV/OpenCV.cmake passes -DWITH_JPEG=OFF,
-DWITH_TIFF=OFF and -DBUILD_TIFF=OFF, and snaporca's does not. So the reused
build shipped lib/opencv4/3rdparty/liblibjpeg-turbo.a, which collides with the
deps' own lib/libjpeg.a — wx pulls that in via wxUSE_LIBJPEG=sys — on
jpeg_stdio_dest. Under -flto that duplicate is fatal, not a warning. snaporca
never sees it because its GUI does not link libopencv_world.a at all.
Fixed by rebuilding OpenCV 4.6.0 in orcacad-deps with this fork's own flags
(read out of the recipe rather than retyped), from the source already cached in
the image, into a clean build dir so no stale cache entry survived, and deleting
the orphaned bundled jpeg archive. The rebuilt libopencv_world.a has no jpeg or
tiff symbol references and its CMake config no longer names either library.
--allow-multiple-definition would have hidden this while leaving OpenCV carrying
codecs mainline deliberately turns off.
Lesson for the next dep: comparing deps recipes by version is not enough, diff
the CMAKE_ARGS.
Two more mounts, same root cause as the CMakeLists.txt mount this script
already documents — the baked tree is snaporca's:
- build_linux.sh, which builds `--target Snapmaker_Orca`; here the target is
OrcaSlicer and its output name is orca-slicer, so configure passed and ninja
then died on "unknown target". The binary check was looking for the wrong
name too.
- scripts/, because the packaging step needs scripts/appimage_lib_policy.sh;
without it a fully successful link still exited non-zero with "missing
AppImage helper" and the binary check never ran.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
57 lines
2.9 KiB
Bash
Executable File
57 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Incremental slicer build against the orcacad-deps base image.
|
|
#
|
|
# The deps-baked image (built from scripts/Dockerfile.deps) carries the pinned
|
|
# dependencies at /OrcaSlicer/deps/build/destdir. This script mounts the LIVE source
|
|
# tree and resources over the baked copy so code/CMake edits apply immediately, and
|
|
# persists /OrcaSlicer/build in a named volume so ninja recompiles only what changed.
|
|
#
|
|
# Result: edit -> rebuild in seconds-to-minutes instead of a full Docker rebuild.
|
|
#
|
|
# Usage (run on the build host, e.g. behemoth, from anywhere):
|
|
# scripts/docker-iter-build.sh
|
|
# IMAGE=orcacad-deps scripts/docker-iter-build.sh
|
|
#
|
|
# On success the binary is inside the persistent volume at
|
|
# /OrcaSlicer/build/package/bin/orca-slicer (copy it out with a follow-up
|
|
# `docker run --rm -v orcacad_buildcache:/b alpine cp ...` or via this script's tail).
|
|
set -euo pipefail
|
|
|
|
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
# orcacad-deps, NOT snaporca-deps: see the note in kernel-test.sh — the wrong image
|
|
# fails at CMake configure, not at link time.
|
|
IMAGE="${IMAGE:-orcacad-deps}"
|
|
BUILD_VOL="${BUILD_VOL:-orcacad_buildcache}"
|
|
|
|
echo "REPO=$REPO IMAGE=$IMAGE BUILD_VOL=$BUILD_VOL"
|
|
|
|
# The root CMakeLists.txt and cmake/ must be mounted too, not taken from the baked image:
|
|
# they carry the build-time gates (e.g. SLIC3R_CAD -> add_definitions(-DSLIC3R_CAD)) that the
|
|
# mounted headers are compiled against. With a stale baked copy the gate silently stays off and
|
|
# the build fails with "class GLCanvas3D has no member named set_design_sketch_tool".
|
|
#
|
|
# build_linux.sh must be mounted for the same reason, and here the stale copy is guaranteed
|
|
# wrong rather than merely risky: orcacad-deps is layered on snaporca-deps, so the baked script
|
|
# is the OTHER fork's and builds `--target Snapmaker_Orca`. This fork's target is `OrcaSlicer`,
|
|
# so without this mount configure succeeds and then ninja dies on "unknown target".
|
|
# scripts/ likewise: build_linux.sh's packaging step sources scripts/appimage_lib_policy.sh,
|
|
# which the baked snaporca tree does not have, so a fully successful link still exited
|
|
# non-zero with "missing AppImage helper" and the binary check never ran.
|
|
docker run --rm \
|
|
-v "$REPO/src":/OrcaSlicer/src \
|
|
-v "$REPO/resources":/OrcaSlicer/resources \
|
|
-v "$REPO/CMakeLists.txt":/OrcaSlicer/CMakeLists.txt \
|
|
-v "$REPO/cmake":/OrcaSlicer/cmake \
|
|
-v "$REPO/deps_src":/OrcaSlicer/deps_src \
|
|
-v "$REPO/build_linux.sh":/OrcaSlicer/build_linux.sh \
|
|
-v "$REPO/scripts":/OrcaSlicer/scripts \
|
|
-v "$BUILD_VOL":/OrcaSlicer/build \
|
|
"$IMAGE" \
|
|
bash -lc 'cd /OrcaSlicer && ./build_linux.sh -sr'
|
|
|
|
# src/CMakeLists.txt:151 renames the OrcaSlicer target's output to "orca-slicer" — not
|
|
# "snapmaker-orca", which is the other fork's binary name.
|
|
echo "=== build finished; checking for binary ==="
|
|
docker run --rm -v "$BUILD_VOL":/b "$IMAGE" \
|
|
bash -lc 'ls -lh /b/package/bin/orca-slicer 2>/dev/null && file /b/package/bin/orca-slicer || echo "NO BINARY"'
|