mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-15 13:07:33 +00:00
Compare commits
4 Commits
feat/print
...
feat/deps-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee1b845746 | ||
|
|
61b865706f | ||
|
|
55cc95d122 | ||
|
|
277ff35325 |
@@ -8,7 +8,7 @@ SCRIPT_PATH=$(dirname "$(readlink -f "${0}")")
|
|||||||
pushd "${SCRIPT_PATH}" > /dev/null
|
pushd "${SCRIPT_PATH}" > /dev/null
|
||||||
|
|
||||||
function usage() {
|
function usage() {
|
||||||
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-p][-r][-s][-t][-u][-l][-L]"
|
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-p][-r][-s][-t][-u][-l][-L [lld|mold]]"
|
||||||
echo " -1: limit builds to one core (where possible)"
|
echo " -1: limit builds to one core (where possible)"
|
||||||
echo " -j N: limit builds to N cores (where possible)"
|
echo " -j N: limit builds to N cores (where possible)"
|
||||||
echo " -b: build in Debug mode"
|
echo " -b: build in Debug mode"
|
||||||
@@ -27,7 +27,7 @@ function usage() {
|
|||||||
echo " -t: build tests (optional), requires -s flag"
|
echo " -t: build tests (optional), requires -s flag"
|
||||||
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
|
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
|
||||||
echo " -l: use Clang instead of GCC (default: GCC)"
|
echo " -l: use Clang instead of GCC (default: GCC)"
|
||||||
echo " -L: use ld.lld as linker (if available)"
|
echo " -L [lld|mold]: use an alternate linker (if available) (default: lld)"
|
||||||
echo "For a first use, you want to './${SCRIPT_NAME} -u'"
|
echo "For a first use, you want to './${SCRIPT_NAME} -u'"
|
||||||
echo " and then './${SCRIPT_NAME} -dsi'"
|
echo " and then './${SCRIPT_NAME} -dsi'"
|
||||||
echo "For a GitHub Actions-like Linux build locally, use './${SCRIPT_NAME} -g -istrlL'"
|
echo "For a GitHub Actions-like Linux build locally, use './${SCRIPT_NAME} -g -istrlL'"
|
||||||
@@ -115,8 +115,24 @@ while getopts ":1j:bcCdDeFghiprstulL" opt ; do
|
|||||||
FORWARDED_ARGS+=("-l")
|
FORWARDED_ARGS+=("-l")
|
||||||
;;
|
;;
|
||||||
L )
|
L )
|
||||||
USE_LLD="1"
|
# -L takes an optional argument. getopts has no native support for
|
||||||
FORWARDED_ARGS+=("-L")
|
# this, so L is declared bare (no ':') in the optstring above, and we
|
||||||
|
# manually peek at the next unconsumed argv token via ${!OPTIND}. If
|
||||||
|
# it's a bare 'lld' or 'mold' (not another option, i.e. doesn't start
|
||||||
|
# with '-'), consume it as the explicit choice and advance OPTIND so
|
||||||
|
# getopts doesn't reprocess it as a new flag. Otherwise, leave it
|
||||||
|
# alone (it isn't meant for -L) and default to lld.
|
||||||
|
LINKER_NAME="lld"
|
||||||
|
next_arg="${!OPTIND-}"
|
||||||
|
if [[ -n "${next_arg}" ]] && [[ "${next_arg}" != -* ]] ; then
|
||||||
|
case "${next_arg}" in
|
||||||
|
lld|mold )
|
||||||
|
LINKER_NAME="${next_arg}"
|
||||||
|
OPTIND=$((OPTIND + 1))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
FORWARDED_ARGS+=("-L" "${LINKER_NAME}")
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
echo "Unknown argument '${opt}', aborting."
|
echo "Unknown argument '${opt}', aborting."
|
||||||
@@ -135,6 +151,12 @@ if [[ -n "${CLEAN_DOCKER_IMAGE}" ]] && [[ -z "${USE_DOCKER}" ]] ; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${USE_DOCKER}" ]] && [[ "${LINKER_NAME}" == "mold" ]] ; then
|
||||||
|
echo "Error: -L mold is not available in the Docker/Podman build image, so -g and -L mold cannot be combined."
|
||||||
|
echo "Omit -L mold when using -g (the container build defaults to GCC without mold), or drop -g and build with -L mold directly on a host with mold installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
function check_available_memory_and_disk() {
|
function check_available_memory_and_disk() {
|
||||||
FREE_MEM_GB=$(free --gibi --total | grep 'Mem' | rev | cut --delimiter=" " --fields=1 | rev)
|
FREE_MEM_GB=$(free --gibi --total | grep 'Mem' | rev | cut --delimiter=" " --fields=1 | rev)
|
||||||
MIN_MEM_GB=10
|
MIN_MEM_GB=10
|
||||||
@@ -492,14 +514,49 @@ if [[ -n "${USE_CLANG}" ]] ; then
|
|||||||
export CMAKE_C_CXX_COMPILER_CLANG=(-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++)
|
export CMAKE_C_CXX_COMPILER_CLANG=(-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure use of ld.lld as the linker when requested
|
# Configure use of an alternate linker (-L lld or -L mold) when requested
|
||||||
export CMAKE_LLD_LINKER_ARGS=()
|
export CMAKE_LINKER_ARGS=()
|
||||||
if [[ -n "${USE_LLD}" ]] ; then
|
if [[ -n "${LINKER_NAME}" ]] ; then
|
||||||
if command -v ld.lld >/dev/null 2>&1 ; then
|
case "${LINKER_NAME}" in
|
||||||
LLD_BIN=$(command -v ld.lld)
|
lld )
|
||||||
export CMAKE_LLD_LINKER_ARGS=(-DCMAKE_LINKER="${LLD_BIN}" -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld)
|
LINKER_BIN_NAME="ld.lld"
|
||||||
|
;;
|
||||||
|
mold )
|
||||||
|
LINKER_BIN_NAME="mold"
|
||||||
|
# -fuse-ld=mold requires GCC 12.1+. Older GCC (e.g. GCC 11, shipped
|
||||||
|
# for Ubuntu 22.x via scripts/linux.d/debian) doesn't understand the
|
||||||
|
# flag, and cmake's compiler check then fails with a confusing
|
||||||
|
# generic "is not able to compile a simple test program" error
|
||||||
|
# instead of naming the real cause. Catch it here instead.
|
||||||
|
if [[ -z "${USE_CLANG}" ]] ; then
|
||||||
|
GCC_BIN="${CC:-gcc}"
|
||||||
|
if ! command -v "${GCC_BIN}" >/dev/null 2>&1 ; then
|
||||||
|
GCC_BIN="cc"
|
||||||
|
fi
|
||||||
|
if command -v "${GCC_BIN}" >/dev/null 2>&1 ; then
|
||||||
|
GCC_VERSION=$("${GCC_BIN}" -dumpfullversion 2>/dev/null)
|
||||||
|
if [[ -n "${GCC_VERSION}" ]] && [[ "$(printf '%s\n%s\n' "${GCC_VERSION}" "12.1" | sort -V | head -n1)" != "12.1" ]] ; then
|
||||||
|
echo "Error: -L mold requires GCC 12.1 or newer to support -fuse-ld=mold (found GCC ${GCC_VERSION} via '${GCC_BIN}')."
|
||||||
|
echo "Use -l to build with Clang instead, upgrade your GCC toolchain, or omit -L mold."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if command -v "${LINKER_BIN_NAME}" >/dev/null 2>&1 ; then
|
||||||
|
LINKER_BIN=$(command -v "${LINKER_BIN_NAME}")
|
||||||
|
export CMAKE_LINKER_ARGS=(-DCMAKE_LINKER="${LINKER_BIN}" "-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=${LINKER_NAME}" "-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=${LINKER_NAME}" "-DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=${LINKER_NAME}")
|
||||||
else
|
else
|
||||||
echo "Error: ld.lld not found. Please install the 'lld' package (e.g., sudo apt install lld) or omit -L."
|
case "${LINKER_NAME}" in
|
||||||
|
lld )
|
||||||
|
echo "Error: ld.lld not found. Please install the 'lld' package (e.g., sudo apt install lld) or omit -L lld."
|
||||||
|
;;
|
||||||
|
mold )
|
||||||
|
echo "Error: mold not found. Please install the 'mold' package or omit -L mold."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -536,7 +593,7 @@ if [[ -n "${BUILD_DEPS}" ]] ; then
|
|||||||
BUILD_ARGS+=(-DCMAKE_BUILD_TYPE="${BUILD_CONFIG}")
|
BUILD_ARGS+=(-DCMAKE_BUILD_TYPE="${BUILD_CONFIG}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
|
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
|
||||||
print_and_run cmake --build deps/$BUILD_DIR -j1
|
print_and_run cmake --build deps/$BUILD_DIR -j1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -556,7 +613,7 @@ if [[ -n "${BUILD_ORCA}" ]] || [[ -n "${BUILD_TESTS}" ]] ; then
|
|||||||
BUILD_ARGS+=(-DORCA_UPDATER_SIG_KEY="${ORCA_UPDATER_SIG_KEY}")
|
BUILD_ARGS+=(-DORCA_UPDATER_SIG_KEY="${ORCA_UPDATER_SIG_KEY}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_and_run cmake -S . -B $BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G "Ninja Multi-Config" \
|
print_and_run cmake -S . -B $BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G "Ninja Multi-Config" \
|
||||||
-DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} \
|
-DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} \
|
||||||
-DORCA_TOOLS=ON \
|
-DORCA_TOOLS=ON \
|
||||||
"${COLORED_OUTPUT}" \
|
"${COLORED_OUTPUT}" \
|
||||||
|
|||||||
Reference in New Issue
Block a user