diff --git a/.github/workflows/ccpp_mac.yml b/.github/workflows/ccpp_mac.yml index 9f64ec4fc..069f81226 100644 --- a/.github/workflows/ccpp_mac.yml +++ b/.github/workflows/ccpp_mac.yml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: macos-latest + runs-on: macos-10.15 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/ccpp_mac_arm.yml b/.github/workflows/ccpp_mac_arm.yml new file mode 100644 index 000000000..4c2ec279c --- /dev/null +++ b/.github/workflows/ccpp_mac_arm.yml @@ -0,0 +1,28 @@ +name: C/C++ debug arm macos + +on: + push: + branches: + - Nigthly + +jobs: + build: + + runs-on: macos-11 + + steps: + - uses: actions/checkout@v2 + with: + ref: 'debug_macos' + - name: build deps & slicer + run: ./BuildMacOS.sh -ia + - name: Upload artifact + uses: actions/upload-artifact@v1.0.0 + with: + name: nightly_macos_arm_debug.dmg + path: build/${{ github.event.repository.name }}.dmg + - name: Upload artifact + uses: actions/upload-artifact@v1.0.0 + with: + name: nightly_arm_macos.tar + path: build/${{ github.event.repository.name }}.tar diff --git a/.github/workflows/ccpp_mac_arm_debug.yml b/.github/workflows/ccpp_mac_arm_debug.yml new file mode 100644 index 000000000..a1f7d7cd4 --- /dev/null +++ b/.github/workflows/ccpp_mac_arm_debug.yml @@ -0,0 +1,31 @@ +name: C/C++ debug arm macos + +on: + push: + branches: + - debug_macos + +jobs: + build: + + runs-on: macos-11 + + steps: + - uses: actions/checkout@v2 + with: + ref: 'debug_macos' + - name: build deps & slicer + run: ./BuildMacOS.sh -bia + - name: ls build + working-directory: ./build + run: ls + - name: Upload artifact + uses: actions/upload-artifact@v1.0.0 + with: + name: nightly_macos_arm_debug.dmg + path: build/${{ github.event.repository.name }}.dmg + - name: Upload artifact + uses: actions/upload-artifact@v1.0.0 + with: + name: nightly_arm_macos.tar + path: build/${{ github.event.repository.name }}.tar diff --git a/.github/workflows/ccpp_mac_debug.yml b/.github/workflows/ccpp_mac_debug.yml index e16b5cdf2..007dd5fde 100644 --- a/.github/workflows/ccpp_mac_debug.yml +++ b/.github/workflows/ccpp_mac_debug.yml @@ -10,104 +10,22 @@ jobs: runs-on: macos-latest - env: - EXEC_NAME: "${{ github.event.repository.name }}" - DBL_NAME: "${{ github.event.repository.name }}/${{ github.event.repository.name }}" steps: - uses: actions/checkout@v2 with: ref: 'debug_macos' - - name: update submodule profiles - working-directory: ./resources/profiles - run: git submodule update --init - - id: lowercase_repo - uses: ASzc/change-string-case-action@v1 - with: - string: ${{ github.event.repository.name }} - - name: set exec name - if: ${{ github.event.repository.name != 'Slic3r' }} - uses: allenevans/set-env@v2.0.0 - with: - EXEC_NAME: "${{ steps.lowercase_repo.outputs.lowercase }}" - - name: change date in version - run: | - sed "s/+UNKNOWN/_$(date '+%F')/" version.inc > version.date.inc - mv version.date.inc version.inc - - name: mkdir in deps - run: mkdir deps/build - - name: cmake deps - working-directory: ./deps/build - run: cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" - - name: make deps - working-directory: ./deps/build - run: make - - name: ls libs - working-directory: ./deps/build - run: ls ./destdir/usr/local/lib - - name: rename wxscintilla - working-directory: ./deps/build/destdir/usr/local/lib - run: cp libwxscintilla-3.1.a libwx_osx_cocoau_scintilla-3.1.a - - name: ls libs - working-directory: ./deps/build - run: ls ./destdir/usr/local/lib - - name: clean deps - working-directory: ./deps/build - run: rm -rf dep_* - - name: mkdir build - run: mkdir build - - name: cmake + - name: build deps & slicer + run: ./BuildMacOS.sh -bi + - name: tar the pack working-directory: ./build - run: cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" -DSLIC3R_STATIC=1 - - name: make ${{ github.event.repository.name }} - working-directory: ./build - run: make Slic3r - - name: make .mo - working-directory: ./build - run: make gettext_po_to_mo - - name: update Info.plist - working-directory: ./build/src - run: sed "s/+UNKNOWN/_$(date '+%F')/" Info.plist >Info.date.plist - - name: create directory and copy into it - working-directory: ./build - run: | - mkdir pack - mkdir pack/${{ github.event.repository.name }} - mkdir pack/${{ env.DBL_NAME }}.app - mkdir pack/${{ env.DBL_NAME }}.app/Contents - mkdir pack/${{ env.DBL_NAME }}.app/Contents/_CodeSignature - mkdir pack/${{ env.DBL_NAME }}.app/Contents/Frameworks - mkdir pack/${{ env.DBL_NAME }}.app/Contents/MacOS - - name: copy Resources - working-directory: ./build - run: | - cp -Rf ../resources pack/${{ env.DBL_NAME }}.app/Contents/Resources - cp pack/${{ env.DBL_NAME }}.app/Contents/Resources/icons/${{ github.event.repository.name }}.icns pack/${{ github.event.repository.name }}/${{ github.event.repository.name }}.app/Contents/resources/${{ github.event.repository.name }}.icns - cp src/Info.date.plist pack/${{ github.event.repository.name }}/${{ github.event.repository.name }}.app/Contents/Info.plist - echo -n -e 'APPL????\x0a' > PkgInfo - cp PkgInfo pack/${{ env.DBL_NAME }}.app/Contents/PkgInfo -# echo -n -e '\xff\xfeAPPL\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x0a\x00' > PkgInfo - - name: copy bin and do not let it lower case - working-directory: ./build - run: | - cp -f src/${{ env.EXEC_NAME }} pack/${{ env.DBL_NAME }}.app/Contents/MacOS/${{ github.event.repository.name }} - chmod u+x pack/${{ env.DBL_NAME }}.app/Contents/MacOS/${{ github.event.repository.name }} - tar -cvf ${{ github.event.repository.name }}.tar pack/${{ github.event.repository.name }} - - name: create dmg - working-directory: ./build - run: | - hdiutil create -ov -fs HFS+ -volname "${{ github.event.repository.name }}" -srcfolder "pack/${{ github.event.repository.name }}" temp.dmg - hdiutil convert temp.dmg -format UDZO -o ${{ github.event.repository.name }}.dmg -# - name: signing Resources (creating CodeResources inside _CodeSignature) -# working-directory: . -# run: codesign -s Resources -# maybe i should just try to do that on a separate pc and copy the file here, more secure as a signing process. - - name: Upload artifact - uses: actions/upload-artifact@v1.0.0 - with: - name: nightly_macos.tar - path: build/${{ github.event.repository.name }}.tar + run: ls - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: nightly_macos_debug.dmg path: build/${{ github.event.repository.name }}.dmg + - name: Upload artifact + uses: actions/upload-artifact@v1.0.0 + with: + name: nightly_macos.tar + path: build/${{ github.event.repository.name }}.tar diff --git a/BuildMacOS.sh b/BuildMacOS.sh index 7c7da1b72..6442c0d61 100755 --- a/BuildMacOS.sh +++ b/BuildMacOS.sh @@ -3,6 +3,7 @@ export ROOT=`pwd` export NCORES=`sysctl -n hw.ncpu` export CMAKE_INSTALLED=`which cmake` +#export ARCH=$(uname -m) # Check if CMake is installed if [[ -z "$CMAKE_INSTALLED" ]] @@ -11,18 +12,32 @@ then exit -1 fi -while getopts ":ih" opt; do +while getopts ":iaxbh" opt; do case ${opt} in i ) export BUILD_IMAGE="1" ;; + a ) + export BUILD_ARCH="arm64" + ;; + x ) + export BUILD_ARCH="x86_64" + ;; + b ) + export BUILD_DEBUG="1" + ;; h ) echo "Usage: ./BuildMacOS.sh [-i]" echo " -i: Generate DMG image (optional)" + echo " -a: Build for arm64 (Apple Silicon)" + echo " -x: Build for x86_64 (Intel)" + echo " -b: Build with debug symbols" exit 0 ;; esac done +echo "Build architecture: ${BUILD_ARCH}" + # mkdir build if [ ! -d "build" ] then @@ -35,7 +50,7 @@ echo -n "[1/9] Updating submodules..." pushd resources/profiles git submodule update --init popd -} > $ROOT/build/Build.log # Capture all command output +} #> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[2/9] Changing date in version..." @@ -43,7 +58,7 @@ echo -n "[2/9] Changing date in version..." # change date in version sed "s/+UNKNOWN/_$(date '+%F')/" version.inc > version.date.inc mv version.date.inc version.inc -} &> $ROOT/build/Build.log # Capture all command output +} #&> $ROOT/build/Build.log # Capture all command output echo "done" # mkdir in deps @@ -54,17 +69,31 @@ fi echo -n "[3/9] Configuring dependencies..." { + BUILD_ARGS="" + if [[ -n "$BUILD_ARCH" ]] + then + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_OSX_ARCHITECTURES:STRING=${BUILD_ARCH}" + fi + if [[ -n "$BUILD_DEBUG" ]] + then + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" + fi # cmake deps + echo "Cmake command: cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET=\"10.13\" ${BUILD_ARCH} " pushd deps/build - cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" -} &> $ROOT/build/Build.log # Capture all command output + cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" $BUILD_ARGS + echo "ls deps/build:" + ls -al + echo "ls deps/build/dep_GLEW-prefix" + ls -al dep_GLEW-prefix +} #&> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[4/9] Building dependencies..." { # make deps make -j$NCORES -} &> $ROOT/build/Build.log # Capture all command output +} #&> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[5/9] Renaming wxscintilla library..." @@ -72,8 +101,10 @@ echo -n "[5/9] Renaming wxscintilla library..." # rename wxscintilla pushd destdir/usr/local/lib cp libwxscintilla-3.1.a libwx_osx_cocoau_scintilla-3.1.a + echo "ls deps/build/destdir/usr/local/lib" + ls -al popd -} &> $ROOT/build/Build.log # Capture all command output +} #&> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[6/9] Cleaning dependencies..." @@ -81,15 +112,25 @@ echo -n "[6/9] Cleaning dependencies..." # clean deps rm -rf dep_* popd -} &> $ROOT/build/Build.log # Capture all command output +} #&> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[7/9] Configuring Slic3r..." { + BUILD_ARGS="" + if [[ -n "$BUILD_ARCH" ]] + then + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_OSX_ARCHITECTURES=${BUILD_ARCH}" + fi + if [[ -n "$BUILD_DEBUG" ]] + then + BUILD_ARGS="-DCMAKE_BUILD_TYPE=Debug ${BUILD_ARGS}" + fi # cmake pushd build - cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" -DSLIC3R_STATIC=1 -} &> $ROOT/build/Build.log # Capture all command output + echo "Cmake command: cmake .. -DCMAKE_PREFIX_PATH=\"$PWD/../deps/build/destdir/usr/local\" -DCMAKE_OSX_DEPLOYMENT_TARGET=\"10.13\" -DSLIC3R_STATIC=1 ${BUILD_ARGS}" + cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.13" -DSLIC3R_STATIC=1 ${BUILD_ARGS} +} #&> $ROOT/build/Build.log # Capture all command output echo "done" echo -n "[8/9] Building Slic3r..." @@ -99,9 +140,14 @@ echo -n "[8/9] Building Slic3r..." # make .mo make gettext_po_to_mo -} &> $ROOT/build/Build.log # Capture all command output +} #&> $ROOT/build/Build.log # Capture all command output echo "done" - +echo "ls ROOT" +ls $ROOT +echo "ls ROOT/build" +ls $ROOT/build +echo "ls -al ROOT/build/src" +ls -al $ROOT/build/src # Give proper permissions to script chmod 755 $ROOT/build/src/BuildMacOSImage.sh @@ -111,3 +157,5 @@ then else $ROOT/build/src/BuildMacOSImage.sh fi +echo "ls -al ROOT/build" +ls -al $ROOT/build diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 4f7b08a48..603d3615f 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -39,6 +39,21 @@ 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) + if (CMAKE_OSX_ARCHITECTURES AND _arch_idx LESS 0) + set(IS_CROSS_COMPILE TRUE) + 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("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 @@ -61,7 +76,7 @@ function(prusaslicer_add_cmake_project projectname) set(_gen "") set(_build_j "-j${NPROC}") -if (MSVC) + if (MSVC) set(_gen CMAKE_GENERATOR "${DEP_MSVC_GEN}" CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}") set(_build_j "/m") endif () @@ -79,6 +94,7 @@ if (MSVC) -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DBUILD_SHARED_LIBS:BOOL=OFF + ${_cmake_osx_arch} "${_configs_line}" ${DEP_CMAKE_OPTS} ${P_ARGS_CMAKE_ARGS} @@ -181,6 +197,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/GMP/GMP.cmake b/deps/GMP/GMP.cmake index a7fe19355..049e63816 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 diff --git a/deps/MPFR/MPFR.cmake b/deps/MPFR/MPFR.cmake index ddbb178d8..ea52dc402 100644 --- a/deps/MPFR/MPFR.cmake +++ b/deps/MPFR/MPFR.cmake @@ -24,6 +24,7 @@ else () CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local ${_gmp_build_tgt} BUILD_COMMAND make -j INSTALL_COMMAND make install + ${_cmake_args_osx_arch} DEPENDS dep_GMP ) endif () diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index e07afec6d..11357f9ef 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -5,18 +5,36 @@ else () set(_disable_neon_extension "") endif () -prusaslicer_add_cmake_project(PNG - GIT_REPOSITORY https://github.com/glennrp/libpng.git - GIT_TAG v1.6.35 - DEPENDS ${ZLIB_PKG} - CMAKE_ARGS - -DPNG_SHARED=OFF - -DPNG_STATIC=ON - -DPNG_PREFIX=prusaslicer_ - -DPNG_TESTS=OFF - -DDISABLE_DEPENDENCY_TRACKING=OFF - ${_disable_neon_extension} +if(APPLE AND IS_CROSS_COMPILE) +# TODO: check if it doesn't create problem when compiling from arm to x86_64 + prusaslicer_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 () + prusaslicer_add_cmake_project(PNG + GIT_REPOSITORY https://github.com/glennrp/libpng.git + GIT_TAG v1.6.35 + DEPENDS ${ZLIB_PKG} + 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 000000000..468d35685 --- /dev/null +++ b/deps/PNG/macos-arm64.patch @@ -0,0 +1,65 @@ +Based on https://github.com/vespakoen/libpng to work around until +https://github.com/glennrp/libpng/pull/354 is resolved. + +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/deps/deps-macos.cmake b/deps/deps-macos.cmake index c3afdf90f..ea170f608 100644 --- a/deps/deps-macos.cmake +++ b/deps/deps-macos.cmake @@ -15,6 +15,24 @@ set(DEP_CMAKE_OPTS include("deps-unix-common.cmake") +if (IS_CROSS_COMPILE) + if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + set(_build_arch aarch64) + elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64") + set(_build_arch x86_64) + endif() + + if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") + set(_host_arch aarch64) + set(_arch_flags "-arch arm64") + elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64") + set(_host_arch x86_64) + set(_arch_flags "-arch x86_64") + endif() + set(_boost_linkflags "linkflags=${_arch_flags}") + set(_build_tgt --build=${_build_arch}-apple-darwin --host=${_host_arch}-apple-darwin) + set(_env_curl env "CFLAGS=${_arch_flags}") +endif () ExternalProject_Add(dep_boost EXCLUDE_FROM_ALL 1 @@ -33,10 +51,11 @@ ExternalProject_Add(dep_boost variant=release threading=multi boost.locale.icu=off - "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}" + "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}" + ${_boost_linkflags} install INSTALL_COMMAND "" # b2 does that already ) @@ -46,7 +65,8 @@ ExternalProject_Add(dep_libcurl URL "https://curl.haxx.se/download/curl-7.58.0.tar.gz" URL_HASH SHA256=cc245bf9a1a42a45df491501d97d5593392a03f7b4f07b952793518d97666115 BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./configure + CONFIGURE_COMMAND ${_env_curl} ./configure + ${_build_tgt} --enable-static --disable-shared "--with-ssl=${DESTDIR}/usr/local" @@ -87,4 +107,4 @@ ExternalProject_Add(dep_libcurl INSTALL_COMMAND make install "DESTDIR=${DESTDIR}" ) -add_dependencies(dep_openvdb dep_boost) \ No newline at end of file +add_dependencies(dep_openvdb dep_boost) diff --git a/deps/deps-unix-common.cmake b/deps/deps-unix-common.cmake index 46c9f8864..e4c4a824e 100644 --- a/deps/deps-unix-common.cmake +++ b/deps/deps-unix-common.cmake @@ -27,6 +27,7 @@ ExternalProject_Add(dep_tbb -DTBB_BUILD_TESTS=OFF -DCMAKE_CXX_FLAGS=${TBB_MINGW_WORKAROUND} -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + ${_cmake_osx_arch} ${DEP_CMAKE_OPTS} ) @@ -34,7 +35,10 @@ ExternalProject_Add(dep_gtest EXCLUDE_FROM_ALL 1 URL "https://github.com/google/googletest/archive/release-1.8.1.tar.gz" URL_HASH SHA256=9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c - CMAKE_ARGS -DBUILD_GMOCK=OFF ${DEP_CMAKE_OPTS} -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + CMAKE_ARGS + -DBUILD_GMOCK=OFF ${DEP_CMAKE_OPTS} + -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + ${_cmake_osx_arch} ) ExternalProject_Add(dep_cereal @@ -44,6 +48,7 @@ ExternalProject_Add(dep_cereal CMAKE_ARGS -DJUST_INSTALL_CEREAL=on -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + ${_cmake_osx_arch} ${DEP_CMAKE_OPTS} ) @@ -58,6 +63,7 @@ ExternalProject_Add(dep_nlopt -DNLOPT_MATLAB=OFF -DNLOPT_GUILE=OFF -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + ${_cmake_osx_arch} ${DEP_CMAKE_OPTS} ) @@ -70,6 +76,7 @@ ExternalProject_Add(dep_qhull CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local + ${_cmake_osx_arch} ${DEP_CMAKE_OPTS} ) @@ -88,14 +95,30 @@ ExternalProject_Add(dep_blosc -DBUILD_TESTS=OFF -DBUILD_BENCHMARKS=OFF -DPREFER_EXTERNAL_ZLIB=ON + ${_cmake_osx_arch} PATCH_COMMAND ${GIT_EXECUTABLE} reset --hard && git clean -df && ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_SOURCE_DIR}/blosc-mods.patch ) +# 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() +endif() ExternalProject_Add(dep_openexr EXCLUDE_FROM_ALL 1 GIT_REPOSITORY https://github.com/openexr/openexr.git GIT_TAG eae0e337c9f5117e78114fd05f7a415819df413a #v2.4.0 + ${_openxr_list_sep} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local -DBUILD_SHARED_LIBS=OFF @@ -104,6 +127,7 @@ ExternalProject_Add(dep_openexr -DPYILMBASE_ENABLE:BOOL=OFF -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF -DOPENEXR_BUILD_UTILS:BOOL=OFF + ${_cmake_openexr_arch} ) ExternalProject_Add(dep_openvdb @@ -124,6 +148,7 @@ ExternalProject_Add(dep_openvdb -DTBB_STATIC=ON -DOPENVDB_BUILD_VDB_PRINT=ON -DDISABLE_DEPENDENCY_VERSION_CHECKS=ON + ${_cmake_osx_arch} PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} checkout -f -- . && git clean -df && ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_SOURCE_DIR}/openvdb-mods.patch )