diff --git a/.github/workflows/appimage.yml b/.github/workflows/build_linux.yml similarity index 56% rename from .github/workflows/appimage.yml rename to .github/workflows/build_linux.yml index 6c8f104e0d..24bf42d8cc 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/build_linux.yml @@ -1,4 +1,4 @@ -name: BambuStudio-SoftFever +name: Build Linux on: [push, pull_request] @@ -20,13 +20,19 @@ jobs: - name: Fix permissions shell: bash run: sudo chown $USER -R ./ - - name: Build Bambu Studio dependencies using BuildLinux.sh - shell: bash - run: ./BuildLinux.sh -dsr - - name: Build Bambu Studio AppImage using BuildLinux.sh - shell: bash - run: ./BuildLinux.sh -ir - - uses: actions/upload-artifact@v3 + - name: build deps + id: cache_deps + uses: actions/cache@v3 + env: + cache-name: ${{ runner.os }}-cache-bambustudio_deps_x64 with: - name: AppImage - path: './build/BambuStudio_ubu64.AppImage' + path: ${{ github.workspace }}/deps/build/destdir + key: build-${{ env.cache-name }} + + - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + name: build deps + working-directory: ${{ github.workspace }} + continue-on-error: true + run: ./BuildLinux.sh -dsr + + diff --git a/.github/workflows/build_mac_arm64.yml b/.github/workflows/build_mac_arm64.yml new file mode 100644 index 0000000000..c6ad21238a --- /dev/null +++ b/.github/workflows/build_mac_arm64.yml @@ -0,0 +1,51 @@ +name: Build Mac arm64 + +on: [pull_request, push] + +jobs: + build_win64: + name: Build Mac arm64 + runs-on: macos-12 + + steps: + - uses: actions/checkout@v3 + + - name: Install tools + run: | + brew install cmake git gettext zstd + - run: mkdir -p ${{ github.workspace }}/deps/build + # - run: mkdir -p ${{ github.workspace }}/deps/build/BambuStudio_dep + + # - name: build deps + # id: cache_deps + # uses: actions/cache@v3 + # env: + # cache-name: ${{ runner.os }}-cache-bambustudio_deps_arm64 + # with: + # path: ${{ github.workspace }}/deps/build/BambuStudio_dep + # key: build-${{ env.cache-name }} + + # - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + # name: build deps + # working-directory: ${{ github.workspace }} + # continue-on-error: true + # run: ./build_release_macos.sh -d -a arm64 + - name: Download and extract deps + working-directory: ${{ github.workspace }} + run: | + curl -LJO https://github.com/SoftFever/FileSharing/releases/download/2/BambuStudio_dep_arm64.tar.gz + tar -zxvf BambuStudio_dep_arm64.tar.gz -C ${{ github.workspace }}/deps/build + chown -R $(id -u):$(id -g) ${{ github.workspace }}/deps/build/BambuStudio_dep + ls -l ${{ github.workspace }}/deps/build/BambuStudio_dep + rm BambuStudio_dep_arm64.tar.gz + + + - name: Build studio + working-directory: ${{ github.workspace }} + run: ./build_release_macos.sh -s -n -a arm64 + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: BambuStudio-SoftFever_Mac + path: ${{ github.workspace }}/build/BambuStudio-SoftFever/BambuStudio-SoftFever*.zip \ No newline at end of file diff --git a/.github/workflows/build_mac_x64.yml b/.github/workflows/build_mac_x64.yml new file mode 100644 index 0000000000..5c6f567292 --- /dev/null +++ b/.github/workflows/build_mac_x64.yml @@ -0,0 +1,42 @@ +name: Build Mac x64 + +on: [pull_request, push] + +jobs: + build_win64: + name: Build Mac x64 + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + + - name: Install tools + run: | + brew install cmake git gettext zstd + - run: mkdir -p ${{ github.workspace }}/deps/build + - run: mkdir -p ${{ github.workspace }}/deps/build/BambuStudio_dep + + - name: build deps + id: cache_deps + uses: actions/cache@v3 + env: + cache-name: ${{ runner.os }}-cache-bambustudio_deps_x64 + with: + path: ${{ github.workspace }}/deps/build/BambuStudio_dep + key: build-${{ env.cache-name }} + + - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + name: build deps + working-directory: ${{ github.workspace }} + continue-on-error: true + run: ./build_release_macos.sh -d -a x86_64 + + - name: Build studio + working-directory: ${{ github.workspace }} + run: ./build_release_macos.sh -s -n -a x86_64 + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: BambuStudio-SoftFever_Mac + path: ${{ github.workspace }}/build/BambuStudio-SoftFever/BambuStudio-SoftFever*.zip \ No newline at end of file diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml new file mode 100644 index 0000000000..c68ed53bc1 --- /dev/null +++ b/.github/workflows/build_win.yml @@ -0,0 +1,58 @@ +name: Build Win64 + +on: [pull_request,push] + +jobs: + build_win64: + name: Build Win64 + runs-on: windows-2019 + + steps: + - uses: actions/checkout@v3 + - uses: ilammy/msvc-dev-cmd@v1 + # - name: Install perl + # run: | + # choco install strawberryperl + - run: mkdir ${{ github.workspace }}/deps/build + - run: mkdir ${{ github.workspace }}/deps/build/BambuStudio_dep + - name: download deps + shell: powershell + run: '(new-object System.Net.WebClient).DownloadFile("https://github.com/SoftFever/FileSharing/releases/download/2/BambuStudio_dep.zip", "$env:temp\BambuStudio_dep.zip")' + - name: extract deps + working-directory: ${{ github.workspace }}/deps/build + shell: cmd + run: '"C:/Program Files/7-Zip/7z.exe" x %temp%\BambuStudio_dep.zip' + + - run: dir "${{ github.workspace }}\deps\build\BambuStudio_dep" + + # - name: build deps + # id: cache_deps + # uses: actions/cache@v3 + # env: + # cache-name: ${{ runner.os }}-cache-bambustudio_deps + # with: + # path: ${{ github.workspace }}/deps/build/BambuStudio_dep + # key: ${{ runner.os }}-build-${{ env.cache-name }} + + # - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + # name: build deps + # working-directory: ${{ github.workspace }} + # continue-on-error: true + # run: .\build_release.bat deps + + # - run: Get-ChildItem ${{ github.workspace }}/deps/build/ -Exclude BambuStudio_dep | Remove-Item -Recurse -Force + + - name: Build studio + working-directory: ${{ github.workspace }} + run: .\build_release.bat studio + + - name: pack app + working-directory: ${{ github.workspace }}/build + shell: cmd + run: '"C:/Program Files/7-Zip/7z.exe" a -tzip BambuStudio-SoftFever_dev_build.zip ${{ github.workspace }}/build/BambuStudio-SoftFever' + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: BambuStudio-SoftFever_Win64 + path: ${{ github.workspace }}/build/BambuStudio-SoftFever_dev_build.zip \ No newline at end of file diff --git a/build_release.bat b/build_release.bat index a65d66156a..214d23a0fa 100644 --- a/build_release.bat +++ b/build_release.bat @@ -3,12 +3,21 @@ cd deps mkdir build cd build set DEPS=%CD%/BambuStudio_dep -@REM cmake ../ -G "Visual Studio 16 2019" -DDESTDIR="%CD%/BambuStudio_dep" -DCMAKE_BUILD_TYPE=Release -@REM cmake --build . --config Release --target ALL_BUILD -- -m +if "%1"=="studio" ( + GOTO :studio +) +echo "building deps.." +cmake ../ -G "Visual Studio 16 2019" -DDESTDIR="%CD%/BambuStudio_dep" -DCMAKE_BUILD_TYPE=Release +cmake --build . --config Release --target ALL_BUILD -- -m +if "%1"=="deps" exit /b 0 + +:studio +echo "building studio..." cd %WP% mkdir build cd build + cmake .. -G "Visual Studio 16 2019" -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./BambuStudio-SoftFever" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" -@REM cmake --build . --config Release --target ALL_BUILD -- -m -@REM cmake --build . --target install --config Release \ No newline at end of file +cmake --build . --config Release --target ALL_BUILD -- -m +cmake --build . --target install --config Release \ No newline at end of file diff --git a/build_release_macos.sh b/build_release_macos.sh index 93028fc9fd..11aaa306bc 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -1,17 +1,66 @@ #!/bin/sh + +while getopts ":a:sdhn" opt; do + case ${opt} in + d ) + export BUILD_TARGET="deps" + ;; + a ) + export ARCH="$OPTARG" + ;; + s ) + export BUILD_TARGET="studio" + ;; + n ) + export NIGHTLY_BUILD="1" + ;; + h ) echo "Usage: ./build_release_macos.sh [-d]" + echo " -d: Build deps only" + echo " -a: Set ARCHITECTURE (arm64 or x86_64)" + echo " -s: Build studio only" + echo " -n: Nightly build" + exit 0 + ;; + esac +done + +if [ -z "$ARCH" ] +then + export ARCH=$(uname -m) +fi + +echo "Arch: $ARCH" +echo "BUILD_TARGET: $BUILD_TARGET" + +brew --prefix libiconv +brew --prefix zstd +export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/ + WD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd $WD/deps mkdir -p build cd build DEPS=$PWD/BambuStudio_dep mkdir -p $DEPS -cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-$(uname -m)-cc" -DCMAKE_BUILD_TYPE=Release -cmake --build . --config Release --target all +if [ "studio." != $BUILD_TARGET. ]; +then + echo "building deps..." + echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}" + cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} + cmake --build . --config Release --target all +fi + + +if [ "deps." == "$BUILD_TARGET". ]; +then + exit 0 +fi cd $WD mkdir -p build cd build -cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/BambuStudio-SoftFever" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON +echo "building studio..." +cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/BambuStudio-SoftFever" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} cmake --build . --config Release --target ALL_BUILD mkdir -p BambuStudio-SoftFever cd BambuStudio-SoftFever @@ -21,7 +70,14 @@ resources_path=$(readlink ./BambuStudio-SoftFever.app/Contents/Resources) rm ./BambuStudio-SoftFever.app/Contents/Resources cp -R $resources_path ./BambuStudio-SoftFever.app/Contents/Resources # extract version -ver=$(grep '^#define SoftFever_VERSION' ../src/libslic3r/libslic3r_version.h | cut -d ' ' -f3) -ver="${ver//\"}" -zip -FSr BambuStudio-SoftFever_V${ver}_Mac_$(uname -m).zip BambuStudio-SoftFever.app +export ver="_dev" +echo $PWD +if [ "1." != "$NIGHTLY_BUILD". ]; +then + ver=$(grep '^#define SoftFever_VERSION' ../src/libslic3r/libslic3r_version.h | cut -d ' ' -f3) + ver="_V${ver//\"}" +fi + + +zip -FSr BambuStudio-SoftFever${ver}_Mac_${ARCH}.zip BambuStudio-SoftFever.app diff --git a/deps/Blosc/Blosc.cmake b/deps/Blosc/Blosc.cmake index 35fda96e02..bc5aa94a80 100644 --- a/deps/Blosc/Blosc.cmake +++ b/deps/Blosc/Blosc.cmake @@ -6,23 +6,43 @@ else() set(_build_static ON) endif() -bambustudio_add_cmake_project(Blosc - #URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip - #URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9 - URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip - URL_HASH SHA256=dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3 - DEPENDS ${ZLIB_PKG} - # Patching upstream does not work this way with git version 2.28 installed on mac worker - # PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/blosc-mods.patch - CMAKE_ARGS - -DCMAKE_POSITION_INDEPENDENT_CODE=ON - -DBUILD_SHARED=${_build_shared} - -DBUILD_STATIC=${_build_static} - -DBUILD_TESTS=OFF - -DBUILD_BENCHMARKS=OFF - -DPREFER_EXTERNAL_ZLIB=ON -) - +if(IS_CROSS_COMPILE AND APPLE) + bambustudio_add_cmake_project(Blosc + #URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip + #URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9 + URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip + URL_HASH SHA256=dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3 + DEPENDS ${ZLIB_PKG} + # Patching upstream does not work this way with git version 2.28 installed on mac worker + # PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/blosc-mods.patch + CMAKE_ARGS + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DBUILD_SHARED=${_build_shared} + -DBUILD_STATIC=${_build_static} + -DBUILD_TESTS=OFF + -DBUILD_BENCHMARKS=OFF + -DPREFER_EXTERNAL_ZLIB=ON + -DDEACTIVATE_SSE2=ON + -DDEACTIVATE_AVX2=ON + ) +else() + bambustudio_add_cmake_project(Blosc + #URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.17.0.zip + #URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9 + URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip + URL_HASH SHA256=dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3 + DEPENDS ${ZLIB_PKG} + # Patching upstream does not work this way with git version 2.28 installed on mac worker + # PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/blosc-mods.patch + CMAKE_ARGS + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DBUILD_SHARED=${_build_shared} + -DBUILD_STATIC=${_build_static} + -DBUILD_TESTS=OFF + -DBUILD_BENCHMARKS=OFF + -DPREFER_EXTERNAL_ZLIB=ON + ) +endif() if (MSVC) add_debug_dep(dep_Blosc) endif () \ No newline at end of file diff --git a/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index ec8bab799c..94ac30fe36 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -28,9 +28,6 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") elseif (MSVC_VERSION LESS 1930) # 1920-1929 = VS 16.0 (v142 toolset) set(_boost_toolset "msvc-14.2") - elseif (MSVC_VERSION LESS 1940) - # 1930-1939 = VS 17.0 (v143 toolset) - set(_boost_toolset "msvc-14.3") else () message(FATAL_ERROR "Unsupported MSVC version") endif () @@ -70,16 +67,6 @@ include(ProcessorCount) ProcessorCount(NPROC) file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix) -set(_boost_flags "") -if (UNIX) - set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") -elseif(APPLE) - set(_boost_flags - "cflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" - "cxxflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" - "mflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" - "mmflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET}") -endif() set(_boost_variants "") if(CMAKE_BUILD_TYPE) @@ -103,8 +90,38 @@ if (NOT _boost_variants) set(_boost_variants release) endif() +if (IS_CROSS_COMPILE AND APPLE) + if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") + message(STATUS "Compiling Boost for arm64.") + message(STATUS "Compiling Boost with toolset ${_boost_toolset}.") + message(STATUS "Compiling Boost with libs ${_libs}.") + message(STATUS "Compiling Boost with variant ${_boost_variants}.") + message(STATUS "Compiling Boost with _bootstrap_cmd ${_bootstrap_cmd}.") + message(STATUS "_boost_linkflags = ${_boost_linkflags}") + set(_arch_flags "-arch arm64") + set(_boost_linkflags "linkflags=${_arch_flags}") + message(STATUS "_cmake_args_osx_arch = '${_cmake_args_osx_arch}'") + elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64") + message(STATUS "Compiling Boost for x86_64.") + set(_arch_flags "-arch x86_64") + endif() + set(_boost_linkflags "linkflags=${_arch_flags}") +endif () + +set(_boost_flags "") +if(APPLE) + set(_boost_flags + "cflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" + "cxxflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" + "mflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" + "mmflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET}") +elseif (UNIX) + set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") +endif() + set(_build_cmd ${_build_cmd} ${_boost_flags} + ${_boost_linkflags} -j${NPROC} ${_libs} --layout=versioned @@ -120,9 +137,14 @@ set(_build_cmd ${_build_cmd} set(_install_cmd ${_build_cmd} --prefix=${_prefix} install) +if (NOT IS_CROSS_COMPILE OR NOT APPLE OR BUILD_SHARED_LIBS) + message(STATUS "Standard boost build with bootstrap command '${_bootstrap_cmd}'") + message(STATUS "Standard boost build with patch command '${_patch_command}'") + message(STATUS "Standard boost build with build command '${_build_cmd}'") + message(STATUS "Standard boost build with install command '${_install_cmd}'") ExternalProject_Add( dep_Boost - URL "https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz" + URL "https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz" URL_HASH SHA256=aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost CONFIGURE_COMMAND "${_bootstrap_cmd}" @@ -132,7 +154,26 @@ ExternalProject_Add( INSTALL_COMMAND "${_install_cmd}" ) +else() + +ExternalProject_Add( + dep_Boost + URL "https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz" + URL_HASH SHA256=aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost + CONFIGURE_COMMAND ./bootstrap.sh + --with-toolset=clang + --with-libraries=date_time,filesystem,iostreams,locale,log,regex,system,thread + "--prefix=${DESTDIR}/usr/local" +# PATCH_COMMAND ${_patch_command} + BUILD_COMMAND "${_build_cmd}" + BUILD_IN_SOURCE ON + INSTALL_COMMAND "${_install_cmd}" +) +endif() + if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") + message(STATUS "Patch the boost::polygon library with a custom one.") # Patch the boost::polygon library with a custom one. ExternalProject_Add(dep_boost_polygon EXCLUDE_FROM_ALL ON @@ -144,6 +185,7 @@ if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") DEPENDS dep_Boost CONFIGURE_COMMAND "" BUILD_COMMAND "" + ${_cmake_args_osx_arch} INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/dep_boost_polygon-prefix/src/dep_boost_polygon/include/boost/polygon" "${DESTDIR}/usr/local/include/boost/polygon" diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index ad4bafa5cf..ba569ec4c2 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -40,6 +40,25 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF) endif() +set(IS_CROSS_COMPILE FALSE) + +if (APPLE) + set(CMAKE_FIND_FRAMEWORK LAST) + set(CMAKE_FIND_APPBUNDLE LAST) + list(FIND CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR} _arch_idx) + message(STATUS "prusaslicer_add_cmake_project for Apple") + if (CMAKE_OSX_ARCHITECTURES AND _arch_idx LESS 0) + message(STATUS "prusaslicer_add_cmake_project for Apple crosscompiling") + set(IS_CROSS_COMPILE TRUE) + set(CMAKE_CXX_COMPILER_ID "Clang") + string(REPLACE ";" "$" CMAKE_OSX_ARCHS "${CMAKE_OSX_ARCHITECTURES}") + set(_cmake_osx_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS}) + set(_cmake_args_osx_arch CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS}) + message(STATUS "Detect Cross-compilation. Will build for target ${CMAKE_OSX_ARCHS}" ) + endif () +endif () + + # On developer machines, it can be enabled to speed up compilation and suppress warnings coming from IGL. # FIXME: # Enabling this option is not safe. IGL will compile itself with its own version of Eigen while @@ -77,6 +96,7 @@ function(bambustudio_add_cmake_project projectname) set(_build_j "/m") endif () +if (NOT IS_CROSS_COMPILE OR NOT APPLE) ExternalProject_Add( dep_${projectname} EXCLUDE_FROM_ALL ON @@ -92,6 +112,7 @@ function(bambustudio_add_cmake_project projectname) -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} -DBUILD_SHARED_LIBS:BOOL=OFF + ${_cmake_osx_arch} "${_configs_line}" ${DEP_CMAKE_OPTS} ${P_ARGS_CMAKE_ARGS} @@ -99,6 +120,26 @@ function(bambustudio_add_cmake_project projectname) BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j} INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release ) +else() + ExternalProject_Add( + dep_${projectname} + EXCLUDE_FROM_ALL ON + INSTALL_DIR ${DESTDIR}/usr/local + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} + ${_gen} + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local + -DBUILD_SHARED_LIBS:BOOL=OFF + ${_cmake_osx_arch} + "${_configs_line}" + ${DEP_CMAKE_OPTS} + ${P_ARGS_CMAKE_ARGS} + ${P_ARGS_UNPARSED_ARGUMENTS} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release + ) + +endif() endfunction(bambustudio_add_cmake_project) diff --git a/deps/GMP/GMP.cmake b/deps/GMP/GMP.cmake index ae708aa398..94fe60b24a 100644 --- a/deps/GMP/GMP.cmake +++ b/deps/GMP/GMP.cmake @@ -22,10 +22,24 @@ else () if (APPLE) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") - set(_gmp_build_tgt aarch64) + set(_gmp_build_arch aarch64) + else () + set(_gmp_build_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if (IS_CROSS_COMPILE) + if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") + set(_gmp_host_arch aarch64) + set(_gmp_host_arch_flags "-arch arm64") + elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64") + set(_gmp_host_arch x86_64) + set(_gmp_host_arch_flags "-arch x86_64") + endif() + set(_gmp_ccflags "${_gmp_ccflags} ${_gmp_host_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET}") + set(_gmp_build_tgt --build=${_gmp_build_arch}-apple-darwin --host=${_gmp_host_arch}-apple-darwin) + else () + set(_gmp_ccflags "${_gmp_ccflags} -mmacosx-version-min=${DEP_OSX_TARGET}") + set(_gmp_build_tgt "--build=${_gmp_build_arch}-apple-darwin") endif() - set(_gmp_ccflags "${_gmp_ccflags} -mmacosx-version-min=${DEP_OSX_TARGET}") - set(_gmp_build_tgt "--build=${_gmp_build_tgt}-apple-darwin") elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") set(_gmp_ccflags "${_gmp_ccflags} -march=armv7-a") # Works on RPi-4 @@ -51,4 +65,4 @@ else () BUILD_COMMAND make -j INSTALL_COMMAND make install ) -endif () +endif () \ No newline at end of file diff --git a/deps/OpenEXR/OpenEXR.cmake b/deps/OpenEXR/OpenEXR.cmake index 3be96898da..5ffdd1c964 100644 --- a/deps/OpenEXR/OpenEXR.cmake +++ b/deps/OpenEXR/OpenEXR.cmake @@ -1,3 +1,34 @@ +# Check if we're building for arm on x86_64 and just for OpenEXR, build fat +# binaries. We need this because it compiles some code to generate other +# source and we need to be able to run the executables. When we link the +# library, the x86_64 part will be ignored. +if (APPLE AND IS_CROSS_COMPILE) + if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" AND ${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") + set(_openexr_arch arm64^^x86_64) + set(_openxr_list_sep LIST_SEPARATOR ^^) + set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch}) + else() + set(_openexr_arch ${CMAKE_OSX_ARCHITECTURES}) + set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch}) + endif() + ExternalProject_Add(dep_OpenEXR + EXCLUDE_FROM_ALL ON + URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip + URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de + INSTALL_DIR ${DESTDIR}/usr/local + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenEXR + ${_openxr_list_sep} + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local + -DBUILD_SHARED_LIBS:BOOL=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DBUILD_TESTING=OFF + -DPYILMBASE_ENABLE:BOOL=OFF + -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF + -DOPENEXR_BUILD_UTILS:BOOL=OFF + ${_cmake_openexr_arch} + ) +else() bambustudio_add_cmake_project(OpenEXR # GIT_REPOSITORY https://github.com/openexr/openexr.git URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip @@ -11,6 +42,7 @@ bambustudio_add_cmake_project(OpenEXR -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF -DOPENEXR_BUILD_UTILS:BOOL=OFF ) +endif() if (MSVC) add_debug_dep(dep_OpenEXR) diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index 3dca778756..5009317305 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -5,26 +5,43 @@ else () set(_disable_neon_extension "") endif () +if(APPLE AND IS_CROSS_COMPILE) +# TODO: check if it doesn't create problem when compiling from arm to x86_64 + bambustudio_add_cmake_project(PNG + GIT_REPOSITORY https://github.com/glennrp/libpng.git + GIT_TAG v1.6.35 + DEPENDS ${ZLIB_PKG} + PATCH_COMMAND ${GIT_EXECUTABLE} checkout -f -- . && git clean -df && + ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/macos-arm64.patch + CMAKE_ARGS + -DPNG_SHARED=OFF + -DPNG_STATIC=ON + -DPNG_PREFIX=prusaslicer_ + -DPNG_TESTS=OFF + -DDISABLE_DEPENDENCY_TRACKING=OFF + ${_disable_neon_extension} + ) +else () set(_patch_step "") -if (APPLE) - set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch) -endif () - -bambustudio_add_cmake_project(PNG - # GIT_REPOSITORY https://github.com/glennrp/libpng.git - # GIT_TAG v1.6.35 - URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip - URL_HASH SHA256=3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f - DEPENDS ${ZLIB_PKG} - "${_patch_step}" - CMAKE_ARGS - -DPNG_SHARED=OFF - -DPNG_STATIC=ON - -DPNG_PREFIX=prusaslicer_ - -DPNG_TESTS=OFF - -DDISABLE_DEPENDENCY_TRACKING=OFF - ${_disable_neon_extension} + if (APPLE) + set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch) + endif () + bambustudio_add_cmake_project(PNG + # GIT_REPOSITORY https://github.com/glennrp/libpng.git + # GIT_TAG v1.6.35 + URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip + URL_HASH SHA256=3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f + DEPENDS ${ZLIB_PKG} + "${_patch_step}" + CMAKE_ARGS + -DPNG_SHARED=OFF + -DPNG_STATIC=ON + -DPNG_PREFIX=prusaslicer_ + -DPNG_TESTS=OFF + -DDISABLE_DEPENDENCY_TRACKING=OFF + ${_disable_neon_extension} ) +endif() if (MSVC) add_debug_dep(dep_PNG) diff --git a/deps/PNG/macos-arm64.patch b/deps/PNG/macos-arm64.patch new file mode 100644 index 0000000000..ee9d01326b --- /dev/null +++ b/deps/PNG/macos-arm64.patch @@ -0,0 +1,90 @@ +Based on https://github.com/vespakoen/libpng to work around until +https://github.com/glennrp/libpng/pull/354 is resolved. +also added patch from PS2.4 (PNG.pach) in pngrutil.c +--- + CMakeLists.txt | 28 ++++++++++++++++++++-------- + pngrutil.c | 7 ------- + 2 files changed, 20 insertions(+), 15 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4db9bb87d..9099d1edf 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -82,10 +82,22 @@ option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON) + set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names") + set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings") + ++# CMake currently sets CMAKE_SYSTEM_PROCESSOR to one of x86_64 or arm64 on macOS, ++# based upon the OS architecture, not the target architecture. As such, we need ++# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to ++# enable. Note that this will fail if you attempt to build a universal binary in ++# a single cmake invokation. ++if (APPLE AND CMAKE_OSX_ARCHITECTURES) ++ set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES}) ++else() ++ set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) ++endif() ++ ++ + if(PNG_HARDWARE_OPTIMIZATIONS) + # set definitions and sources for arm +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") ++if(TARGET_ARCH MATCHES "^arm" OR ++ TARGET_ARCH MATCHES "^aarch64") + set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) + set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations: + check: (default) use internal checking code; +@@ -114,8 +126,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR + endif() + + # set definitions and sources for powerpc +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" ) ++if(TARGET_ARCH MATCHES "^powerpc*" OR ++ TARGET_ARCH MATCHES "^ppc64*" ) + set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) + set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations: + off: disable the optimizations.") +@@ -138,8 +150,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR + endif() + + # set definitions and sources for intel +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" ) ++if(TARGET_ARCH MATCHES "^i?86" OR ++ TARGET_ARCH MATCHES "^x86_64*" ) + set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) + set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations: + off: disable the optimizations") +@@ -162,8 +174,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR + endif() + + # set definitions and sources for MIPS +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" ) ++if(TARGET_ARCH MATCHES "mipsel*" OR ++ TARGET_ARCH MATCHES "mips64el*" ) + set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) + set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations: + off: disable the optimizations") +diff --git a/pngrutil.c b/pngrutil.c +index 7001f1976..91930f1f2 100644 +--- a/pngrutil.c ++++ b/pngrutil.c +@@ -422,13 +422,6 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner) + png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED; + } + +-#if ZLIB_VERNUM >= 0x1290 && \ +- defined(PNG_SET_OPTION_SUPPORTED) && defined(PNG_IGNORE_ADLER32) +- if (((png_ptr->options >> PNG_IGNORE_ADLER32) & 3) == PNG_OPTION_ON) +- /* Turn off validation of the ADLER32 checksum in IDAT chunks */ +- ret = inflateValidate(&png_ptr->zstream, 0); +-#endif +- + if (ret == Z_OK) + png_ptr->zowner = owner; + +-- +2.33.0.windows.1 diff --git a/deps/TIFF/TIFF.cmake b/deps/TIFF/TIFF.cmake index f820b6a755..bdc91e5464 100644 --- a/deps/TIFF/TIFF.cmake +++ b/deps/TIFF/TIFF.cmake @@ -1,13 +1,32 @@ find_package(OpenGL QUIET REQUIRED) -bambustudio_add_cmake_project(TIFF - URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip - URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32 - DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG - CMAKE_ARGS - -Dlzma:BOOL=OFF - -Dwebp:BOOL=OFF - -Djbig:BOOL=OFF - -Dzstd:BOOL=OFF - -Dpixarlog:BOOL=OFF -) +if (APPLE) + message(STATUS "Compiling TIFF for macos ${CMAKE_SYSTEM_VERSION}.") + bambustudio_add_cmake_project(TIFF + URL https://gitlab.com/libtiff/libtiff/-/archive/v4.3.0/libtiff-v4.3.0.zip + URL_HASH SHA256=4fca1b582c88319f3ad6ecd5b46320eadaf5eb4ef6f6c32d44caaae4a03d0726 + DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG + CMAKE_ARGS + -Dlzma:BOOL=OFF + -Dwebp:BOOL=OFF + -Djbig:BOOL=OFF + -Dzstd:BOOL=OFF + -Dpixarlog:BOOL=OFF + ) +else() + bambustudio_add_cmake_project(TIFF + URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip + URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32 + DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG + CMAKE_ARGS + -Dlzma:BOOL=OFF + -Dwebp:BOOL=OFF + -Djbig:BOOL=OFF + -Dzstd:BOOL=OFF + -Dpixarlog:BOOL=OFF + ) + +endif() + + +