diff options
author | Patrick Mours <pmours@nvidia.com> | 2021-04-20 15:00:05 +0300 |
---|---|---|
committer | Patrick Mours <pmours@nvidia.com> | 2021-04-20 19:45:46 +0300 |
commit | 847579b422507917c4252ecc5c777bf5e0fc6f09 (patch) | |
tree | 6f9def3399bd8c01cb5e45d3e0eeab0406f47cca /build_files | |
parent | f2626f14209e574eb23f115bf84a3452bfb9a89c (diff) |
Add support for building on Linux aarch64
Differential Revision: https://developer.blender.org/D10958
Diffstat (limited to 'build_files')
21 files changed, 813 insertions, 146 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index a3d694b4bc3..fb79eee62be 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -113,7 +113,7 @@ include(cmake/expat.cmake) include(cmake/yamlcpp.cmake) include(cmake/opencolorio.cmake) -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) +if(BLENDER_PLATFORM_ARM) include(cmake/sse2neon.cmake) endif() diff --git a/build_files/build_environment/cmake/boost.cmake b/build_files/build_environment/cmake/boost.cmake index 8b36af7dc41..5170a3a123e 100644 --- a/build_files/build_environment/cmake/boost.cmake +++ b/build_files/build_environment/cmake/boost.cmake @@ -18,6 +18,12 @@ set(BOOST_ADDRESS_MODEL 64) +if(BLENDER_PLATFORM_ARM) + set(BOOST_ARCHITECTURE arm) +else() + set(BOOST_ARCHITECTURE x86) +endif() + if(WIN32) set(BOOST_TOOLSET toolset=msvc-14.1) set(BOOST_COMPILER_STRING -vc141) @@ -29,7 +35,6 @@ if(WIN32) if(BUILD_MODE STREQUAL Release) set(BOOST_HARVEST_CMD ${BOOST_HARVEST_CMD} && ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/include/boost-${BOOST_VERSION_NODOTS_SHORT}/ ${HARVEST_TARGET}/boost/include/) endif() - elseif(APPLE) set(BOOST_CONFIGURE_COMMAND ./bootstrap.sh) set(BOOST_BUILD_COMMAND ./b2) @@ -93,7 +98,7 @@ ExternalProject_Add(external_boost UPDATE_COMMAND "" PATCH_COMMAND ${BOOST_PATCH_COMMAND} CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND} - BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=x86 address-model=${BOOST_ADDRESS_MODEL} link=static threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install + BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=${BOOST_ARCHITECTURE} address-model=${BOOST_ADDRESS_MODEL} link=static threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install BUILD_IN_SOURCE 1 INSTALL_COMMAND "${BOOST_HARVEST_CMD}" ) diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake index 4830630def0..cd693d766dc 100644 --- a/build_files/build_environment/cmake/embree.cmake +++ b/build_files/build_environment/cmake/embree.cmake @@ -47,7 +47,7 @@ else() set(EMBREE_BUILD_DIR) endif() -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) +if(BLENDER_PLATFORM_ARM) ExternalProject_Add(external_embree GIT_REPOSITORY ${EMBREE_ARM_GIT} GIT_TAG "blender-arm" diff --git a/build_files/build_environment/cmake/gmp.cmake b/build_files/build_environment/cmake/gmp.cmake index 323630a63aa..6ca81678a32 100644 --- a/build_files/build_environment/cmake/gmp.cmake +++ b/build_files/build_environment/cmake/gmp.cmake @@ -25,19 +25,12 @@ else() set(GMP_OPTIONS --enable-static --disable-shared ) endif() -if(APPLE) - if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") - set(GMP_OPTIONS - ${GMP_OPTIONS} - --disable-assembly - ) - else() - set(GMP_OPTIONS - ${GMP_OPTIONS} - --with-pic - ) - endif() -elseif(UNIX) +if(APPLE AND NOT BLENDER_PLATFORM_ARM) + set(GMP_OPTIONS + ${GMP_OPTIONS} + --with-pic + ) +elseif(UNIX AND NOT APPLE) set(GMP_OPTIONS ${GMP_OPTIONS} --with-pic @@ -45,6 +38,13 @@ elseif(UNIX) ) endif() +if(BLENDER_PLATFORM_ARM) + set(GMP_OPTIONS + ${GMP_OPTIONS} + --disable-assembly + ) +endif() + ExternalProject_Add(external_gmp URL file://${PACKAGE_DIR}/${GMP_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 23d0dcbab7b..fc7e652a028 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -109,9 +109,9 @@ harvest(llvm/lib llvm/lib "libclang*.a") if(APPLE) harvest(openmp/lib openmp/lib "*") harvest(openmp/include openmp/include "*.h") - if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") - harvest(sse2neon sse2neon "*.h") - endif() +endif() +if(BLENDER_PLATFORM_ARM) + harvest(sse2neon sse2neon "*.h") endif() harvest(ogg/lib ffmpeg/lib "*.a") harvest(openal/include openal/include "*.h") diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake index f067267a416..cbb986410aa 100644 --- a/build_files/build_environment/cmake/llvm.cmake +++ b/build_files/build_environment/cmake/llvm.cmake @@ -16,7 +16,7 @@ # # ***** END GPL LICENSE BLOCK ***** -if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") +if(BLENDER_PLATFORM_ARM) set(LLVM_TARGETS AArch64$<SEMICOLON>ARM) else() set(LLVM_TARGETS X86) diff --git a/build_files/build_environment/cmake/opencolorio.cmake b/build_files/build_environment/cmake/opencolorio.cmake index bd03be5ebff..28c93973cf5 100644 --- a/build_files/build_environment/cmake/opencolorio.cmake +++ b/build_files/build_environment/cmake/opencolorio.cmake @@ -36,7 +36,7 @@ set(OPENCOLORIO_EXTRA_ARGS -Dyaml-cpp_ROOT=${LIBDIR}/yamlcpp ) -if(APPLE AND NOT("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")) +if(BLENDER_PLATFORM_ARM) set(OPENCOLORIO_EXTRA_ARGS ${OPENCOLORIO_EXTRA_ARGS} -DOCIO_USE_SSE=OFF diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 486b3d1a802..8930bd70fab 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -137,6 +137,10 @@ else() endif() set(OSX_SYSROOT ${XCODE_DEV_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) + if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") + set(BLENDER_PLATFORM_ARM ON) + endif() + set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}") set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") @@ -151,6 +155,10 @@ else() -DCMAKE_OSX_SYSROOT:PATH=${OSX_SYSROOT} ) else() + if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") + set(BLENDER_PLATFORM_ARM ON) + endif() + set(PLATFORM_CFLAGS "-fPIC") set(PLATFORM_CXXFLAGS "-std=c++11 -fPIC") set(PLATFORM_LDFLAGS) diff --git a/build_files/build_environment/cmake/png.cmake b/build_files/build_environment/cmake/png.cmake index d9248b61c98..458d3a1fd98 100644 --- a/build_files/build_environment/cmake/png.cmake +++ b/build_files/build_environment/cmake/png.cmake @@ -22,8 +22,8 @@ set(PNG_EXTRA_ARGS -DPNG_STATIC=ON ) -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) - set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=on -DCMAKE_SYSTEM_PROCESSOR="aarch64") +if(BLENDER_PLATFORM_ARM) + 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/sse2neon.cmake b/build_files/build_environment/cmake/sse2neon.cmake index dca2d94f913..d7987fdfd2f 100644 --- a/build_files/build_environment/cmake/sse2neon.cmake +++ b/build_files/build_environment/cmake/sse2neon.cmake @@ -16,15 +16,13 @@ # # ***** END GPL LICENSE BLOCK ***** -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) - ExternalProject_Add(external_sse2neon - GIT_REPOSITORY ${SSE2NEON_GIT} - GIT_TAG ${SSE2NEON_GIT_HASH} - DOWNLOAD_DIR ${DOWNLOAD_DIR} - PREFIX ${BUILD_DIR}/sse2neon - CONFIGURE_COMMAND echo sse2neon - Nothing to configure - BUILD_COMMAND echo sse2neon - nothing to build - INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon - INSTALL_DIR ${LIBDIR}/sse2neon - ) -endif() +ExternalProject_Add(external_sse2neon + GIT_REPOSITORY ${SSE2NEON_GIT} + GIT_TAG ${SSE2NEON_GIT_HASH} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + PREFIX ${BUILD_DIR}/sse2neon + CONFIGURE_COMMAND echo sse2neon - Nothing to configure + BUILD_COMMAND echo sse2neon - nothing to build + INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon + INSTALL_DIR ${LIBDIR}/sse2neon +) diff --git a/build_files/build_environment/cmake/ssl.cmake b/build_files/build_environment/cmake/ssl.cmake index 4426cc876c6..615b88167ec 100644 --- a/build_files/build_environment/cmake/ssl.cmake +++ b/build_files/build_environment/cmake/ssl.cmake @@ -22,7 +22,9 @@ set(SSL_PATCH_CMD echo .) if(APPLE) set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}") else() - if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + if(BLENDER_PLATFORM_ARM) + set(SSL_OS_COMPILER "blender-linux-aarch64") + elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128) set(SSL_OS_COMPILER "blender-linux-x86_64") else() diff --git a/build_files/build_environment/cmake/ssl.conf b/build_files/build_environment/cmake/ssl.conf index 8a9c9dcab4c..fa59bcf2825 100644 --- a/build_files/build_environment/cmake/ssl.conf +++ b/build_files/build_environment/cmake/ssl.conf @@ -8,6 +8,11 @@ my %targets = ( inherit_from => [ "linux-x86_64" ], cflags => add("-fPIC"), }, + "blender-linux-aarch64" => { + inherit_from => [ "linux-aarch64" ], + cxxflags => add("-fPIC"), + cflags => add("-fPIC"), + }, "blender-darwin-x86_64" => { inherit_from => [ "darwin64-x86_64-cc" ], cflags => add("-fPIC"), diff --git a/build_files/build_environment/cmake/tbb.cmake b/build_files/build_environment/cmake/tbb.cmake index b006898e6fd..44307cd2afb 100644 --- a/build_files/build_environment/cmake/tbb.cmake +++ b/build_files/build_environment/cmake/tbb.cmake @@ -21,6 +21,7 @@ if(WIN32) -DTBB_BUILD_TBBMALLOC=On -DTBB_BUILD_TBBMALLOC_PROXY=On -DTBB_BUILD_STATIC=Off + -DTBB_BUILD_TESTS=Off ) set(TBB_LIBRARY tbb) set(TBB_STATIC_LIBRARY Off) @@ -30,6 +31,7 @@ else() -DTBB_BUILD_TBBMALLOC=On -DTBB_BUILD_TBBMALLOC_PROXY=Off -DTBB_BUILD_STATIC=On + -DTBB_BUILD_TESTS=Off ) set(TBB_LIBRARY tbb_static) set(TBB_STATIC_LIBRARY On) @@ -42,7 +44,7 @@ ExternalProject_Add(external_tbb URL_HASH ${TBB_HASH_TYPE}=${TBB_HASH} PREFIX ${BUILD_DIR}/tbb PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_tbb.txt ${BUILD_DIR}/tbb/src/external_tbb/CMakeLists.txt && - ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/tbb/src/external_tbb/build/vs2013/version_string.ver ${BUILD_DIR}/tbb/src/external_tbb/src/tbb/version_string.ver && + ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/tbb/src/external_tbb/build/vs2013/version_string.ver ${BUILD_DIR}/tbb/src/external_tbb/build/version_string.ver.in && ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/tbb/src/external_tbb < ${PATCH_DIR}/tbb.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/tbb ${DEFAULT_CMAKE_FLAGS} ${TBB_EXTRA_ARGS} INSTALL_DIR ${LIBDIR}/tbb diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 97da5d54d48..83e438614b6 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -152,7 +152,7 @@ set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0) set(OPENCOLORIO_HASH_TYPE MD5) set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz) -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) +if(BLENDER_PLATFORM_ARM) # Newer version required by ISPC with arm support. set(LLVM_VERSION 11.0.1) set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz) @@ -398,11 +398,20 @@ set(LZMA_HASH 5117f930900b341493827d63aa910ff5e011e0b994197c3b71c08a20228a42df) set(LZMA_HASH_TYPE SHA256) set(LZMA_FILE xz-${LZMA_VERSION}.tar.bz2) -set(SSL_VERSION 1.1.1g) -set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz) -set(SSL_HASH ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46) -set(SSL_HASH_TYPE SHA256) -set(SSL_FILE openssl-${SSL_VERSION}.tar.gz) +if(BLENDER_PLATFORM_ARM) + # Need at least 1.1.1i for aarch64 support (https://github.com/openssl/openssl/pull/13218) + set(SSL_VERSION 1.1.1i) + set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz) + set(SSL_HASH e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242) + set(SSL_HASH_TYPE SHA256) + set(SSL_FILE openssl-${SSL_VERSION}.tar.gz) +else() + set(SSL_VERSION 1.1.1g) + set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz) + set(SSL_HASH ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46) + set(SSL_HASH_TYPE SHA256) + set(SSL_FILE openssl-${SSL_VERSION}.tar.gz) +endif() set(SQLITE_VERSION 3.31.1) set(SQLITE_URI https://www.sqlite.org/2018/sqlite-src-3240000.zip) @@ -453,7 +462,7 @@ set(XR_OPENXR_SDK_HASH 0df6b2fd6045423451a77ff6bc3e1a75) set(XR_OPENXR_SDK_HASH_TYPE MD5) set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz) -if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")) +if(BLENDER_PLATFORM_ARM) # Unreleased version with macOS arm support. set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip) set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d) diff --git a/build_files/build_environment/cmake/x264.cmake b/build_files/build_environment/cmake/x264.cmake index a32f119d184..08d698cc3ad 100644 --- a/build_files/build_environment/cmake/x264.cmake +++ b/build_files/build_environment/cmake/x264.cmake @@ -20,24 +20,16 @@ if(WIN32) set(X264_EXTRA_ARGS --enable-win32thread --cross-prefix=${MINGW_HOST}- --host=${MINGW_HOST}) endif() - -if(APPLE) - if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") - set(X264_EXTRA_ARGS ${X264_EXTRA_ARGS} "--disable-asm") - set(X264_CONFIGURE_ENV echo .) - else() - set(X264_CONFIGURE_ENV - export AS=${LIBDIR}/nasm/bin/nasm - ) - endif() -else() - set(X264_CONFIGURE_ENV echo .) +if(BLENDER_PLATFORM_ARM) + set(X264_EXTRA_ARGS ${X264_EXTRA_ARGS} "--disable-asm") endif() -if(UNIX AND NOT APPLE) +if((APPLE AND NOT BLENDER_PLATFORM_ARM) OR (UNIX AND NOT APPLE)) set(X264_CONFIGURE_ENV export AS=${LIBDIR}/nasm/bin/nasm ) +else() + set(X264_CONFIGURE_ENV echo .) endif() ExternalProject_Add(external_x264 diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh index 7cd21b2885c..7d8c2ca3181 100755 --- a/build_files/build_environment/install_deps.sh +++ b/build_files/build_environment/install_deps.sh @@ -1797,6 +1797,10 @@ compile_OCIO() { cmake_d="$cmake_d -D OCIO_BUILD_PYTHON=OFF" cmake_d="$cmake_d -D OCIO_BUILD_GPU_TESTS=OFF" + if [ $(uname -m) == "aarch64" ]; then + cmake_d="$cmake_d -D OCIO_USE_SSE=OFF" + fi + if file /bin/cp | grep -q '32-bit'; then cflags="-fPIC -m32 -march=i686" else @@ -2059,7 +2063,10 @@ compile_OIIO() { cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst" cmake_d="$cmake_d -D STOP_ON_WARNING=OFF" cmake_d="$cmake_d -D LINKSTATIC=OFF" - cmake_d="$cmake_d -D USE_SIMD=sse2" + + if [ $(uname -m) != "aarch64" ]; then + cmake_d="$cmake_d -D USE_SIMD=sse2" + fi cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION" @@ -2079,7 +2086,7 @@ compile_OIIO() { cmake_d="$cmake_d -D USE_OPENCV=OFF" cmake_d="$cmake_d -D BUILD_TESTING=OFF" cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF" - cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=ON" + cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=OFF" cmake_d="$cmake_d -D TXT2MAN=" #cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON" #cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON" @@ -2209,10 +2216,15 @@ compile_LLVM() { mkdir build cd build + LLVM_TARGETS="X86" + if [ $(uname -m) == "aarch64" ]; then + LLVM_TARGETS="AArch64" + fi + cmake_d="-D CMAKE_BUILD_TYPE=Release" cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst" cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON" - cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86" + cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=$LLVM_TARGETS" cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF" if [ -d $_FFI_INCLUDE_DIR ]; then @@ -2329,13 +2341,16 @@ compile_OSL() { cmake_d="$cmake_d -D STOP_ON_WARNING=OFF" cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF" cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF" - cmake_d="$cmake_d -D USE_SIMD=sse2" cmake_d="$cmake_d -D USE_LLVM_BITCODE=OFF" cmake_d="$cmake_d -D USE_PARTIO=OFF" cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF" cmake_d="$cmake_d -D USE_QT=OFF" cmake_d="$cmake_d -D USE_PYTHON=OFF" + if [ $(uname -m) != "aarch64" ]; then + cmake_d="$cmake_d -D USE_SIMD=sse2" + fi + cmake_d="$cmake_d -D CMAKE_CXX_STANDARD=14" #~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION" diff --git a/build_files/build_environment/patches/cmakelists_tbb.txt b/build_files/build_environment/patches/cmakelists_tbb.txt index 4032e5d6f83..e05f27afdd6 100644 --- a/build_files/build_environment/patches/cmakelists_tbb.txt +++ b/build_files/build_environment/patches/cmakelists_tbb.txt @@ -1,5 +1,32 @@ -cmake_minimum_required (VERSION 2.8) -project(tbb CXX) +cmake_minimum_required(VERSION 3.1 FATAL_ERROR) + +if (POLICY CMP0048) + # cmake warns if loaded from a min-3.0-required parent dir, so silence the warning: + cmake_policy(SET CMP0048 NEW) +endif() + +project (tbb CXX) + +include(CheckCXXCompilerFlag) +include(CheckCXXSourceRuns) + +if(POLICY CMP0058) + cmake_policy(SET CMP0058 NEW) +endif() + +if(POLICY CMP0068) + cmake_policy(SET CMP0068 NEW) +endif() + +if (POLICY CMP0078) + # swig standard target names + cmake_policy(SET CMP0078 NEW) +endif () + +if (POLICY CMP0086) + # UseSWIG honors SWIG_MODULE_NAME via -module flag + cmake_policy(SET CMP0086 NEW) +endif () if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Release' as none was specified.") @@ -8,12 +35,36 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) "MinSizeRel" "RelWithDebInfo") endif() -include_directories(include src src/rml/include ) +if(NOT TBB_INSTALL_RUNTIME_DIR) + set(TBB_INSTALL_RUNTIME_DIR bin) +endif() +if(NOT TBB_INSTALL_LIBRARY_DIR) + set(TBB_INSTALL_LIBRARY_DIR lib) +endif() +if(NOT TBB_INSTALL_ARCHIVE_DIR) + set(TBB_INSTALL_ARCHIVE_DIR lib) +endif() +if(NOT TBB_INSTALL_INCLUDE_DIR) + set(TBB_INSTALL_INCLUDE_DIR include) +endif() +if(NOT TBB_CMAKE_PACKAGE_INSTALL_DIR) + set(TBB_CMAKE_PACKAGE_INSTALL_DIR lib/cmake/tbb) +endif() + +include_directories(include src src/rml/include ${CMAKE_CURRENT_BINARY_DIR}) option(TBB_BUILD_SHARED "Build TBB shared library" ON) option(TBB_BUILD_STATIC "Build TBB static library" ON) option(TBB_BUILD_TBBMALLOC "Build TBB malloc library" ON) option(TBB_BUILD_TBBMALLOC_PROXY "Build TBB malloc proxy library" ON) +option(TBB_BUILD_TESTS "Build TBB tests and enable testing infrastructure" ON) +option(TBB_NO_DATE "Do not save the configure date in the version string" OFF) +option(TBB_BUILD_PYTHON "Build TBB Python bindings" OFF) +option(TBB_SET_SOVERSION "Set the SOVERSION (shared library build version suffix)?" OFF) + +# When this repository is part of a larger build system of a parent project +# we may not want TBB to set up default installation targets +option(TBB_INSTALL_TARGETS "Include build targets for 'make install'" ON) if(APPLE) set(CMAKE_MACOSX_RPATH ON) @@ -39,66 +90,143 @@ set(tbbmalloc_proxy_src src/tbbmalloc/proxy.cpp src/tbbmalloc/tbb_function_replacement.cpp) -if (NOT APPLE) - add_definitions(-DDO_ITT_NOTIFY) -else() +add_library (tbb_interface INTERFACE) +add_definitions(-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1) + +if (CMAKE_SYSTEM_PROCESSOR MATCHES "(i386|x86_64)") + if (NOT APPLE AND NOT MINGW) + target_compile_definitions(tbb_interface INTERFACE DO_ITT_NOTIFY) + endif() +endif() + +if (APPLE) # Disable annoying "has no symbols" warnings - set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") - set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") + set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") + set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") endif() -if (UNIX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DUSE_PTHREAD") - if(NOT CMAKE_CXX_FLAGS MATCHES "-mno-rtm") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mrtm") - endif() - if (APPLE) - set(ARCH_PREFIX "mac") - else() - set(ARCH_PREFIX "lin") - endif() - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH_PREFIX "${ARCH_PREFIX}64") +macro(CHECK_CXX_COMPILER_AND_LINKER_FLAGS _RESULT _CXX_FLAGS _LINKER_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${_CXX_FLAGS}) + set(CMAKE_REQUIRED_LIBRARIES ${_LINKER_FLAGS}) + set(CMAKE_REQUIRED_QUIET TRUE) + check_cxx_source_runs("#include <iostream>\nint main(int argc, char **argv) { std::cout << \"test\"; return 0; }" ${_RESULT}) + set(CMAKE_REQUIRED_FLAGS "") + set(CMAKE_REQUIRED_LIBRARIES "") +endmacro() + +# Prefer libc++ in conjunction with Clang +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if (CMAKE_CXX_FLAGS MATCHES "-stdlib=libc\\+\\+") + message(STATUS "TBB: using libc++.") else() - set(ARCH_PREFIX "${ARCH_PREFIX}32") + CHECK_CXX_COMPILER_AND_LINKER_FLAGS(HAS_LIBCPP "-stdlib=libc++" "-stdlib=libc++") + if (HAS_LIBCPP) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -D_LIBCPP_VERSION") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++") + message(STATUS "TBB: using libc++.") + else() + message(STATUS "TBB: NOT using libc++.") + endif() endif() - set(ENABLE_RTTI "-frtti -fexceptions ") - set(DISABLE_RTTI "-fno-rtti -fno-exceptions ") +endif() + +set (CMAKE_CXX_STANDARD 11) + +if (UNIX) + target_compile_definitions(tbb_interface INTERFACE USE_PTHREAD) + + check_cxx_compiler_flag ("-mrtm -Werror" SUPPORTS_MRTM) + if (SUPPORTS_MRTM) + target_compile_options(tbb_interface INTERFACE "-mrtm") + endif () + elseif(WIN32) - cmake_minimum_required (VERSION 3.1) - enable_language(ASM_MASM) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS- /Zc:wchar_t /Zc:forScope /DUSE_WINTHREAD") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0600 /volatile:iso") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4800 /wd4146 /wd4244 /wd4018") - - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - list(APPEND tbb_src src/tbb/intel64-masm/atomic_support.asm - src/tbb/intel64-masm/itsx.asm src/tbb/intel64-masm/intel64_misc.asm) - list(APPEND tbbmalloc_src src/tbb/intel64-masm/atomic_support.asm) - set(CMAKE_ASM_MASM_FLAGS "/DEM64T=1") - set(ARCH_PREFIX "win64") - else() - list(APPEND tbb_src src/tbb/ia32-masm/atomic_support.asm - src/tbb/ia32-masm/itsx.asm src/tbb/ia32-masm/lock_byte.asm) - list(APPEND tbbmalloc_src src/tbb/ia32-masm/atomic_support.asm) - set(ARCH_PREFIX "win32") - endif() + target_compile_definitions(tbb_interface INTERFACE USE_WINTHREAD _WIN32_WINNT=0x0600) + if (MSVC) + enable_language(ASM_MASM) + target_compile_options(tbb_interface INTERFACE /GS- /Zc:wchar_t /Zc:forScope) + check_cxx_compiler_flag ("/volatile:iso" SUPPORTS_VOLATILE_FLAG) + if (SUPPORTS_VOLATILE_FLAG) + target_compile_options(tbb_interface INTERFACE /volatile:iso) + endif () + target_compile_options(tbb_interface INTERFACE $<$<COMPILE_LANGUAGE:CXX>:/wd4267 /wd4800 /wd4146 /wd4244 /wd4577 /wd4018>) + if (NOT CMAKE_SIZEOF_VOID_P) + message(FATAL_ERROR "'CMAKE_SIZEOF_VOID_P' is undefined. Please delete your build directory and rerun CMake again!") + endif() + + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND tbb_src src/tbb/intel64-masm/atomic_support.asm + src/tbb/intel64-masm/itsx.asm src/tbb/intel64-masm/intel64_misc.asm) + list(APPEND tbbmalloc_src src/tbb/intel64-masm/atomic_support.asm) + set(CMAKE_ASM_MASM_FLAGS "/DEM64T=1 ${CMAKE_ASM_MASM_FLAGS}") + else() + list(APPEND tbb_src src/tbb/ia32-masm/atomic_support.asm + src/tbb/ia32-masm/itsx.asm src/tbb/ia32-masm/lock_byte.asm) + # Enable SAFESEH feature for assembly (x86 builds only). + set(CMAKE_ASM_MASM_FLAGS "/safeseh ${CMAKE_ASM_MASM_FLAGS}") + endif() + elseif (MINGW) + target_compile_options(tbb_interface INTERFACE "-mthreads") + endif () +endif() + +if (MSVC) set(ENABLE_RTTI "/EHsc /GR ") set(DISABLE_RTTI "/EHs- /GR- ") +elseif (UNIX) + set(ENABLE_RTTI "-frtti -fexceptions ") + set(DISABLE_RTTI "-fno-rtti -fno-exceptions ") +endif () + +##-------- +# - Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU +# libstdc++ when it cannot be properly recognized, e.g. when used +# with Clang on Linux* OS. Inspired by a contribution from David A. +if (NOT TBB_USE_GLIBCXX_VERSION AND UNIX AND NOT APPLE) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # using Clang + string(REPLACE "." "0" TBB_USE_GLIBCXX_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + endif() endif() +if (TBB_USE_GLIBCXX_VERSION) + target_compile_definitions(tbb_interface INTERFACE TBB_USE_GLIBCXX_VERSION=${TBB_USE_GLIBCXX_VERSION}) +endif() + +##------- + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag("-flifetime-dse=1" SUPPORTS_FLIFETIME) - if (SUPPORTS_FLIFETIME) - add_definitions(-flifetime-dse=1) - endif() + check_cxx_compiler_flag ("-flifetime-dse=1" SUPPORTS_FLIFETIME) + if (SUPPORTS_FLIFETIME) + target_compile_options(tbb_interface INTERFACE -flifetime-dse=1) + endif() endif() # Linker export definitions -if (WIN32) +if (APPLE) + set (ARCH_PREFIX "mac") +elseif(WIN32) + set (ARCH_PREFIX "win") +else() + set (ARCH_PREFIX "lin") +endif() + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH_PREFIX "${ARCH_PREFIX}64") +else() + set(ARCH_PREFIX "${ARCH_PREFIX}32") +endif() + +if (MINGW) + set (ARCH_PREFIX "${ARCH_PREFIX}-gcc") + # there's no win32-gcc-tbb-export.def, use lin32-tbb-export.def + execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/lin32-tbb-export.def ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/win32-gcc-tbb-export.def) +endif() + +if (MSVC) add_custom_command(OUTPUT tbb.def COMMAND ${CMAKE_CXX_COMPILER} /TC /EP ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include > tbb.def MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def @@ -110,18 +238,15 @@ if (WIN32) MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def COMMENT "Preprocessing tbbmalloc.def" ) - list(APPEND tbb_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/tbb_resource.rc) - list(APPEND tbbmalloc_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/tbbmalloc.rc) - list(APPEND tbbmalloc_proxy_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/tbbmalloc.rc) else() add_custom_command(OUTPUT tbb.def - COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbb.def + COMMAND ${CMAKE_CXX_COMPILER} -xc++ -std=c++11 -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbb.def MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def COMMENT "Preprocessing tbb.def" ) add_custom_command(OUTPUT tbbmalloc.def - COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbbmalloc.def + COMMAND ${CMAKE_CXX_COMPILER} -xc++ -std=c++11 -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbbmalloc.def MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def COMMENT "Preprocessing tbbmalloc.def" ) @@ -132,34 +257,80 @@ add_custom_target(tbb_def_files DEPENDS tbb.def tbbmalloc.def) # TBB library if (TBB_BUILD_STATIC) add_library(tbb_static STATIC ${tbb_src}) - set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1") - set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1") + target_link_libraries(tbb_static PRIVATE tbb_interface) + target_include_directories(tbb_static INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:${TBB_INSTALL_INCLUDE_DIR}>") set_property(TARGET tbb_static APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI}) - install(TARGETS tbb_static ARCHIVE DESTINATION lib) + if (TBB_INSTALL_TARGETS) + install(TARGETS tbb_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}) + endif() + + target_compile_definitions(tbb_static + PRIVATE + -D__TBB_BUILD=1 + -D__TBB_DYNAMIC_LOAD_ENABLED=0 + -D__TBB_SOURCE_DIRECTLY_INCLUDED=1) + + if (MSVC) + target_compile_definitions(tbb_static + PUBLIC -D__TBB_NO_IMPLICIT_LINKAGE=1 + PRIVATE -D_CRT_SECURE_NO_WARNINGS) + endif() + + if (UNIX AND NOT APPLE) + target_link_libraries(tbb_static PUBLIC pthread dl) + endif() endif() if (TBB_BUILD_SHARED) add_library(tbb SHARED ${tbb_src}) - set_property(TARGET tbb APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1") + target_link_libraries(tbb PRIVATE tbb_interface) + target_include_directories(tbb INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:${TBB_INSTALL_INCLUDE_DIR}>") set_property(TARGET tbb APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI}) + if (TBB_SET_SOVERSION) + set_property(TARGET tbb PROPERTY SOVERSION 2) + endif () + + target_compile_definitions(tbb + PRIVATE -D__TBB_BUILD=1) + + if (MSVC) + target_compile_definitions(tbb + PUBLIC -D__TBB_NO_IMPLICIT_LINKAGE=1 + PRIVATE -D_CRT_SECURE_NO_WARNINGS) + endif() + add_dependencies(tbb tbb_def_files) + if (APPLE) - set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbb.def") - elseif(UNIX) - set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbb.def") - elseif(WIN32) - set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbb.def") - + set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"") + elseif (MSVC) + set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "/DEF:\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"") + else () + set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"") endif() - install(TARGETS tbb DESTINATION lib) - if(WIN32) - set_target_properties(tbb PROPERTIES OUTPUT_NAME "tbb$<$<CONFIG:Debug>:_debug>") + + if (TBB_INSTALL_TARGETS) + install(TARGETS tbb EXPORT TBB + LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR} + RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR}) + if (MSVC) + install(FILES $<TARGET_PDB_FILE:tbb> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL) + endif() + endif() + + if (UNIX AND NOT APPLE) + target_link_libraries(tbb PUBLIC pthread dl) endif() endif() -if(CMAKE_COMPILER_IS_GNUCC) + +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # Quench a warning on GCC set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/governor.cpp COMPILE_FLAGS "-Wno-missing-field-initializers ") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # Quench a warning on Clang + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/itt_notify.cpp COMPILE_FLAGS "-Wno-varargs ") elseif(MSVC) # Quench a warning on MSVC set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/scheduler.cpp COMPILE_FLAGS "/wd4458 ") @@ -169,24 +340,50 @@ if(TBB_BUILD_TBBMALLOC) # TBB malloc library if (TBB_BUILD_STATIC) add_library(tbbmalloc_static STATIC ${tbbmalloc_static_src}) + target_link_libraries(tbbmalloc_static PRIVATE tbb_interface) set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1") + set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_DYNAMIC_LOAD_ENABLED=0") + set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1") set_property(TARGET tbbmalloc_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI}) - install(TARGETS tbbmalloc_static ARCHIVE DESTINATION lib) + if (MSVC) + target_compile_definitions(tbbmalloc_static PUBLIC __TBB_NO_IMPLICIT_LINKAGE=1 __TBBMALLOC_NO_IMPLICIT_LINKAGE=1) + endif() + if (TBB_INSTALL_TARGETS) + install(TARGETS tbbmalloc_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}) + endif() endif() if (TBB_BUILD_SHARED) add_library(tbbmalloc SHARED ${tbbmalloc_src}) + target_link_libraries(tbbmalloc PRIVATE tbb_interface) set_property(TARGET tbbmalloc APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1") set_property(TARGET tbbmalloc APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI}) + if (TBB_SET_SOVERSION) + set_property(TARGET tbbmalloc PROPERTY SOVERSION 2) + endif () add_dependencies(tbbmalloc tbb_def_files) if (APPLE) - set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def") - elseif(UNIX) - set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def") - elseif(WIN32) - set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def") + set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"") + elseif (MSVC) + set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "/DEF:\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"") + else () + set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"") + endif() + if (MSVC) + target_compile_definitions(tbbmalloc PUBLIC __TBB_NO_IMPLICIT_LINKAGE=1 __TBBMALLOC_NO_IMPLICIT_LINKAGE=1) + endif() + if (TBB_INSTALL_TARGETS) + install(TARGETS tbbmalloc EXPORT TBB + LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR} + RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR}) + if (MSVC) + install(FILES $<TARGET_PDB_FILE:tbbmalloc> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL) + endif() + endif() + if (UNIX AND NOT APPLE) + target_link_libraries(tbbmalloc PUBLIC pthread dl) endif() - install(TARGETS tbbmalloc DESTINATION lib) endif() endif() @@ -194,19 +391,298 @@ if(TBB_BUILD_TBBMALLOC_PROXY) # TBB malloc proxy library if (TBB_BUILD_STATIC) add_library(tbbmalloc_proxy_static STATIC ${tbbmalloc_proxy_src}) + target_link_libraries(tbbmalloc_proxy_static PRIVATE tbb_interface) set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1") + set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_DYNAMIC_LOAD_ENABLED=0") + set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1") set_property(TARGET tbbmalloc_proxy_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI}) - link_libraries(tbbmalloc_proxy_static tbbmalloc) - install(TARGETS tbbmalloc_proxy_static ARCHIVE DESTINATION lib) + if (TBB_INSTALL_TARGETS) + install(TARGETS tbbmalloc_proxy_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}) + endif() endif() if (TBB_BUILD_SHARED) add_library(tbbmalloc_proxy SHARED ${tbbmalloc_proxy_src}) + target_link_libraries(tbbmalloc_proxy PRIVATE tbb_interface) set_property(TARGET tbbmalloc_proxy APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1") set_property(TARGET tbbmalloc_proxy APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI}) - target_link_libraries(tbbmalloc_proxy tbbmalloc) - install(TARGETS tbbmalloc_proxy DESTINATION lib) + if (TBB_SET_SOVERSION) + set_property(TARGET tbbmalloc_proxy PROPERTY SOVERSION 2) + endif () + target_link_libraries(tbbmalloc_proxy PUBLIC tbbmalloc) + if (TBB_INSTALL_TARGETS) + install(TARGETS tbbmalloc_proxy EXPORT TBB + LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR} + RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR}) + if (MSVC) + install(FILES $<TARGET_PDB_FILE:tbbmalloc_proxy> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL) + endif() + endif() + if (UNIX AND NOT APPLE) + target_link_libraries(tbbmalloc_proxy PUBLIC pthread dl) + endif() endif() endif() -install(DIRECTORY include/tbb DESTINATION include) +if (TBB_INSTALL_TARGETS) + install(DIRECTORY include/tbb DESTINATION ${TBB_INSTALL_INCLUDE_DIR}) + if (TBB_BUILD_SHARED) + install(EXPORT TBB DESTINATION ${TBB_CMAKE_PACKAGE_INSTALL_DIR} NAMESPACE TBB:: FILE TBBConfig.cmake) + endif() +endif() + +# version file +if (TBB_INSTALL_TARGETS) + set (_VERSION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/include/tbb/tbb_stddef.h) + file (STRINGS ${_VERSION_FILE} _VERSION_MAJOR_STRING REGEX ".*define[ ]+TBB_VERSION_MAJOR[ ]+[0-9]+.*") + file (STRINGS ${_VERSION_FILE} _VERSION_MINOR_STRING REGEX ".*define[ ]+TBB_VERSION_MINOR[ ]+[0-9]+.*") + string (REGEX REPLACE ".*TBB_VERSION_MAJOR[ ]+([0-9]+)" "\\1" TBB_MAJOR_VERSION ${_VERSION_MAJOR_STRING}) + string (REGEX REPLACE ".*TBB_VERSION_MINOR[ ]+([0-9]+)" "\\1" TBB_MINOR_VERSION ${_VERSION_MINOR_STRING}) + set (TBB_VERSION_STRING "${TBB_MAJOR_VERSION}.${TBB_MINOR_VERSION}") + include (CMakePackageConfigHelpers) + write_basic_package_version_file (TBBConfigVersion.cmake VERSION "${TBB_VERSION_STRING}" COMPATIBILITY AnyNewerVersion) + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/TBBConfigVersion.cmake DESTINATION "${TBB_CMAKE_PACKAGE_INSTALL_DIR}") +endif() + +# version_string.ver +if (UNIX AND NOT TBB_NO_DATE) + execute_process (COMMAND date "+%a, %d %b %Y %H:%M:%S %z" + OUTPUT_VARIABLE _configure_date + OUTPUT_STRIP_TRAILING_WHITESPACE) +elseif (WIN32 AND NOT TBB_NO_DATE) + execute_process (COMMAND cmd " /C date /T" + OUTPUT_VARIABLE _configure_date + OUTPUT_STRIP_TRAILING_WHITESPACE) +else () + set (_configure_date "Unknown") +endif() +set (TBB_CONFIG_DATE "${_configure_date}" CACHE STRING "First time that TBB was configured") +set (_configure_date "${TBB_CONFIG_DATE}") +include_directories (${CMAKE_BINARY_DIR}) +configure_file (build/version_string.ver.in version_string.ver @ONLY) + +if (TBB_BUILD_TESTS) + enable_language (C) + enable_testing () + + find_library (LIBRT_LIBRARIES rt) + find_library (LIDL_LIBRARIES dl) + find_package (Threads) + if (NOT APPLE) + find_package (OpenMP) + endif() + + macro (tbb_add_test testname) + set (full_testname tbb_test_${testname}) + add_executable (${full_testname} src/test/test_${testname}.cpp) + target_link_libraries(${full_testname} PRIVATE tbb_interface) + if (TBB_BUILD_SHARED) + target_link_libraries (${full_testname} PRIVATE tbb tbbmalloc) + target_compile_definitions (${full_testname} PRIVATE __TBB_LIB_NAME=tbb) + else () + target_link_libraries (${full_testname} PRIVATE tbb_static tbbmalloc_static) + target_compile_definitions (${full_testname} PRIVATE __TBB_LIB_NAME=tbb_static) + endif () + if (LIBRT_LIBRARIES) + target_link_libraries (${full_testname} PRIVATE ${LIBRT_LIBRARIES}) + endif () + if (LIDL_LIBRARIES) + target_link_libraries (${full_testname} PRIVATE ${LIDL_LIBRARIES}) + endif () + if (Threads_FOUND) + target_link_libraries (${full_testname} PRIVATE ${CMAKE_THREAD_LIBS_INIT}) + endif () + if (OPENMP_FOUND AND "${testname}" MATCHES "openmp") + set_target_properties (${full_testname} PROPERTIES COMPILE_FLAGS "${OpenMP_CXX_FLAGS}") + set_target_properties (${full_testname} PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS}") + endif() + if (MINGW) + target_link_libraries (${full_testname} PRIVATE psapi) + endif () + add_test (NAME ${full_testname} COMMAND ${full_testname}) + endmacro () + + tbb_add_test (aggregator) + tbb_add_test (aligned_space) + tbb_add_test (assembly) + if (NOT WIN32) + tbb_add_test (async_msg) # msvc64/debug timeouts + endif() + tbb_add_test (async_node) + # tbb_add_test (atomic) # msvc64/debug timeouts: Compile-time initialization fails for static tbb::atomic variables + tbb_add_test (blocked_range2d) + tbb_add_test (blocked_range3d) + tbb_add_test (blocked_range) + tbb_add_test (broadcast_node) + tbb_add_test (buffer_node) + tbb_add_test (cache_aligned_allocator) + if (NOT WIN32) + tbb_add_test (cache_aligned_allocator_STL) + endif() + tbb_add_test (cilk_dynamic_load) + tbb_add_test (cilk_interop) + tbb_add_test (combinable) + tbb_add_test (composite_node) + tbb_add_test (concurrent_hash_map) + tbb_add_test (concurrent_lru_cache) + # tbb_add_test (concurrent_monitor) # too long + # tbb_add_test (concurrent_priority_queue) + if (NOT WIN32) + tbb_add_test (concurrent_queue) # msvc64/debug timeouts + endif() + # tbb_add_test (concurrent_queue_whitebox) + tbb_add_test (concurrent_unordered_map) + # tbb_add_test (concurrent_unordered_set) + tbb_add_test (concurrent_vector) + tbb_add_test (continue_node) + tbb_add_test (critical_section) + tbb_add_test (dynamic_link) + # tbb_add_test (eh_algorithms) + tbb_add_test (eh_flow_graph) + # tbb_add_test (eh_tasks) + tbb_add_test (enumerable_thread_specific) + tbb_add_test (examples_common_utility) + # tbb_add_test (fast_random) + tbb_add_test (flow_graph) + tbb_add_test (flow_graph_whitebox) + # tbb_add_test (fp) # mingw: harness_fp.h:66, assertion !checkConsistency || (ctl.mxcsr & SSE_RND_MODE_MASK) >> 3 == (ctl.x87cw & FE_RND_MODE_MASK): failed + # tbb_add_test (function_node) # mingw:random timeout + # tbb_add_test (global_control) + # tbb_add_test (global_control_whitebox) + tbb_add_test (halt) + tbb_add_test (handle_perror) + # tbb_add_test (hw_concurrency) + tbb_add_test (indexer_node) + tbb_add_test (inits_loop) + tbb_add_test (intrusive_list) + tbb_add_test (ittnotify) + # tbb_add_test (join_node) #msvc/64: fatal error C1128: number of sections exceeded object file format limit: compile with /bigob + tbb_add_test (lambda) + tbb_add_test (limiter_node) + # tbb_add_test (malloc_atexit) + # tbb_add_test (malloc_compliance) #mingw: Limits should be decreased for the test to work + tbb_add_test (malloc_init_shutdown) + # tbb_add_test (malloc_lib_unload) + # tbb_add_test (malloc_overload) + tbb_add_test (malloc_pools) + tbb_add_test (malloc_regression) + # tbb_add_test (malloc_used_by_lib) + # tbb_add_test (malloc_whitebox) + tbb_add_test (model_plugin) + # tbb_add_test (multifunction_node) # too long + tbb_add_test (mutex) + tbb_add_test (mutex_native_threads) + # tbb_add_test (opencl_node) + if (OPENMP_FOUND) + tbb_add_test (openmp) + endif () + tbb_add_test (overwrite_node) + # tbb_add_test (parallel_do) + # This seems to fail on CI platforms (AppVeyor/Travis), perhaps because the VM exposes just 1 core? + tbb_add_test (parallel_for) + tbb_add_test (parallel_for_each) + tbb_add_test (parallel_for_vectorization) + tbb_add_test (parallel_invoke) + tbb_add_test (parallel_pipeline) + tbb_add_test (parallel_reduce) + tbb_add_test (parallel_scan) + tbb_add_test (parallel_sort) + tbb_add_test (parallel_while) + # tbb_add_test (partitioner_whitebox) # too long + tbb_add_test (pipeline) + # tbb_add_test (pipeline_with_tbf) # takes forever on appveyor + tbb_add_test (priority_queue_node) + tbb_add_test (queue_node) + tbb_add_test (reader_writer_lock) + # tbb_add_test (runtime_loader) # LINK : fatal error LNK1104: cannot open file 'tbbproxy.lib' [C:\projects\tbb\test_runtime_loader.vcxproj] + tbb_add_test (rwm_upgrade_downgrade) + # tbb_add_test (ScalableAllocator) + if (NOT WIN32) + tbb_add_test (ScalableAllocator_STL) + endif() + tbb_add_test (semaphore) + # tbb_add_test (sequencer_node) # msvc: timeout + tbb_add_test (source_node) + tbb_add_test (split_node) + tbb_add_test (static_assert) + tbb_add_test (std_thread) + tbb_add_test (tagged_msg) + # tbb_add_test (task_arena) # LINK : fatal error LNK1104: cannot open file '__TBB_LIB_NAME.lib' [C:\projects\tbb\test_task_arena.vcxproj] + # tbb_add_test (task_assertions) + tbb_add_test (task_auto_init) + tbb_add_test (task) + # tbb_add_test (task_enqueue) # too long + tbb_add_test (task_group) + # tbb_add_test (task_leaks) + # tbb_add_test (task_priority) + # tbb_add_test (task_scheduler_init) # msvc: test_task_scheduler_init.cpp:68, assertion !test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(threads): failed + tbb_add_test (task_scheduler_observer) + tbb_add_test (task_steal_limit) + tbb_add_test (tbb_condition_variable) + tbb_add_test (tbb_fork) + # tbb_add_test (tbb_header) + tbb_add_test (tbb_thread) + # tbb_add_test (tbb_version) + tbb_add_test (tick_count) + tbb_add_test (tuple) + tbb_add_test (write_once_node) + tbb_add_test (yield) +endif () + +if (TBB_BUILD_PYTHON) + find_package(PythonInterp) + find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT) + find_package(SWIG 3) + if (PythonLibs_FOUND AND SWIG_FOUND AND TBB_BUILD_SHARED) + include (${SWIG_USE_FILE}) + set_source_files_properties (python/tbb/api.i PROPERTIES CPLUSPLUS ON) + set (CMAKE_SWIG_FLAGS "-threads") + + # swig_add_module is deprecated + if (CMAKE_VERSION VERSION_LESS 3.8) + swig_add_module (api python python/tbb/api.i) + else () + swig_add_library (api LANGUAGE python SOURCES python/tbb/api.i) + endif () + + # UseSWIG generates now standard target names + if (CMAKE_VERSION VERSION_LESS 3.13) + set (module_target ${SWIG_MODULE_api_REAL_NAME}) + else () + set (module_target api) + endif () + + target_include_directories(${module_target} PRIVATE ${PYTHON_INCLUDE_DIRS}) + target_link_libraries(${module_target} PRIVATE tbb) + if(WIN32) + target_link_libraries(${module_target} ${PYTHON_LIBRARIES}) + elseif(APPLE) + set_target_properties(${module_target} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") + endif() + + if (WIN32) + set (PYTHON_SITE_PACKAGES Lib/site-packages) + else () + set (PYTHON_SITE_PACKAGES lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages) + endif () + if (TBB_INSTALL_TARGETS) + install(FILES python/TBB.py + DESTINATION ${PYTHON_SITE_PACKAGES}) + install(FILES python/tbb/__init__.py python/tbb/pool.py python/tbb/test.py python/tbb/__main__.py ${CMAKE_CURRENT_BINARY_DIR}/api.py + DESTINATION ${PYTHON_SITE_PACKAGES}/tbb) + install(TARGETS ${module_target} + DESTINATION ${PYTHON_SITE_PACKAGES}/tbb) + endif() + + if(UNIX AND NOT APPLE) + add_library(irml SHARED python/rml/ipc_server.cpp python/rml/ipc_utils.cpp src/tbb/cache_aligned_allocator.cpp src/tbb/dynamic_link.cpp src/tbb/tbb_misc_ex.cpp src/tbb/tbb_misc.cpp) + target_compile_definitions(irml PRIVATE DO_ITT_NOTIFY=0 USE_PTHREAD=1) + target_link_libraries(irml PRIVATE tbb) + set_target_properties(irml PROPERTIES VERSION 1) + if (TBB_INSTALL_TARGETS) + install(TARGETS irml DESTINATION ${TBB_INSTALL_LIBRARY_DIR}) + endif() + endif () + endif () +endif () diff --git a/build_files/build_environment/patches/tbb.diff b/build_files/build_environment/patches/tbb.diff index c05c35bca95..07f70aa7007 100644 --- a/build_files/build_environment/patches/tbb.diff +++ b/build_files/build_environment/patches/tbb.diff @@ -10,4 +10,15 @@ index 7a8d06a0..886699d8 100644 + #if (__cplusplus >= 201402L && (!defined(_MSC_VER) || _MSC_VER >= 1920)) #define __TBB_DEPRECATED [[deprecated]] #define __TBB_DEPRECATED_MSG(msg) [[deprecated(msg)]] - #elif _MSC_VER
\ No newline at end of file + #elif _MSC_VER +--- a/src/tbb/tools_api/ittnotify_config.h ++++ b/src/tbb/tools_api/ittnotify_config.h +@@ -162,7 +162,7 @@ + # define ITT_ARCH ITT_ARCH_IA32E + # elif defined _M_IA64 || defined __ia64__ + # define ITT_ARCH ITT_ARCH_IA64 +-# elif defined _M_ARM || defined __arm__ ++# elif defined _M_ARM || defined __arm__ || defined __aarch64__ + # define ITT_ARCH ITT_ARCH_ARM + # elif defined __powerpc64__ + # define ITT_ARCH ITT_ARCH_PPC64 diff --git a/build_files/build_environment/patches/theora.diff b/build_files/build_environment/patches/theora.diff index 3abadb66be9..4436577816e 100644 --- a/build_files/build_environment/patches/theora.diff +++ b/build_files/build_environment/patches/theora.diff @@ -4,7 +4,7 @@ # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ -+ | aarch64 \ ++ | aarch64 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ @@ -12,7 +12,7 @@ # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ -+ | aarch64-* \ ++ | aarch64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ diff --git a/build_files/build_environment/patches/usd.diff b/build_files/build_environment/patches/usd.diff index 42527a4f443..dc4982ad114 100644 --- a/build_files/build_environment/patches/usd.diff +++ b/build_files/build_environment/patches/usd.diff @@ -53,3 +53,147 @@ diff -ru USD-20.11/pxr/base/tf/pxrLZ4/lz4.cpp external_usd/pxr/base/tf/pxrLZ4/lz /*-****************************** * Compression functions + +From 442d087962f762deeb8b6e49a0955753fcf9aeb9 Mon Sep 17 00:00:00 2001 +From: Tsahi Zidenberg <tsahee@amazon.com> +Date: Sun, 15 Nov 2020 15:18:24 +0000 +Subject: [PATCH 1/2] stackTrace: support aarch64/linux + +stacktrace calls syscall directly via assembler. Create compatible +aarch64 code. +--- + pxr/base/arch/stackTrace.cpp | 30 ++++++++++++++++++++++++------ + 1 file changed, 24 insertions(+), 6 deletions(-) + +diff --git a/pxr/base/arch/stackTrace.cpp b/pxr/base/arch/stackTrace.cpp +index dcc1dfd46..c11aabeb1 100644 +--- a/pxr/base/arch/stackTrace.cpp ++++ b/pxr/base/arch/stackTrace.cpp +@@ -583,7 +583,6 @@ nonLockingLinux__execve (const char *file, + char *const argv[], + char *const envp[]) + { +-#if defined(ARCH_BITS_64) + /* + * We make a direct system call here, because we can't find an + * execve which corresponds with the non-locking fork we call +@@ -594,7 +593,27 @@ nonLockingLinux__execve (const char *file, + * hangs in a threaded app. (We use the non-locking fork to get + * around problems with forking when we have had memory + * corruption.) whew. +- * ++ */ ++ ++ unsigned long result; ++ ++#if defined (__aarch64__) ++ { ++ register long __file_result asm ("x0") = (long)file; ++ register char* const* __argv asm ("x1") = argv; ++ register char* const* __envp asm ("x2") = envp; ++ register long __num_execve asm ("x8") = 221; ++ __asm__ __volatile__ ( ++ "svc 0" ++ : "=r" (__file_result) ++ : "r"(__num_execve), "r" (__file_result), "r" (__argv), "r" (__envp) ++ : "memory" ++ ); ++ result = __file_result; ++ } ++#elif defined(ARCH_CPU_INTEL) && defined(ARCH_BITS_64) ++ ++ /* + * %rdi, %rsi, %rdx, %rcx, %r8, %r9 are args 0-5 + * syscall clobbers %rcx and %r11 + * +@@ -603,7 +622,6 @@ nonLockingLinux__execve (const char *file, + * constraints to gcc. + */ + +- unsigned long result; + __asm__ __volatile__ ( + "mov %0, %%rdi \n\t" + "mov %%rcx, %%rsi \n\t" +@@ -614,6 +632,9 @@ nonLockingLinux__execve (const char *file, + : "0" (file), "c" (argv), "d" (envp) + : "memory", "cc", "r11" + ); ++#else ++#error Unknown architecture ++#endif + + if (result >= 0xfffffffffffff000) { + errno = -result; +@@ -621,9 +642,6 @@ nonLockingLinux__execve (const char *file, + } + + return result; +-#else +-#error Unknown architecture +-#endif + } + + #endif + +From a1dffe02519bb3c6ccbbe8c6c58304da5db98995 Mon Sep 17 00:00:00 2001 +From: Tsahi Zidenberg <tsahee@amazon.com> +Date: Sun, 15 Nov 2020 15:22:52 +0000 +Subject: [PATCH 2/2] timing: support aarch64/linux + +The aarch64 arch-timer is directly accessible to userspace via two +registers: +CNTVCT_EL0 - holds the current counter value +CNTFRQ_EL0 - holds the counter frequency (in Hz) +--- + pxr/base/arch/timing.cpp | 6 ++++++ + pxr/base/arch/timing.h | 6 +++++- + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/pxr/base/arch/timing.cpp b/pxr/base/arch/timing.cpp +index 27ad58fed..9022950c1 100644 +--- a/pxr/base/arch/timing.cpp ++++ b/pxr/base/arch/timing.cpp +@@ -59,6 +59,11 @@ ARCH_HIDDEN + void + Arch_InitTickTimer() + { ++#ifdef __aarch64__ ++ uint64_t counter_hz; ++ __asm __volatile("mrs %0, CNTFRQ_EL0" : "=&r" (counter_hz)); ++ Arch_NanosecondsPerTick = double(1e9) / double(counter_hz); ++#else + // NOTE: Normally ifstream would be cleaner, but it causes crashes when + // used in conjunction with DSOs and the Intel Compiler. + FILE *in; +@@ -135,6 +140,7 @@ Arch_InitTickTimer() + } + + Arch_NanosecondsPerTick = double(1e9) / double(cpuHz); ++#endif + } + #elif defined(ARCH_OS_WINDOWS) + +diff --git a/pxr/base/arch/timing.h b/pxr/base/arch/timing.h +index 67ec0d15f..6dc3e85a0 100644 +--- a/pxr/base/arch/timing.h ++++ b/pxr/base/arch/timing.h +@@ -36,7 +36,7 @@ + /// \addtogroup group_arch_SystemFunctions + ///@{ + +-#if defined(ARCH_OS_LINUX) ++#if defined(ARCH_OS_LINUX) && defined(ARCH_CPU_INTEL) + #include <x86intrin.h> + #elif defined(ARCH_OS_DARWIN) + #include <mach/mach_time.h> +@@ -69,6 +69,10 @@ ArchGetTickTime() + #elif defined(ARCH_CPU_INTEL) + // On Intel we'll use the rdtsc instruction. + return __rdtsc(); ++#elif defined (__aarch64__) ++ uint64_t result; ++ __asm __volatile("mrs %0, CNTVCT_EL0" : "=&r" (result)); ++ return result; + #else + #error Unknown architecture. + #endif diff --git a/build_files/cmake/Modules/FindEmbree.cmake b/build_files/cmake/Modules/FindEmbree.cmake index 7f7f2ae0fb3..e6105a885f3 100644 --- a/build_files/cmake/Modules/FindEmbree.cmake +++ b/build_files/cmake/Modules/FindEmbree.cmake @@ -34,7 +34,7 @@ FIND_PATH(EMBREE_INCLUDE_DIR include ) -IF(NOT (APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))) +IF(NOT (("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") OR (APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")))) SET(_embree_SIMD_COMPONENTS embree_sse42 embree_avx |