From 1282be0f8278d24809d1781713c5adcf0ef5e936 Mon Sep 17 00:00:00 2001 From: Arto Kitula Date: Thu, 9 Aug 2018 17:57:12 +0300 Subject: [PATCH] update llvm + clang to 6.0.1 and add openmp for macOS --- build_files/build_environment/CMakeLists.txt | 4 + .../build_environment/cmake/clang.cmake | 2 +- .../build_environment/cmake/llvm.cmake | 1 - .../build_environment/cmake/openmp.cmake | 32 +++++ .../build_environment/cmake/versions.cmake | 13 +- .../build_environment/patches/clang.diff | 127 ------------------ .../patches/llvm-alloca-fix.diff | 111 --------------- release/scripts/addons | 2 +- release/scripts/addons_contrib | 2 +- source/tools | 2 +- 10 files changed, 48 insertions(+), 248 deletions(-) create mode 100644 build_files/build_environment/cmake/openmp.cmake delete mode 100644 build_files/build_environment/patches/clang.diff delete mode 100644 build_files/build_environment/patches/llvm-alloca-fix.diff diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index f177560c5f6..4643c48fa72 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -68,6 +68,9 @@ include(cmake/opencollada.cmake) include(cmake/opencolorio.cmake) include(cmake/llvm.cmake) include(cmake/clang.cmake) +if(APPLE) + include(cmake/openmp.cmake) +endif() include(cmake/openimageio.cmake) include(cmake/tiff.cmake) include(cmake/flexbison.cmake) @@ -77,6 +80,7 @@ include(cmake/openvdb.cmake) include(cmake/python.cmake) include(cmake/python_site_packages.cmake) include(cmake/numpy.cmake) + if(WITH_WEBP) include(cmake/webp.cmake) endif() diff --git a/build_files/build_environment/cmake/clang.cmake b/build_files/build_environment/cmake/clang.cmake index 9a2705bc8be..b2e6da73793 100644 --- a/build_files/build_environment/cmake/clang.cmake +++ b/build_files/build_environment/cmake/clang.cmake @@ -21,12 +21,12 @@ set(CLANG_EXTRA_ARGS -DCLANG_PATH_TO_LLVM_BUILD=${LIBDIR}/llvm -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_CRT_DEBUG=MTd + -DLLVM_CONFIG=${LIBDIR}/llvm/bin/llvm-config ) ExternalProject_Add(external_clang URL ${CLANG_URI} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH MD5=${CLANG_HASH} - PATCH_COMMAND ${PATCH_CMD} -p 2 -N -R -d ${BUILD_DIR}/clang/src/external_clang < ${PATCH_DIR}/clang.diff PREFIX ${BUILD_DIR}/clang CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/clang ${DEFAULT_CMAKE_FLAGS} ${CLANG_EXTRA_ARGS} INSTALL_DIR ${LIBDIR}/clang diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake index 6c59101f543..d6f1920a114 100644 --- a/build_files/build_environment/cmake/llvm.cmake +++ b/build_files/build_environment/cmake/llvm.cmake @@ -38,7 +38,6 @@ ExternalProject_Add(ll URL_HASH MD5=${LLVM_HASH} CMAKE_GENERATOR ${LLVM_GENERATOR} PREFIX ${BUILD_DIR}/ll - PATCH_COMMAND ${PATCH_CMD} -p 0 -d ${BUILD_DIR}/ll/src/ll < ${PATCH_DIR}/llvm-alloca-fix.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/llvm ${DEFAULT_CMAKE_FLAGS} ${LLVM_EXTRA_ARGS} INSTALL_DIR ${LIBDIR}/llvm ) diff --git a/build_files/build_environment/cmake/openmp.cmake b/build_files/build_environment/cmake/openmp.cmake new file mode 100644 index 00000000000..ba8e6248126 --- /dev/null +++ b/build_files/build_environment/cmake/openmp.cmake @@ -0,0 +1,32 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + + +ExternalProject_Add(external_openmp + URL ${OPENMP_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH MD5=${OPENMP_HASH} + PREFIX ${BUILD_DIR}/openmp + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS} + INSTALL_DIR ${LIBDIR}/clang +) + +add_dependencies( + external_openmp + external_clang +) diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 361787fa956..fc58a0a8cc8 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -103,12 +103,15 @@ set(OPENCOLLADA_HASH 23db5087faed4bc4cc1dfe456c0d4701) set(OPENCOLORIO_URI https://github.com/imageworks/OpenColorIO/archive/6de971097c7f552300f669ed69ca0b6cf5a70843.zip) set(OPENCOLORIO_HASH c9de0fd98f26ce6f2e08d617ca68b8e4) -set(LLVM_VERSION 3.4.2) -set(LLVM_URI http://releases.llvm.org/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.gz) -set(LLVM_HASH a20669f75967440de949ac3b1bad439c) +set(LLVM_VERSION 6.0.1) +set(LLVM_URI http://releases.llvm.org/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz) +set(LLVM_HASH c88c98709300ce2c285391f387fecce0) -set(CLANG_URI http://releases.llvm.org/${LLVM_VERSION}/cfe-${LLVM_VERSION}.src.tar.gz) -set(CLANG_HASH 87945973b7c73038871c5f849a818588) +set(CLANG_URI http://releases.llvm.org/${LLVM_VERSION}/cfe-${LLVM_VERSION}.src.tar.xz) +set(CLANG_HASH 4e419bd4e3b55aa06d872320f754bd85) + +set(OPENMP_URI http://releases.llvm.org/${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz) +set(OPENMP_HASH 4826402ae3633c36c51ba4d0e5527d30) set(OPENIMAGEIO_VERSION 1.7.15) set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.zip) diff --git a/build_files/build_environment/patches/clang.diff b/build_files/build_environment/patches/clang.diff deleted file mode 100644 index 724e92f8163..00000000000 --- a/build_files/build_environment/patches/clang.diff +++ /dev/null @@ -1,127 +0,0 @@ ---- cfe/trunk/lib/Serialization/ASTWriter.cpp -+++ cfe/trunk/lib/Serialization/ASTWriter.cpp -@@ -56,14 +56,14 @@ - using namespace clang::serialization; - - template --static StringRef bytes(const std::vector &v) { -+static StringRef data(const std::vector &v) { - if (v.empty()) return StringRef(); - return StringRef(reinterpret_cast(&v[0]), - sizeof(T) * v.size()); - } - - template --static StringRef bytes(const SmallVectorImpl &v) { -+static StringRef data(const SmallVectorImpl &v) { - return StringRef(reinterpret_cast(v.data()), - sizeof(T) * v.size()); - } -@@ -1385,7 +1385,7 @@ - Record.push_back(INPUT_FILE_OFFSETS); - Record.push_back(InputFileOffsets.size()); - Record.push_back(UserFilesNum); -- Stream.EmitRecordWithBlob(OffsetsAbbrevCode, Record, bytes(InputFileOffsets)); -+ Stream.EmitRecordWithBlob(OffsetsAbbrevCode, Record, data(InputFileOffsets)); - } - - //===----------------------------------------------------------------------===// -@@ -1771,7 +1771,7 @@ - Record.push_back(SOURCE_LOCATION_OFFSETS); - Record.push_back(SLocEntryOffsets.size()); - Record.push_back(SourceMgr.getNextLocalOffset() - 1); // skip dummy -- Stream.EmitRecordWithBlob(SLocOffsetsAbbrev, Record, bytes(SLocEntryOffsets)); -+ Stream.EmitRecordWithBlob(SLocOffsetsAbbrev, Record, data(SLocEntryOffsets)); - - // Write the source location entry preloads array, telling the AST - // reader which source locations entries it should load eagerly. -@@ -2087,7 +2087,7 @@ - Record.push_back(MacroOffsets.size()); - Record.push_back(FirstMacroID - NUM_PREDEF_MACRO_IDS); - Stream.EmitRecordWithBlob(MacroOffsetAbbrev, Record, -- bytes(MacroOffsets)); -+ data(MacroOffsets)); - } - - void ASTWriter::WritePreprocessorDetail(PreprocessingRecord &PPRec) { -@@ -2185,7 +2185,7 @@ - Record.push_back(PPD_ENTITIES_OFFSETS); - Record.push_back(FirstPreprocessorEntityID - NUM_PREDEF_PP_ENTITY_IDS); - Stream.EmitRecordWithBlob(PPEOffsetAbbrev, Record, -- bytes(PreprocessedEntityOffsets)); -+ data(PreprocessedEntityOffsets)); - } - } - -@@ -2548,7 +2548,7 @@ - Record.push_back(CXX_BASE_SPECIFIER_OFFSETS); - Record.push_back(CXXBaseSpecifiersOffsets.size()); - Stream.EmitRecordWithBlob(BaseSpecifierOffsetAbbrev, Record, -- bytes(CXXBaseSpecifiersOffsets)); -+ data(CXXBaseSpecifiersOffsets)); - } - - //===----------------------------------------------------------------------===// -@@ -2623,7 +2623,7 @@ - Decls.push_back(std::make_pair((*D)->getKind(), GetDeclRef(*D))); - - ++NumLexicalDeclContexts; -- Stream.EmitRecordWithBlob(DeclContextLexicalAbbrev, Record, bytes(Decls)); -+ Stream.EmitRecordWithBlob(DeclContextLexicalAbbrev, Record, data(Decls)); - return Offset; - } - -@@ -2642,7 +2642,7 @@ - Record.push_back(TYPE_OFFSET); - Record.push_back(TypeOffsets.size()); - Record.push_back(FirstTypeID - NUM_PREDEF_TYPE_IDS); -- Stream.EmitRecordWithBlob(TypeOffsetAbbrev, Record, bytes(TypeOffsets)); -+ Stream.EmitRecordWithBlob(TypeOffsetAbbrev, Record, data(TypeOffsets)); - - // Write the declaration offsets array - Abbrev = new BitCodeAbbrev(); -@@ -2655,7 +2655,7 @@ - Record.push_back(DECL_OFFSET); - Record.push_back(DeclOffsets.size()); - Record.push_back(FirstDeclID - NUM_PREDEF_DECL_IDS); -- Stream.EmitRecordWithBlob(DeclOffsetAbbrev, Record, bytes(DeclOffsets)); -+ Stream.EmitRecordWithBlob(DeclOffsetAbbrev, Record, data(DeclOffsets)); - } - - void ASTWriter::WriteFileDeclIDsMap() { -@@ -2680,7 +2680,7 @@ - unsigned AbbrevCode = Stream.EmitAbbrev(Abbrev); - Record.push_back(FILE_SORTED_DECLS); - Record.push_back(FileSortedIDs.size()); -- Stream.EmitRecordWithBlob(AbbrevCode, Record, bytes(FileSortedIDs)); -+ Stream.EmitRecordWithBlob(AbbrevCode, Record, data(FileSortedIDs)); - } - - void ASTWriter::WriteComments() { -@@ -2893,7 +2893,7 @@ - Record.push_back(SelectorOffsets.size()); - Record.push_back(FirstSelectorID - NUM_PREDEF_SELECTOR_IDS); - Stream.EmitRecordWithBlob(SelectorOffsetAbbrev, Record, -- bytes(SelectorOffsets)); -+ data(SelectorOffsets)); - } - } - -@@ -3253,7 +3253,7 @@ - Record.push_back(IdentifierOffsets.size()); - Record.push_back(FirstIdentID - NUM_PREDEF_IDENT_IDS); - Stream.EmitRecordWithBlob(IdentifierOffsetAbbrev, Record, -- bytes(IdentifierOffsets)); -+ data(IdentifierOffsets)); - } - - //===----------------------------------------------------------------------===// -@@ -4046,7 +4046,7 @@ - Record.clear(); - Record.push_back(TU_UPDATE_LEXICAL); - Stream.EmitRecordWithBlob(TuUpdateLexicalAbbrev, Record, -- bytes(NewGlobalDecls)); -+ data(NewGlobalDecls)); - - // And a visible updates block for the translation unit. - Abv = new llvm::BitCodeAbbrev(); diff --git a/build_files/build_environment/patches/llvm-alloca-fix.diff b/build_files/build_environment/patches/llvm-alloca-fix.diff deleted file mode 100644 index 5394a472167..00000000000 --- a/build_files/build_environment/patches/llvm-alloca-fix.diff +++ /dev/null @@ -1,111 +0,0 @@ -Index: lib/Target/X86/X86ISelLowering.cpp -=================================================================== ---- lib/Target/X86/X86ISelLowering.cpp 2014-04-11 23:04:44.000000000 +0200 -+++ lib/Target/X86/X86ISelLowering.cpp (working copy) -@@ -15493,12 +15493,36 @@ - // non-trivial part is impdef of ESP. - - if (Subtarget->isTargetWin64()) { -+ const char *StackProbeSymbol = -+ Subtarget->isTargetCygMing() ? "___chkstk" : "__chkstk"; -+ -+ MachineInstrBuilder MIB; -+ -+ if (getTargetMachine().getCodeModel() == CodeModel::Large) { -+ // For large code model we need to do indirect call to __chkstk. -+ -+ // R11 will be used to contain the address of __chkstk. -+ // R11 is a volotiale register and assumed to be destoyed by the callee, -+ // so there is no need to save and restore it. -+ BuildMI(*BB, MI, DL, TII->get(X86::MOV64ri), X86::R11) -+ .addExternalSymbol(StackProbeSymbol); -+ // Create a call to __chkstk function which address contained in R11. -+ MIB = BuildMI(*BB, MI, DL, TII->get(X86::CALL64r)) -+ .addReg(X86::R11, RegState::Kill); -+ -+ } else { -+ -+ // For non-large code model we can do direct call to __chkstk. -+ -+ MIB = BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -+ .addExternalSymbol(StackProbeSymbol); -+ } -+ - if (Subtarget->isTargetCygMing()) { - // ___chkstk(Mingw64): - // Clobbers R10, R11, RAX and EFLAGS. - // Updates RSP. -- BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -- .addExternalSymbol("___chkstk") -+ MIB - .addReg(X86::RAX, RegState::Implicit) - .addReg(X86::RSP, RegState::Implicit) - .addReg(X86::RAX, RegState::Define | RegState::Implicit) -@@ -15507,8 +15531,7 @@ - } else { - // __chkstk(MSVCRT): does not update stack pointer. - // Clobbers R10, R11 and EFLAGS. -- BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -- .addExternalSymbol("__chkstk") -+ MIB - .addReg(X86::RAX, RegState::Implicit) - .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit); - // RAX has the offset to be subtracted from RSP. -Index: lib/Target/X86/X86FrameLowering.cpp -=================================================================== ---- lib/Target/X86/X86FrameLowering.cpp 2013-10-24 01:37:01.000000000 +0200 -+++ lib/Target/X86/X86FrameLowering.cpp (working copy) -@@ -635,25 +635,49 @@ - .addReg(X86::EAX, RegState::Kill) - .setMIFlag(MachineInstr::FrameSetup); - } -+ -+ MachineInstrBuilder MIB; - - if (Is64Bit) { -+ - // Handle the 64-bit Windows ABI case where we need to call __chkstk. - // Function prologue is responsible for adjusting the stack pointer. - BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64ri), X86::RAX) - .addImm(NumBytes) - .setMIFlag(MachineInstr::FrameSetup); -+ -+ if (TM.getCodeModel() == CodeModel::Large) { -+ // For large code model we need to do indirect call to __chkstk. -+ -+ -+ // R11 will be used to contain the address of __chkstk. -+ // R11 is a volotiale register and assumed to be destoyed by the callee, -+ // so there is no need to save and restore it. -+ BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64ri), X86::R11) -+ .addExternalSymbol(StackProbeSymbol); -+ // Create a call to __chkstk function which address contained in R11. -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::CALL64r)) -+ .addReg(X86::R11, RegState::Kill); -+ } else { -+ -+ // For non-large code model we can do direct call to __chkstk. -+ -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::W64ALLOCA)) -+ .addExternalSymbol(StackProbeSymbol); -+ } - } else { - // Allocate NumBytes-4 bytes on stack in case of isEAXAlive. - // We'll also use 4 already allocated bytes for EAX. - BuildMI(MBB, MBBI, DL, TII.get(X86::MOV32ri), X86::EAX) - .addImm(isEAXAlive ? NumBytes - 4 : NumBytes) - .setMIFlag(MachineInstr::FrameSetup); -+ -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::CALLpcrel32)) -+ .addExternalSymbol(StackProbeSymbol); - } - -- BuildMI(MBB, MBBI, DL, -- TII.get(Is64Bit ? X86::W64ALLOCA : X86::CALLpcrel32)) -- .addExternalSymbol(StackProbeSymbol) -- .addReg(StackPtr, RegState::Define | RegState::Implicit) -+ -+ MIB.addReg(StackPtr, RegState::Define | RegState::Implicit) - .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit) - .setMIFlag(MachineInstr::FrameSetup); - diff --git a/release/scripts/addons b/release/scripts/addons index 9ae033c49c1..6c3a46dc113 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 9ae033c49c1b16718eac6306bdc271a5e6e6bf38 +Subproject commit 6c3a46dc113de870a03191e4c0685238b0823acd diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib index f178e6c933a..15b25a42783 160000 --- a/release/scripts/addons_contrib +++ b/release/scripts/addons_contrib @@ -1 +1 @@ -Subproject commit f178e6c933a25c621a5cc7d92935b66cd2ec2f5d +Subproject commit 15b25a42783d1e516b5298d70b582fae2559ae17 diff --git a/source/tools b/source/tools index 87f7038ee8c..11656ebaf7f 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit 87f7038ee8c4b46a5e73a1a9065e2a9b7367f594 +Subproject commit 11656ebaf7f912cdb1b5eb39c5d0a3b5d492c1aa