Add support for building MacOS fat binaries

* Fix cross compiling for GMP on Mac
* Fix Apple silicon cross-compile for libcurl
* Fix OpenEXR cross compile for apple silicon
* Patch to cross compile libpng for Apple Silicon
* Fix comment
supermerill:
* Test new BuildMacOS.sh script
* limits macos-arm new command to macos.
* add debug to BuildMacos script (like for linux)
This commit is contained in:
Clayton O'Neill 2021-11-06 09:47:50 -04:00 committed by supermerill
parent 9e4b73f081
commit 45c8c3722f
12 changed files with 311 additions and 126 deletions

View File

@ -8,7 +8,7 @@ on:
jobs:
build:
runs-on: macos-latest
runs-on: macos-10.15
steps:
- uses: actions/checkout@v2

28
.github/workflows/ccpp_mac_arm.yml vendored Normal file
View File

@ -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

View File

@ -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

View File

@ -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 <identity> 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

View File

@ -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

19
deps/CMakeLists.txt vendored
View File

@ -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 ";" "$<SEMICOLON>" 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"

20
deps/GMP/GMP.cmake vendored
View File

@ -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

View File

@ -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 ()

40
deps/PNG/PNG.cmake vendored
View File

@ -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)

65
deps/PNG/macos-arm64.patch vendored Normal file
View File

@ -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")

32
deps/deps-macos.cmake vendored
View File

@ -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)
add_dependencies(dep_openvdb dep_boost)

View File

@ -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
)