mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 12:41:20 -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' | ||||
|         working-directory: ${{ github.workspace }} | ||||
|         run: | | ||||
|             brew install cmake git gettext automake texinfo | ||||
|             brew install cmake git gettext automake texinfo ninja | ||||
|             brew list | ||||
|             mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }} | ||||
|             mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }} | ||||
|             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 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								.github/workflows/build_orca.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/build_orca.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -75,7 +75,7 @@ jobs: | |||
|       - name: Install tools mac | ||||
|         if: inputs.os == 'macos-12' | ||||
|         run: | | ||||
|           brew install cmake git gettext tree | ||||
|           brew install cmake git gettext tree ninja | ||||
|           brew list | ||||
|           mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}} | ||||
|           mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}} | ||||
|  | @ -85,7 +85,7 @@ jobs: | |||
|         if: inputs.os == 'macos-12' | ||||
|         working-directory: ${{ github.workspace }} | ||||
|         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 | ||||
|       - name: Sign app and notary | ||||
|  |  | |||
|  | @ -1,7 +1,10 @@ | |||
| #!/bin/sh | ||||
| #!/bin/bash | ||||
| 
 | ||||
| while getopts ":a:sdpt:hn" opt; do | ||||
|   case ${opt} in | ||||
| set -e | ||||
| set -o pipefail | ||||
| 
 | ||||
| while getopts ":dpa:snt:xbc:h" opt; do | ||||
|   case "${opt}" in | ||||
|     d ) | ||||
|         export BUILD_TARGET="deps" | ||||
|         ;; | ||||
|  | @ -20,25 +23,62 @@ while getopts ":a:sdpt:hn" opt; do | |||
|     t ) | ||||
|         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]" | ||||
|         echo "   -d: Build deps only" | ||||
|         echo "   -a: Set ARCHITECTURE (arm64 or x86_64)" | ||||
|         echo "   -s: Build slicer only" | ||||
|         echo "   -n: Nightly build" | ||||
|         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 | ||||
|         ;; | ||||
|     * ) | ||||
|         ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| if [ -z "$ARCH" ] | ||||
| then | ||||
|   export ARCH=$(uname -m) | ||||
| # Set defaults | ||||
| 
 | ||||
| if [ -z "$ARCH" ]; then | ||||
|   ARCH="$(uname -m)" | ||||
|   export ARCH | ||||
| fi | ||||
| 
 | ||||
| echo "Arch: $ARCH" | ||||
| echo "BUILD_TARGET: $BUILD_TARGET" | ||||
| echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET" | ||||
| if [ -z "$BUILD_CONFIG" ]; then | ||||
|   export BUILD_CONFIG="Release" | ||||
| 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 | ||||
| # 	brew --prefix libiconv | ||||
| # 	brew --prefix zstd | ||||
|  | @ -52,57 +92,121 @@ echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET" | |||
| # 	exit 1 | ||||
| # 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)" | ||||
| cd $WD/deps | ||||
| mkdir -p build_$ARCH | ||||
| cd build_$ARCH | ||||
| DEPS=$PWD/OrcaSlicer_dep_$ARCH | ||||
| 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 | ||||
| # Fix for Multi-config generators | ||||
| if [ "$CMAKE_GENERATOR" == "Xcode" ]; then | ||||
|     export BUILD_DIR_CONFIG_SUBDIR="$BUILD_CONFIG/" | ||||
| else | ||||
|     export BUILD_DIR_CONFIG_SUBDIR="" | ||||
| 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". ]; | ||||
| then | ||||
|     exit 0 | ||||
| function pack_deps() { | ||||
|     echo "Packing deps..." | ||||
|     ( | ||||
|         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 | ||||
| 
 | ||||
| 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 | ||||
| for arg in "$@" | ||||
| do | ||||
|     if [ "$arg" == "--full" ]; then | ||||
|     if [ "$arg" = "--full" ]; then | ||||
|         FULL_MODE=true | ||||
|     fi | ||||
| done | ||||
|  | @ -19,7 +19,7 @@ if $FULL_MODE; then | |||
| fi | ||||
| 
 | ||||
| 
 | ||||
| echo $PWD | ||||
| echo "$0: working dir = $PWD" | ||||
| pot_file="./localization/i18n/OrcaSlicer.pot" | ||||
| for dir in ./localization/i18n/*/ | ||||
| do | ||||
|  | @ -28,10 +28,10 @@ do | |||
| 
 | ||||
|     if [ -f "$dir/OrcaSlicer_${lang}.po" ]; then | ||||
|         if $FULL_MODE; then | ||||
|             msgmerge -N -o $dir/OrcaSlicer_${lang}.po $dir/OrcaSlicer_${lang}.po $pot_file | ||||
|          fi | ||||
|         mkdir -p ./resources/i18n/${lang}/ | ||||
|         msgfmt --check-format -o ./resources/i18n/${lang}/OrcaSlicer.mo $dir/OrcaSlicer_${lang}.po | ||||
|             msgmerge -N -o "$dir/OrcaSlicer_${lang}.po" "$dir/OrcaSlicer_${lang}.po" "$pot_file" | ||||
|         fi | ||||
|         mkdir -p "resources/i18n/${lang}" | ||||
|         msgfmt --check-format -o "resources/i18n/${lang}/OrcaSlicer.mo" "$dir/OrcaSlicer_${lang}.po" | ||||
|         # Check the exit status of the msgfmt command | ||||
|         if [ $? -ne 0 ]; then | ||||
|             echo "Error encountered with msgfmt command for language ${lang}." | ||||
|  |  | |||
|  | @ -249,7 +249,11 @@ else () | |||
|         set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/../resources") | ||||
|     endif () | ||||
|     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_BUNDLE_NAME "OrcaSlicer") | ||||
|         set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${SoftFever_VERSION}) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dzmitry Neviadomski
						Dzmitry Neviadomski