mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 16:57:53 -06:00
ENH: Improve macOS build script (#4310)
* ENH: Improve macOS build script - Update shebang to bash, as it is already expected to be present in run_gettext.sh - Added fail-fast shell options. - Changed default CMake generator to Ninja - Adopted configuration for non-multi-config generators (Ninja, Make) - Added new options: - Allow to set CMake generator back to Xcode, no option for make thou. - Allow to build without reconfiguring CMake, improves build times. Unnecessary Cmake reconfigurations require full rebuild. - Allow to set build configuration for CMake - Reorganized targets into separate function to break "cd" dependency. - Reformat shell code. - Fix all warnings reported by ShellCheck linter tool. - Update run_gettext.sh to respect build dir in full mode. Signed-off-by: Dzmitry Neviadomski <nevack.d@gmail.com> * FIX: Install ninja with brew on CI. Test if building works with Ninja by default. Signed-off-by: Dzmitry Neviadomski <nevack.d@gmail.com> * ENH: Set Xcode back as default generator. Use Ninja on CI with explicit option. Signed-off-by: Dzmitry Neviadomski <nevack.d@gmail.com> * FIX: Partially revent changes in run_gettext.sh Revert changes for option parsing. Leave fixes for issues found by ShellCheck linter tool. Signed-off-by: Dzmitry Neviadomski <nevack.d@gmail.com> --------- Signed-off-by: Dzmitry Neviadomski <nevack.d@gmail.com>
This commit is contained in:
parent
eae2703610
commit
7b31ee3a45
5 changed files with 177 additions and 69 deletions
4
.github/workflows/build_deps.yml
vendored
4
.github/workflows/build_deps.yml
vendored
|
@ -70,12 +70,12 @@ jobs:
|
||||||
if: inputs.os == 'macos-12'
|
if: inputs.os == 'macos-12'
|
||||||
working-directory: ${{ github.workspace }}
|
working-directory: ${{ github.workspace }}
|
||||||
run: |
|
run: |
|
||||||
brew install cmake git gettext automake texinfo
|
brew install cmake git gettext automake texinfo ninja
|
||||||
brew list
|
brew list
|
||||||
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}
|
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}
|
||||||
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }}
|
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }}
|
||||||
brew uninstall --ignore-dependencies zstd
|
brew uninstall --ignore-dependencies zstd
|
||||||
./build_release_macos.sh -dp -a ${{ inputs.arch }} -t 10.15
|
./build_release_macos.sh -dpx -a ${{ inputs.arch }} -t 10.15
|
||||||
brew install zstd
|
brew install zstd
|
||||||
|
|
||||||
|
|
||||||
|
|
4
.github/workflows/build_orca.yml
vendored
4
.github/workflows/build_orca.yml
vendored
|
@ -75,7 +75,7 @@ jobs:
|
||||||
- name: Install tools mac
|
- name: Install tools mac
|
||||||
if: inputs.os == 'macos-12'
|
if: inputs.os == 'macos-12'
|
||||||
run: |
|
run: |
|
||||||
brew install cmake git gettext tree
|
brew install cmake git gettext tree ninja
|
||||||
brew list
|
brew list
|
||||||
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}
|
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}
|
||||||
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}}
|
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}}
|
||||||
|
@ -85,7 +85,7 @@ jobs:
|
||||||
if: inputs.os == 'macos-12'
|
if: inputs.os == 'macos-12'
|
||||||
working-directory: ${{ github.workspace }}
|
working-directory: ${{ github.workspace }}
|
||||||
run: |
|
run: |
|
||||||
./build_release_macos.sh -s -n -a ${{inputs.arch}} -t 10.15
|
./build_release_macos.sh -s -n -x -a ${{inputs.arch}} -t 10.15
|
||||||
|
|
||||||
# Thanks to RaySajuuk, it's working now
|
# Thanks to RaySajuuk, it's working now
|
||||||
- name: Sign app and notary
|
- name: Sign app and notary
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
while getopts ":a:sdpt:hn" opt; do
|
set -e
|
||||||
case ${opt} in
|
set -o pipefail
|
||||||
|
|
||||||
|
while getopts ":dpa:snt:xbc:h" opt; do
|
||||||
|
case "${opt}" in
|
||||||
d )
|
d )
|
||||||
export BUILD_TARGET="deps"
|
export BUILD_TARGET="deps"
|
||||||
;;
|
;;
|
||||||
|
@ -20,25 +23,62 @@ while getopts ":a:sdpt:hn" opt; do
|
||||||
t )
|
t )
|
||||||
export OSX_DEPLOYMENT_TARGET="$OPTARG"
|
export OSX_DEPLOYMENT_TARGET="$OPTARG"
|
||||||
;;
|
;;
|
||||||
|
x )
|
||||||
|
export CMAKE_GENERATOR="Ninja"
|
||||||
|
;;
|
||||||
|
b )
|
||||||
|
export BUILD_ONLY="1"
|
||||||
|
;;
|
||||||
|
c )
|
||||||
|
export BUILD_CONFIG="$OPTARG"
|
||||||
|
;;
|
||||||
h ) echo "Usage: ./build_release_macos.sh [-d]"
|
h ) echo "Usage: ./build_release_macos.sh [-d]"
|
||||||
echo " -d: Build deps only"
|
echo " -d: Build deps only"
|
||||||
echo " -a: Set ARCHITECTURE (arm64 or x86_64)"
|
echo " -a: Set ARCHITECTURE (arm64 or x86_64)"
|
||||||
echo " -s: Build slicer only"
|
echo " -s: Build slicer only"
|
||||||
echo " -n: Nightly build"
|
echo " -n: Nightly build"
|
||||||
echo " -t: Specify minimum version of the target platform, default is 11.3"
|
echo " -t: Specify minimum version of the target platform, default is 11.3"
|
||||||
|
echo " -x: Use Ninja CMake generator, default is Xcode"
|
||||||
|
echo " -b: Build without reconfiguring CMake"
|
||||||
|
echo " -c: Set CMake build configuration, default is Release"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$ARCH" ]
|
# Set defaults
|
||||||
then
|
|
||||||
export ARCH=$(uname -m)
|
if [ -z "$ARCH" ]; then
|
||||||
|
ARCH="$(uname -m)"
|
||||||
|
export ARCH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Arch: $ARCH"
|
if [ -z "$BUILD_CONFIG" ]; then
|
||||||
echo "BUILD_TARGET: $BUILD_TARGET"
|
export BUILD_CONFIG="Release"
|
||||||
echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET"
|
fi
|
||||||
|
|
||||||
|
if [ -z "$BUILD_TARGET" ]; then
|
||||||
|
export BUILD_TARGET="all"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$CMAKE_GENERATOR" ]; then
|
||||||
|
export CMAKE_GENERATOR="Xcode"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then
|
||||||
|
export OSX_DEPLOYMENT_TARGET="11.3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Build params:"
|
||||||
|
echo " - ARCH: $ARCH"
|
||||||
|
echo " - BUILD_CONFIG: $BUILD_CONFIG"
|
||||||
|
echo " - BUILD_TARGET: $BUILD_TARGET"
|
||||||
|
echo " - CMAKE_GENERATOR: $CMAKE_GENERATOR"
|
||||||
|
echo " - OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET"
|
||||||
|
echo
|
||||||
|
|
||||||
# if which -s brew; then
|
# if which -s brew; then
|
||||||
# brew --prefix libiconv
|
# brew --prefix libiconv
|
||||||
# brew --prefix zstd
|
# brew --prefix zstd
|
||||||
|
@ -52,57 +92,121 @@ echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET"
|
||||||
# exit 1
|
# exit 1
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_BUILD_DIR="$PROJECT_DIR/build_$ARCH"
|
||||||
|
DEPS_DIR="$PROJECT_DIR/deps"
|
||||||
|
DEPS_BUILD_DIR="$DEPS_DIR/build_$ARCH"
|
||||||
|
DEPS="$DEPS_BUILD_DIR/OrcaSlicer_dep_$ARCH"
|
||||||
|
|
||||||
WD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
# Fix for Multi-config generators
|
||||||
cd $WD/deps
|
if [ "$CMAKE_GENERATOR" == "Xcode" ]; then
|
||||||
mkdir -p build_$ARCH
|
export BUILD_DIR_CONFIG_SUBDIR="$BUILD_CONFIG/"
|
||||||
cd build_$ARCH
|
else
|
||||||
DEPS=$PWD/OrcaSlicer_dep_$ARCH
|
export BUILD_DIR_CONFIG_SUBDIR=""
|
||||||
mkdir -p $DEPS
|
|
||||||
if [ "slicer." != $BUILD_TARGET. ];
|
|
||||||
then
|
|
||||||
echo "building deps..."
|
|
||||||
echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}"
|
|
||||||
cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}
|
|
||||||
cmake --build . --config Release --target deps
|
|
||||||
if [ "1." == "$PACK_DEPS". ];
|
|
||||||
then
|
|
||||||
tar -zcvf OrcaSlicer_dep_mac_${ARCH}_$(date +"%Y%m%d").tar.gz OrcaSlicer_dep_$ARCH
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
function build_deps() {
|
||||||
|
echo "Building deps..."
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
mkdir -p "$DEPS"
|
||||||
|
cd "$DEPS_BUILD_DIR"
|
||||||
|
if [ "1." != "$BUILD_ONLY". ]; then
|
||||||
|
cmake .. \
|
||||||
|
-DDESTDIR="$DEPS" \
|
||||||
|
-DOPENSSL_ARCH="darwin64-${ARCH}-cc" \
|
||||||
|
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES:STRING="${ARCH}" \
|
||||||
|
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
|
||||||
|
fi
|
||||||
|
cmake --build . --config "$BUILD_CONFIG" --target deps
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if [ "deps." == "$BUILD_TARGET". ];
|
function pack_deps() {
|
||||||
then
|
echo "Packing deps..."
|
||||||
exit 0
|
(
|
||||||
|
set -x
|
||||||
|
mkdir -p "$DEPS"
|
||||||
|
cd "$DEPS_BUILD_DIR"
|
||||||
|
tar -zcvf "OrcaSlicer_dep_mac_${ARCH}_$(date +"%Y%m%d").tar.gz" "OrcaSlicer_dep_$ARCH"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_slicer() {
|
||||||
|
echo "Building slicer..."
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
mkdir -p "$PROJECT_BUILD_DIR"
|
||||||
|
cd "$PROJECT_BUILD_DIR"
|
||||||
|
if [ "1." != "$BUILD_ONLY". ]; then
|
||||||
|
cmake .. \
|
||||||
|
-DBBL_RELEASE_TO_PUBLIC=1 \
|
||||||
|
-DCMAKE_PREFIX_PATH="$DEPS/usr/local" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" \
|
||||||
|
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
||||||
|
-DCMAKE_MACOSX_RPATH=ON \
|
||||||
|
-DCMAKE_INSTALL_RPATH="${DEPS}/usr/local" \
|
||||||
|
-DCMAKE_MACOSX_BUNDLE=ON \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES="${ARCH}" \
|
||||||
|
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
|
||||||
|
fi
|
||||||
|
cmake --build . --config "$BUILD_CONFIG" --target all
|
||||||
|
)
|
||||||
|
|
||||||
|
echo "Verify localization with gettext..."
|
||||||
|
(
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
./run_gettext.sh
|
||||||
|
# ./run_gettext.sh --full "$PROJECT_BUILD_DIR" "$BUILD_DIR_CONFIG_SUBDIR"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo "Fix macOS app package..."
|
||||||
|
(
|
||||||
|
cd "$PROJECT_BUILD_DIR"
|
||||||
|
mkdir -p OrcaSlicer
|
||||||
|
cd OrcaSlicer
|
||||||
|
# remove previously built app
|
||||||
|
rm -rf ./OrcaSlicer.app
|
||||||
|
# fully copy newly built app
|
||||||
|
cp -pR "../src$BUILD_DIR_CONFIG_SUBDIR/OrcaSlicer.app" ./OrcaSlicer.app
|
||||||
|
# fix resources
|
||||||
|
resources_path=$(readlink ./OrcaSlicer.app/Contents/Resources)
|
||||||
|
rm ./OrcaSlicer.app/Contents/Resources
|
||||||
|
cp -R "$resources_path" ./OrcaSlicer.app/Contents/Resources
|
||||||
|
# delete .DS_Store file
|
||||||
|
find ./OrcaSlicer.app/ -name '.DS_Store' -delete
|
||||||
|
)
|
||||||
|
|
||||||
|
# extract version
|
||||||
|
# export ver=$(grep '^#define SoftFever_VERSION' ../src/libslic3r/libslic3r_version.h | cut -d ' ' -f3)
|
||||||
|
# ver="_V${ver//\"}"
|
||||||
|
# echo $PWD
|
||||||
|
# if [ "1." != "$NIGHTLY_BUILD". ];
|
||||||
|
# then
|
||||||
|
# ver=${ver}_dev
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# zip -FSr OrcaSlicer${ver}_Mac_${ARCH}.zip OrcaSlicer.app
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${BUILD_TARGET}" in
|
||||||
|
all)
|
||||||
|
build_deps
|
||||||
|
build_slicer
|
||||||
|
;;
|
||||||
|
deps)
|
||||||
|
build_deps
|
||||||
|
;;
|
||||||
|
slicer)
|
||||||
|
build_slicer
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown target: $BUILD_TARGET. Available targets: deps, slicer, all."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "1." == "$PACK_DEPS". ]; then
|
||||||
|
pack_deps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd $WD
|
|
||||||
mkdir -p build_$ARCH
|
|
||||||
cd build_$ARCH
|
|
||||||
echo "building slicer..."
|
|
||||||
cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}
|
|
||||||
cmake --build . --config Release --target ALL_BUILD
|
|
||||||
cd ..
|
|
||||||
./run_gettext.sh
|
|
||||||
cd build_$ARCH
|
|
||||||
mkdir -p OrcaSlicer
|
|
||||||
cd OrcaSlicer
|
|
||||||
rm -r ./OrcaSlicer.app
|
|
||||||
cp -pR ../src/Release/OrcaSlicer.app ./OrcaSlicer.app
|
|
||||||
resources_path=$(readlink ./OrcaSlicer.app/Contents/Resources)
|
|
||||||
rm ./OrcaSlicer.app/Contents/Resources
|
|
||||||
cp -R $resources_path ./OrcaSlicer.app/Contents/Resources
|
|
||||||
# delete .DS_Store file
|
|
||||||
find ./OrcaSlicer.app/ -name '.DS_Store' -delete
|
|
||||||
# extract version
|
|
||||||
# export ver=$(grep '^#define SoftFever_VERSION' ../src/libslic3r/libslic3r_version.h | cut -d ' ' -f3)
|
|
||||||
# ver="_V${ver//\"}"
|
|
||||||
# echo $PWD
|
|
||||||
# if [ "1." != "$NIGHTLY_BUILD". ];
|
|
||||||
# then
|
|
||||||
# ver=${ver}_dev
|
|
||||||
# fi
|
|
||||||
|
|
||||||
|
|
||||||
# zip -FSr OrcaSlicer${ver}_Mac_${ARCH}.zip OrcaSlicer.app
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
FULL_MODE=false
|
FULL_MODE=false
|
||||||
for arg in "$@"
|
for arg in "$@"
|
||||||
do
|
do
|
||||||
if [ "$arg" == "--full" ]; then
|
if [ "$arg" = "--full" ]; then
|
||||||
FULL_MODE=true
|
FULL_MODE=true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -19,7 +19,7 @@ if $FULL_MODE; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo $PWD
|
echo "$0: working dir = $PWD"
|
||||||
pot_file="./localization/i18n/OrcaSlicer.pot"
|
pot_file="./localization/i18n/OrcaSlicer.pot"
|
||||||
for dir in ./localization/i18n/*/
|
for dir in ./localization/i18n/*/
|
||||||
do
|
do
|
||||||
|
@ -28,10 +28,10 @@ do
|
||||||
|
|
||||||
if [ -f "$dir/OrcaSlicer_${lang}.po" ]; then
|
if [ -f "$dir/OrcaSlicer_${lang}.po" ]; then
|
||||||
if $FULL_MODE; then
|
if $FULL_MODE; then
|
||||||
msgmerge -N -o $dir/OrcaSlicer_${lang}.po $dir/OrcaSlicer_${lang}.po $pot_file
|
msgmerge -N -o "$dir/OrcaSlicer_${lang}.po" "$dir/OrcaSlicer_${lang}.po" "$pot_file"
|
||||||
fi
|
fi
|
||||||
mkdir -p ./resources/i18n/${lang}/
|
mkdir -p "resources/i18n/${lang}"
|
||||||
msgfmt --check-format -o ./resources/i18n/${lang}/OrcaSlicer.mo $dir/OrcaSlicer_${lang}.po
|
msgfmt --check-format -o "resources/i18n/${lang}/OrcaSlicer.mo" "$dir/OrcaSlicer_${lang}.po"
|
||||||
# Check the exit status of the msgfmt command
|
# Check the exit status of the msgfmt command
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Error encountered with msgfmt command for language ${lang}."
|
echo "Error encountered with msgfmt command for language ${lang}."
|
||||||
|
|
|
@ -249,7 +249,11 @@ else ()
|
||||||
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/../resources")
|
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/../resources")
|
||||||
endif ()
|
endif ()
|
||||||
if (CMAKE_MACOSX_BUNDLE)
|
if (CMAKE_MACOSX_BUNDLE)
|
||||||
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/OrcaSlicer.app/Contents/Resources")
|
if (XCODE)
|
||||||
|
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/OrcaSlicer.app/Contents/Resources")
|
||||||
|
else()
|
||||||
|
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/OrcaSlicer.app/Contents/Resources")
|
||||||
|
endif()
|
||||||
set(MACOSX_BUNDLE_ICON_FILE Icon.icns)
|
set(MACOSX_BUNDLE_ICON_FILE Icon.icns)
|
||||||
set(MACOSX_BUNDLE_BUNDLE_NAME "OrcaSlicer")
|
set(MACOSX_BUNDLE_BUNDLE_NAME "OrcaSlicer")
|
||||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${SoftFever_VERSION})
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${SoftFever_VERSION})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue