From ff594715b8347e8d5d6a9f60e48ec7b170661962 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 9 Aug 2021 16:46:57 +0200 Subject: Build: macOS library upgrade fixes * Revert back to OpenMP 9.0.1 due to bug causing cloth physics test to fail. * Skip flex build on macOS to avoid link error, only reason we build this is due to old flex version on Linux CentOS 7. * Fix PNG cmake argument that expects lowercase on instead of ON. Ref T90507, T88438 --- build_files/build_environment/CMakeLists.txt | 2 +- build_files/build_environment/cmake/ispc.cmake | 6 +++--- build_files/build_environment/cmake/openmp.cmake | 6 ++++++ build_files/build_environment/cmake/osl.cmake | 2 +- build_files/build_environment/cmake/png.cmake | 2 +- build_files/build_environment/cmake/versions.cmake | 14 ++++++++++--- build_files/build_environment/patches/openmp.diff | 23 ++++++++++++++++++++++ 7 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 build_files/build_environment/patches/openmp.diff diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 3a9574b4b2a..af1653de59a 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -84,7 +84,7 @@ include(cmake/openimageio.cmake) include(cmake/tiff.cmake) if(WIN32) include(cmake/flexbison.cmake) -else() +elseif(UNIX AND NOT APPLE) include(cmake/flex.cmake) endif() include(cmake/osl.cmake) diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake index 93fc9dc4846..b1cd2cea0c7 100644 --- a/build_files/build_environment/cmake/ispc.cmake +++ b/build_files/build_environment/cmake/ispc.cmake @@ -29,13 +29,13 @@ elseif(APPLE) if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64") set(ISPC_EXTRA_ARGS_APPLE -DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison - -DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex + -DFLEX_EXECUTABLE=/opt/homebrew/opt/flex/bin/flex -DARM_ENABLED=On ) else() set(ISPC_EXTRA_ARGS_APPLE -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison - -DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex + -DFLEX_EXECUTABLE=/usr/local/opt/flex/bin/flex -DARM_ENABLED=Off ) endif() @@ -84,7 +84,7 @@ if(WIN32) external_ispc external_flexbison ) -else() +elseif(UNIX AND NOT APPLE) add_dependencies( external_ispc external_flex diff --git a/build_files/build_environment/cmake/openmp.cmake b/build_files/build_environment/cmake/openmp.cmake index 0e5323ca513..d4d5e69a5ad 100644 --- a/build_files/build_environment/cmake/openmp.cmake +++ b/build_files/build_environment/cmake/openmp.cmake @@ -16,12 +16,18 @@ # # ***** END GPL LICENSE BLOCK ***** +if(APPLE) + set(OPENMP_PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openmp/src/external_openmp < ${PATCH_DIR}/openmp.diff) +else() + set(OPENMP_PATCH_COMMAND) +endif() ExternalProject_Add(external_openmp URL file://${PACKAGE_DIR}/${OPENMP_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${OPENMP_HASH_TYPE}=${OPENMP_HASH} PREFIX ${BUILD_DIR}/openmp + PATCH_COMMAND ${OPENMP_PATCH_COMMAND} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS} INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id @rpath/libomp.dylib runtime/src/libomp.dylib && make install INSTALL_DIR ${LIBDIR}/openmp diff --git a/build_files/build_environment/cmake/osl.cmake b/build_files/build_environment/cmake/osl.cmake index 05aedb1f085..c20bf68c0ef 100644 --- a/build_files/build_environment/cmake/osl.cmake +++ b/build_files/build_environment/cmake/osl.cmake @@ -96,7 +96,7 @@ if(WIN32) external_osl external_flexbison ) -else() +elseif(UNIX AND NOT APPLE) add_dependencies( external_osl external_flex diff --git a/build_files/build_environment/cmake/png.cmake b/build_files/build_environment/cmake/png.cmake index 458d3a1fd98..3fc53b238c2 100644 --- a/build_files/build_environment/cmake/png.cmake +++ b/build_files/build_environment/cmake/png.cmake @@ -23,7 +23,7 @@ set(PNG_EXTRA_ARGS ) if(BLENDER_PLATFORM_ARM) - set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=ON -DCMAKE_SYSTEM_PROCESSOR="aarch64") + set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=on -DCMAKE_SYSTEM_PROCESSOR="aarch64") endif() ExternalProject_Add(external_png diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index bc220c596c1..d1675bdddfd 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -158,10 +158,18 @@ set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0) set(LLVM_HASH_TYPE MD5) set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz) -set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz) -set(OPENMP_HASH ac48ce3e4582ccb82f81ab59eb3fc9dc) +if(APPLE) + # Cloth physics test is crashing due to this bug: + # https://bugs.llvm.org/show_bug.cgi?id=50579 + set(OPENMP_VERSION 9.0.1) + set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf) +else() + set(OPENMP_VERSION ${LLVM_VERSION}) + set(OPENMP_HASH ac48ce3e4582ccb82f81ab59eb3fc9dc) +endif() +set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${OPENMP_VERSION}/openmp-${OPENMP_VERSION}.src.tar.xz) set(OPENMP_HASH_TYPE MD5) -set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz) +set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz) set(OPENIMAGEIO_VERSION 2.2.15.1) set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz) diff --git a/build_files/build_environment/patches/openmp.diff b/build_files/build_environment/patches/openmp.diff new file mode 100644 index 00000000000..201ab5c7713 --- /dev/null +++ b/build_files/build_environment/patches/openmp.diff @@ -0,0 +1,23 @@ +diff --git a/runtime/src/z_Linux_asm.S b/runtime/src/z_Linux_asm.S +index 0d8885e..42aa5ad 100644 +--- a/runtime/src/z_Linux_asm.S ++++ b/runtime/src/z_Linux_asm.S +@@ -1540,10 +1540,12 @@ __kmp_unnamed_critical_addr: + .comm .gomp_critical_user_,32,8 + .data + .align 8 +- .global __kmp_unnamed_critical_addr +-__kmp_unnamed_critical_addr: ++ .global ___kmp_unnamed_critical_addr ++___kmp_unnamed_critical_addr: + .8byte .gomp_critical_user_ +- .size __kmp_unnamed_critical_addr,8 ++# if !(KMP_OS_DARWIN) ++ .size ___kmp_unnamed_critical_addr,8 ++# endif + #endif /* KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 */ + + #if KMP_OS_LINUX + + + -- cgit v1.2.3