diff --git a/overlay/default.nix b/overlay/default.nix index b3f79bc..61a0494 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -96,13 +96,6 @@ in { ncurses = null; }; - llvmPackages_8 = callPackage ./llvm-8 ({ - inherit (stdenvAdapters) overrideCC; - inherit (final.genodePackages.genodeSources) genodeBase; - buildLlvmTools = buildPackages.llvmPackages_8.tools; - targetLlvmLibraries = targetPackages.llvmPackages_8.libraries; - }); - llvmPackages_11 = callPackage ./llvm-11 ({ inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_11.tools; diff --git a/overlay/llvm-8/bintools.nix b/overlay/llvm-8/bintools.nix deleted file mode 100644 index 5480d00..0000000 --- a/overlay/llvm-8/bintools.nix +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ runCommand, stdenv, llvm, lld, version }: - -let - prefix = - if stdenv.hostPlatform != stdenv.targetPlatform - then "${stdenv.targetPlatform.config}-" - else ""; -in runCommand "llvm-binutils-${version}" { preferLocalBuild = true; } '' - mkdir -p $out/bin - for prog in ${lld}/bin/*; do - ln -s $prog $out/bin/${prefix}$(basename $prog) - done - for prog in ${llvm}/bin/*; do - ln -s $prog $out/bin/${prefix}$(echo $(basename $prog) | sed -e "s|llvm-||") - ln -sf $prog $out/bin/${prefix}$(basename $prog) - done - rm -f $out/bin/${prefix}cat - ln -s ${lld}/bin/lld $out/bin/${prefix}ld -'' diff --git a/overlay/llvm-8/clang/clang-xpc.patch b/overlay/llvm-8/clang/clang-xpc.patch deleted file mode 100644 index eb57d34..0000000 --- a/overlay/llvm-8/clang/clang-xpc.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 61c9b97d7b81cc2c013b423bf1763a92b14fcae3 Mon Sep 17 00:00:00 2001 -From: Jan Korous -Date: Tue, 26 Mar 2019 03:48:25 +0000 -Subject: [PATCH] [clangd][xpc][cmake] Respect explicit value of - CLANGD_BUILD_XPC - -We shouldn't prevent user from disabling XPC framework build on Darwin. -However, by keeping it on by default our CI systems also test -it by default on macOS. - -Based on user request: -http://lists.llvm.org/pipermail/cfe-dev/2019-March/061778.html - -Differential Revision: https://reviews.llvm.org/D59808 - -git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@356974 91177308-0d34-0410-b5e6-96231b3b80d8 ---- - CMakeLists.txt | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 66ebeaeeaa..514b17fb3c 100644 ---- a/tools/extra/CMakeLists.txt -+++ b/tools/extra/CMakeLists.txt -@@ -1,6 +1,13 @@ --option(CLANGD_BUILD_XPC "Build XPC Support For Clangd." OFF) --if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") -- set(CLANGD_BUILD_XPC ON CACHE BOOL "" FORCE) -+if (NOT DEFINED CLANGD_BUILD_XPC) -+ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") -+ set(CLANGD_BUILD_XPC_DEFAULT ON) -+ else () -+ set(CLANGD_BUILD_XPC_DEFAULT OFF) -+ endif () -+ -+ set(CLANGD_BUILD_XPC ${CLANGD_BUILD_XPC_DEFAULT} CACHE BOOL "Build XPC Support For Clangd." FORCE) -+ -+ unset(CLANGD_BUILD_XPC_DEFAULT) - endif () - - add_subdirectory(clang-apply-replacements) \ No newline at end of file diff --git a/overlay/llvm-8/clang/compiler-rt-baremetal.patch b/overlay/llvm-8/clang/compiler-rt-baremetal.patch deleted file mode 100644 index a4a0f21..0000000 --- a/overlay/llvm-8/clang/compiler-rt-baremetal.patch +++ /dev/null @@ -1,53 +0,0 @@ -Index: lib/Driver/ToolChains/BareMetal.cpp -=================================================================== ---- a/lib/Driver/ToolChains/BareMetal.cpp -+++ b/lib/Driver/ToolChains/BareMetal.cpp -@@ -157,7 +157,7 @@ - void BareMetal::AddLinkRuntimeLib(const ArgList &Args, - ArgStringList &CmdArgs) const { - CmdArgs.push_back(Args.MakeArgString("-lclang_rt.builtins-" + -- getTriple().getArchName() + ".a")); -+ getTriple().getArchName())); - } - - void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA, -Index: test/Driver/baremetal.cpp -=================================================================== ---- a/test/Driver/baremetal.cpp -+++ b/test/Driver/baremetal.cpp -@@ -13,7 +13,7 @@ - // CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" - // CHECK-V6M-C-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal" - // CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for" --// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m.a" -+// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" - // CHECK-V6M-C-SAME: "-o" "{{.*}}.o" - - // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -@@ -35,7 +35,7 @@ - // CHECK-V6M-DEFAULTCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" - // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}lib{{(64)?}}{{[/\\]+}}clang{{[/\\]+}}{{.*}}{{[/\\]+}}lib{{[/\\]+}}baremetal" - // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind" --// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m.a" -+// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" - // CHECK-V6M-DEFAULTCXX-SAME: "-o" "{{.*}}.o" - - // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -@@ -48,7 +48,7 @@ - // CHECK-V6M-LIBCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" - // CHECK-V6M-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}lib{{(64)?}}{{[/\\]+}}clang{{[/\\]+}}{{.*}}{{[/\\]+}}lib{{[/\\]+}}baremetal" - // CHECK-V6M-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind" --// CHECK-V6M-LIBCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m.a" -+// CHECK-V6M-LIBCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" - // CHECK-V6M-LIBCXX-SAME: "-o" "{{.*}}.o" - - // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -@@ -61,7 +61,7 @@ - // CHECK-V6M-LIBSTDCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" - // CHECK-V6M-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}lib{{(64)?}}{{[/\\]+}}clang{{[/\\]+}}{{.*}}{{[/\\]+}}lib{{[/\\]+}}baremetal" - // CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind" --// CHECK-V6M-LIBSTDCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m.a" -+// CHECK-V6M-LIBSTDCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" - // CHECK-V6M-LIBSTDCXX-SAME: "-o" "{{.*}}.o" - - // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ diff --git a/overlay/llvm-8/clang/default.nix b/overlay/llvm-8/clang/default.nix deleted file mode 100644 index 618bbf2..0000000 --- a/overlay/llvm-8/clang/default.nix +++ /dev/null @@ -1,131 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python -, fixDarwinDylibNames -, enableManpages ? false -, enablePolly ? false # TODO: get this info from llvm (passthru?) -}: - -let - self = stdenv.mkDerivation ({ - name = "clang-${version}"; - - src = fetch "cfe" "0ihnbdl058gvl2wdy45p5am55bq8ifx8m9mhcsgj9ax8yxlzvvvh"; - - unpackPhase = '' - unpackFile $src - mv cfe-${version}* clang - sourceRoot=$PWD/clang - unpackFile ${clang-tools-extra_src} - mv clang-tools-extra-* $sourceRoot/tools/extra - ''; - - nativeBuildInputs = [ cmake python ] - ++ stdenv.lib.optional enableManpages python.pkgs.sphinx; - - buildInputs = [ libxml2 llvm ] - ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; - - cmakeFlags = [ - "-DCMAKE_CXX_FLAGS=-std=c++11" - "-DCLANGD_BUILD_XPC=OFF" - ] ++ stdenv.lib.optionals enableManpages [ - "-DCLANG_INCLUDE_DOCS=ON" - "-DLLVM_ENABLE_SPHINX=ON" - "-DSPHINX_OUTPUT_MAN=ON" - "-DSPHINX_OUTPUT_HTML=OFF" - "-DSPHINX_WARNINGS_AS_ERRORS=OFF" - ] ++ stdenv.lib.optionals enablePolly [ - "-DWITH_POLLY=ON" - "-DLINK_POLLY_INTO_TOOLS=ON" - ]; - - patches = [ - ./purity.patch - ./clang-xpc.patch - # Backport for -static-pie, which the latter touches, and which is nice in - # its own right. - ./static-pie.patch - # Backport for the `--unwindlib=[libgcc|compiler-rt]` flag, which is - # needed for our bootstrapping to not interfere with C. - ./unwindlib.patch - # https://reviews.llvm.org/D51899 - ./compiler-rt-baremetal.patch - ./genode.patch - ]; - - postPatch = '' - sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \ - -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \ - lib/Driver/ToolChains/*.cpp - - # Patch for standalone doc building - sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt - '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' - sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp - '' + stdenv.lib.optionalString stdenv.hostPlatform.isDarwin '' - substituteInPlace tools/extra/clangd/CMakeLists.txt \ - --replace "NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB" FALSE - ''; - - outputs = [ "out" "lib" "python" ]; - - # Clang expects to find LLVMgold in its own prefix - postInstall = '' - if [ -e ${llvm}/lib/LLVMgold.so ]; then - ln -sv ${llvm}/lib/LLVMgold.so $out/lib - fi - - ln -sv $out/bin/clang $out/bin/cpp - - # Move libclang to 'lib' output - moveToOutput "lib/libclang.*" "$lib" - substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \ - --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." - - mkdir -p $python/bin $python/share/clang/ - mv $out/bin/{git-clang-format,scan-view} $python/bin - if [ -e $out/bin/set-xcode-analyzer ]; then - mv $out/bin/set-xcode-analyzer $python/bin - fi - mv $out/share/clang/*.py $python/share/clang - rm $out/bin/c-index-test - ''; - - enableParallelBuilding = true; - - passthru = { - isClang = true; - inherit llvm; - } // stdenv.lib.optionalAttrs (stdenv.targetPlatform.isLinux || (stdenv.cc.isGNU && stdenv.cc.cc ? gcc)) { - gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; - }; - - meta = { - description = "A c, c++, objective-c, and objective-c++ frontend for the llvm compiler"; - homepage = http://llvm.org/; - license = stdenv.lib.licenses.ncsa; - platforms = stdenv.lib.platforms.all; - }; - } // stdenv.lib.optionalAttrs enableManpages { - name = "clang-manpages-${version}"; - - buildPhase = '' - make docs-clang-man - ''; - - installPhase = '' - mkdir -p $out/share/man/man1 - # Manually install clang manpage - cp docs/man/*.1 $out/share/man/man1/ - ''; - - outputs = [ "out" ]; - - doCheck = false; - - meta.description = "man page for Clang ${version}"; - }); -in self diff --git a/overlay/llvm-8/clang/genode.patch b/overlay/llvm-8/clang/genode.patch deleted file mode 100644 index 6fbd4c7..0000000 --- a/overlay/llvm-8/clang/genode.patch +++ /dev/null @@ -1,375 +0,0 @@ -diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td -index d02d9744d..b57a7cb05 100644 ---- a/include/clang/Driver/Options.td -+++ b/include/clang/Driver/Options.td -@@ -2452,6 +2452,7 @@ def nolibc : Flag<["-"], "nolibc">; - def nomultidefs : Flag<["-"], "nomultidefs">; - def nopie : Flag<["-"], "nopie">; - def no_pie : Flag<["-"], "no-pie">, Alias; -+def noposix : Flag<["-"], "noposix">; - def noprebind : Flag<["-"], "noprebind">; - def noseglinkedit : Flag<["-"], "noseglinkedit">; - def nostartfiles : Flag<["-"], "nostartfiles">; -diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp -index 3c139d724..89d6df3f5 100644 ---- a/lib/Basic/Targets.cpp -+++ b/lib/Basic/Targets.cpp -@@ -147,6 +147,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); - case llvm::Triple::NetBSD: -@@ -171,6 +173,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); - case llvm::Triple::NetBSD: -@@ -528,6 +532,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::KFreeBSD: - return new KFreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Solaris: -diff --git a/lib/Basic/Targets/OSTargets.h b/lib/Basic/Targets/OSTargets.h -index 09867d82c..f67151a13 100644 ---- a/lib/Basic/Targets/OSTargets.h -+++ b/lib/Basic/Targets/OSTargets.h -@@ -760,6 +760,26 @@ public: - } - }; - -+// Genode Target -+template -+class LLVM_LIBRARY_VISIBILITY GenodeTargetInfo : public OSTargetInfo { -+protected: -+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, -+ MacroBuilder &Builder) const override { -+ Builder.defineMacro("__GENODE__"); -+ Builder.defineMacro("__ELF__"); -+ // Required by the libc++ locale support. -+ if (Opts.CPlusPlus) -+ Builder.defineMacro("_GNU_SOURCE"); -+ } -+ -+public: -+ GenodeTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) -+ : OSTargetInfo(Triple, Opts) { -+ this->MCountName = "__mcount"; -+ } -+}; -+ - // WebAssembly target - template - class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo -diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt -index 4793a1f90..4691b898e 100644 ---- a/lib/Driver/CMakeLists.txt -+++ b/lib/Driver/CMakeLists.txt -@@ -44,6 +44,7 @@ add_clang_library(clangDriver - ToolChains/DragonFly.cpp - ToolChains/FreeBSD.cpp - ToolChains/Fuchsia.cpp -+ ToolChains/Genode.cpp - ToolChains/Gnu.cpp - ToolChains/Haiku.cpp - ToolChains/HIP.cpp -diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp -index a784e218f..881b78abc 100644 ---- a/lib/Driver/Driver.cpp -+++ b/lib/Driver/Driver.cpp -@@ -22,6 +22,7 @@ - #include "ToolChains/DragonFly.h" - #include "ToolChains/FreeBSD.h" - #include "ToolChains/Fuchsia.h" -+#include "ToolChains/Genode.h" - #include "ToolChains/Gnu.h" - #include "ToolChains/HIP.h" - #include "ToolChains/Haiku.h" -@@ -4570,6 +4571,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, - case llvm::Triple::Solaris: - TC = llvm::make_unique(*this, Target, Args); - break; -+ case llvm::Triple::Genode: -+ TC = llvm::make_unique(*this, Target, Args); -+ break; - case llvm::Triple::AMDHSA: - TC = llvm::make_unique(*this, Target, Args); - break; -diff --git a/lib/Driver/SanitizerArgs.cpp b/lib/Driver/SanitizerArgs.cpp -index 1a46073aa..72b6f7389 100644 ---- a/lib/Driver/SanitizerArgs.cpp -+++ b/lib/Driver/SanitizerArgs.cpp -@@ -693,7 +693,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, - ImplicitCfiRuntime = TC.getTriple().isAndroid(); - - if (AllAddedKinds & Address) { -- NeedPIE |= TC.getTriple().isOSFuchsia(); -+ NeedPIE |= TC.getTriple().isOSFuchsia() | TC.getTriple().isOSGenode(); - if (Arg *A = - Args.getLastArg(options::OPT_fsanitize_address_field_padding)) { - StringRef S = A->getValue(); -diff --git a/lib/Driver/ToolChains/Genode.cpp b/lib/Driver/ToolChains/Genode.cpp -new file mode 100644 -index 000000000..488863cb4 ---- /dev/null -+++ b/lib/Driver/ToolChains/Genode.cpp -@@ -0,0 +1,147 @@ -+//===--- Genode.cpp - Genode ToolChain Implementations ----------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+ -+#include "Genode.h" -+#include "InputInfo.h" -+#include "CommonArgs.h" -+#include "clang/Driver/Compilation.h" -+#include "clang/Driver/Driver.h" -+#include "clang/Driver/Options.h" -+#include "llvm/ADT/SmallString.h" -+#include "llvm/Option/ArgList.h" -+#include "llvm/Support/Path.h" -+ -+using namespace clang::driver; -+using namespace clang::driver::tools; -+using namespace clang::driver::toolchains; -+using namespace clang; -+using namespace llvm::opt; -+ -+void genode::Linker::ConstructJob(Compilation &C, const JobAction &JA, -+ const InputInfo &Output, -+ const InputInfoList &Inputs, -+ const llvm::opt::ArgList &Args, -+ const char *LinkingOutput) const { -+ const toolchains::Genode &ToolChain = -+ static_cast(getToolChain()); -+ const Driver &D = ToolChain.getDriver(); -+ const llvm::Triple::ArchType Arch = ToolChain.getArch(); -+ ArgStringList CmdArgs; -+ -+ if (!D.SysRoot.empty()) -+ CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); -+ -+ // Explicitly set the linker emulation for platforms that might not -+ // be the default emulation for the linker. -+ switch (Arch) { -+ case llvm::Triple::x86: -+ CmdArgs.push_back("-melf_i386"); -+ break; -+ case llvm::Triple::x86_64: -+ CmdArgs.push_back("-melf_x86_64"); -+ break; -+ case llvm::Triple::riscv32: -+ CmdArgs.push_back("-melf32lriscv"); -+ break; -+ case llvm::Triple::riscv64: -+ CmdArgs.push_back("-melf64lriscv"); -+ break; -+ default: -+ break; -+ } -+ -+ CmdArgs.push_back("--eh-frame-hdr"); -+ CmdArgs.push_back("--gc-sections"); -+ CmdArgs.push_back("-zmax-page-size=0x1000"); -+ -+ CmdArgs.push_back("-Ttext=0x01000000"); -+ -+ Args.AddAllArgs(CmdArgs, options::OPT_L); -+ ToolChain.AddFilePathLibArgs(Args, CmdArgs); -+ Args.AddAllArgs(CmdArgs, options::OPT_T_Group); -+ Args.AddAllArgs(CmdArgs, options::OPT_e); -+ Args.AddAllArgs(CmdArgs, options::OPT_s); -+ Args.AddAllArgs(CmdArgs, options::OPT_t); -+ Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag); -+ -+ if (Args.hasArg(options::OPT_static)) { -+ CmdArgs.push_back("-Bstatic"); -+ } else { -+ if (Args.hasArg(options::OPT_shared)) { -+ CmdArgs.push_back(Args.MakeArgString("-shared")); -+ CmdArgs.push_back(Args.MakeArgString("-T" + D.SysRoot + "/ld/genode_rel.ld")); -+ } else { -+ CmdArgs.push_back(Args.MakeArgString("-T" + D.SysRoot + "/ld/genode_dyn.ld")); -+ CmdArgs.push_back(Args.MakeArgString("--dynamic-list=" + D.SysRoot + "/ld/genode_dyn.dl")); -+ CmdArgs.push_back("--dynamic-linker=ld.lib.so"); -+ } -+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { -+ CmdArgs.push_back("-l:ld.lib.so"); -+ } -+ } -+ -+ if (Output.isFilename()) { -+ CmdArgs.push_back("-o"); -+ CmdArgs.push_back(Output.getFilename()); -+ } else { -+ assert(Output.isNothing() && "Invalid output."); -+ } -+ -+ AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); -+ -+ AddRunTimeLibs(ToolChain, D, CmdArgs, Args); -+ -+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs, options::OPT_noposix)) { -+ CmdArgs.push_back("-lc"); -+ if (!Args.hasArg(options::OPT_shared)) { -+ CmdArgs.push_back("-lposix"); -+ } -+ } -+ -+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); -+ C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs, Inputs)); -+} -+ -+Genode::Genode(const Driver &D, const llvm::Triple &Triple, -+ const llvm::opt::ArgList &Args) -+ : Generic_ELF(D, Triple, Args) { -+ SmallString<128> P(getDriver().Dir); -+ llvm::sys::path::append(P, "..", getTriple().str(), "lib"); -+ getFilePaths().push_back(P.str()); -+} -+ -+void Genode::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const { -+ SmallString<128> P(getDriver().Dir); -+ llvm::sys::path::append(P, "..", getTriple().str(), "include/c++/v1"); -+ addSystemInclude(DriverArgs, CC1Args, P.str()); -+} -+ -+bool Genode::isPIEDefault() const { -+ switch (getTriple().getArch()) { -+ case llvm::Triple::aarch64: -+ case llvm::Triple::x86_64: -+ return true; -+ default: -+ return false; -+ } -+} -+ -+SanitizerMask Genode::getSupportedSanitizers() const { -+ return Generic_ELF::getSupportedSanitizers(); -+} -+ -+SanitizerMask Genode::getDefaultSanitizers() const { -+ return Generic_ELF::getDefaultSanitizers(); -+} -+ -+Tool *Genode::buildLinker() const { -+ return new tools::genode::Linker(*this); -+} -diff --git a/lib/Driver/ToolChains/Genode.h b/lib/Driver/ToolChains/Genode.h -new file mode 100644 -index 000000000..144f4f99a ---- /dev/null -+++ b/lib/Driver/ToolChains/Genode.h -@@ -0,0 +1,69 @@ -+//===----- Genode.h - Genode ToolChain Implementations ----------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+ -+#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -+#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -+ -+#include "Gnu.h" -+#include "clang/Driver/Tool.h" -+#include "clang/Driver/ToolChain.h" -+ -+namespace clang { -+namespace driver { -+namespace tools { -+ -+//// genode -- Directly call GNU Binutils linker -+namespace genode { -+class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { -+public: -+ Linker(const ToolChain &TC) : GnuTool("genode::Linker", "linker", TC) {} -+ -+ bool hasIntegratedCPP() const override { return false; } -+ bool isLinkJob() const override { return true; } -+ -+ void ConstructJob(Compilation &C, const JobAction &JA, -+ const InputInfo &Output, const InputInfoList &Inputss, -+ const llvm::opt::ArgList &Args, -+ const char *LinkingOutput) const override; -+}; -+} // end namespace genode -+} // end namespace tools -+ -+namespace toolchains { -+ -+class LLVM_LIBRARY_VISIBILITY Genode : public Generic_ELF { -+public: -+ Genode(const Driver &D, const llvm::Triple &Triple, -+ const llvm::opt::ArgList &Args); -+ bool HasNativeLLVMSupport() const override { return true; } -+ -+ bool IsMathErrnoDefault() const override { return true; } -+ -+ CXXStdlibType -+ GetCXXStdlibType(const llvm::opt::ArgList &Args) const override { -+ return ToolChain::CST_Libcxx; -+ } -+ void addLibCxxIncludePaths( -+ const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const override; -+ -+ bool isPIEDefault() const override; -+ SanitizerMask getSupportedSanitizers() const override; -+ SanitizerMask getDefaultSanitizers() const override; -+ -+protected: -+ Tool *buildLinker() const override; -+}; -+ -+} // end namespace toolchains -+} // end namespace driver -+} // end namespace clang -+ -+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp -index 67842b5dc..26a2c65fe 100644 ---- a/lib/Frontend/InitHeaderSearch.cpp -+++ b/lib/Frontend/InitHeaderSearch.cpp -@@ -221,6 +221,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, - case llvm::Triple::PS4: - case llvm::Triple::ELFIAMCU: - case llvm::Triple::Fuchsia: -+ case llvm::Triple::Genode: - break; - case llvm::Triple::Win32: - if (triple.getEnvironment() != llvm::Triple::Cygnus) -@@ -329,6 +330,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, - case llvm::Triple::NaCl: - case llvm::Triple::ELFIAMCU: - case llvm::Triple::Fuchsia: -+ case llvm::Triple::Genode: - break; - case llvm::Triple::PS4: { - // gets prepended later in AddPath(). -diff --git a/test/Driver/genode.c b/test/Driver/genode.c -new file mode 100644 -index 000000000..e69de29bb -diff --git a/test/Driver/genode.cpp b/test/Driver/genode.cpp -new file mode 100644 -index 000000000..e69de29bb diff --git a/overlay/llvm-8/clang/purity.patch b/overlay/llvm-8/clang/purity.patch deleted file mode 100644 index b30d0d0..0000000 --- a/overlay/llvm-8/clang/purity.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001 -From: Will Dietz -Date: Thu, 18 May 2017 11:56:12 -0500 -Subject: [PATCH] "purity" patch for 5.0 - ---- - lib/Driver/ToolChains/Gnu.cpp | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp -index fe3c0191bb..c6a482bece 100644 ---- a/lib/Driver/ToolChains/Gnu.cpp -+++ b/lib/Driver/ToolChains/Gnu.cpp -@@ -494,13 +494,6 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - if (!Args.hasArg(options::OPT_static)) { - if (Args.hasArg(options::OPT_rdynamic)) - CmdArgs.push_back("-export-dynamic"); -- -- if (!Args.hasArg(options::OPT_shared)) { -- const std::string Loader = -- D.DyldPrefix + ToolChain.getDynamicLinker(Args); -- CmdArgs.push_back("-dynamic-linker"); -- CmdArgs.push_back(Args.MakeArgString(Loader)); -- } - } - - CmdArgs.push_back("-o"); --- -2.11.0 - diff --git a/overlay/llvm-8/clang/static-pie.patch b/overlay/llvm-8/clang/static-pie.patch deleted file mode 100644 index d1f86a1..0000000 --- a/overlay/llvm-8/clang/static-pie.patch +++ /dev/null @@ -1,157 +0,0 @@ -commit 7a9842bc92921e79b84630045276861be90b2d47 -Author: Siva Chandra -Date: Wed Feb 20 19:07:04 2019 +0000 - - [Clang Driver] Add support for "-static-pie" argument to the Clang driver. - - Summary: This change mimics GCC's support for the "-static-pie" argument. - - Subscribers: cfe-commits - - Tags: #clang - - Differential Revision: https://reviews.llvm.org/D58307 - - git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@354502 91177308-0d34-0410-b5e6-96231b3b80d8 - (cherry picked from commit 7d6cd7825e6883f8650e32b07f3750824c2cef62) - -diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td -index d02d9744d7..75a21e66c7 100644 ---- a/include/clang/Driver/Options.td -+++ b/include/clang/Driver/Options.td -@@ -2502,6 +2502,7 @@ def pthread : Flag<["-"], "pthread">, Flags<[CC1Option]>, - def no_pthread : Flag<["-"], "no-pthread">, Flags<[CC1Option]>; - def p : Flag<["-"], "p">; - def pie : Flag<["-"], "pie">; -+def static_pie : Flag<["-"], "static-pie">; - def read__only__relocs : Separate<["-"], "read_only_relocs">; - def remap : Flag<["-"], "remap">; - def rewrite_objc : Flag<["-"], "rewrite-objc">, Flags<[DriverOption,CC1Option]>, -diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp -index d7e316befa..85ffc1618d 100644 ---- a/lib/Driver/ToolChains/CommonArgs.cpp -+++ b/lib/Driver/ToolChains/CommonArgs.cpp -@@ -1138,19 +1138,22 @@ static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, - bool isCygMing = Triple.isOSCygMing(); - bool IsIAMCU = Triple.isOSIAMCU(); - bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) || -- Args.hasArg(options::OPT_static); -+ Args.hasArg(options::OPT_static) || -+ Args.hasArg(options::OPT_static_pie); - - bool SharedLibgcc = Args.hasArg(options::OPT_shared_libgcc); - bool UnspecifiedLibgcc = !StaticLibgcc && !SharedLibgcc; - - // Gcc adds libgcc arguments in various ways: - // -- // gcc : -lgcc --as-needed -lgcc_s --no-as-needed -- // g++ : -lgcc_s -lgcc -- // gcc shared: -lgcc_s -lgcc -- // g++ shared: -lgcc_s -lgcc -- // gcc static: -lgcc -lgcc_eh -- // g++ static: -lgcc -lgcc_eh -+ // gcc : -lgcc --as-needed -lgcc_s --no-as-needed -+ // g++ : -lgcc_s -lgcc -+ // gcc shared: -lgcc_s -lgcc -+ // g++ shared: -lgcc_s -lgcc -+ // gcc static: -lgcc -lgcc_eh -+ // g++ static: -lgcc -lgcc_eh -+ // gcc static-pie: -lgcc -lgcc_eh -+ // g++ static-pie: -lgcc -lgcc_eh - // - // Also, certain targets need additional adjustments. - -diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp -index 69dba8fec8..0faa0bb473 100644 ---- a/lib/Driver/ToolChains/Gnu.cpp -+++ b/lib/Driver/ToolChains/Gnu.cpp -@@ -334,6 +334,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - const bool isAndroid = ToolChain.getTriple().isAndroid(); - const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU(); - const bool IsPIE = getPIE(Args, ToolChain); -+ const bool IsStaticPIE = Args.hasArg(options::OPT_static_pie); - const bool HasCRTBeginEndFiles = - ToolChain.getTriple().hasEnvironment() || - (ToolChain.getTriple().getVendor() != llvm::Triple::MipsTechnologies); -@@ -354,6 +355,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - if (IsPIE) - CmdArgs.push_back("-pie"); - -+ if (IsStaticPIE) { -+ CmdArgs.push_back("-static"); -+ CmdArgs.push_back("-pie"); -+ CmdArgs.push_back("--no-dynamic-linker"); -+ } -+ - if (Args.hasArg(options::OPT_rdynamic)) - CmdArgs.push_back("-export-dynamic"); - -@@ -415,6 +422,8 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - crt1 = "gcrt1.o"; - else if (IsPIE) - crt1 = "Scrt1.o"; -+ else if (IsStaticPIE) -+ crt1 = "rcrt1.o"; - else - crt1 = "crt1.o"; - } -@@ -432,7 +441,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; - else if (Args.hasArg(options::OPT_shared)) - crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; -- else if (IsPIE) -+ else if (IsPIE || IsStaticPIE) - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o"; - else - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; -@@ -483,7 +492,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - - if (!Args.hasArg(options::OPT_nostdlib)) { - if (!Args.hasArg(options::OPT_nodefaultlibs)) { -- if (Args.hasArg(options::OPT_static)) -+ if (Args.hasArg(options::OPT_static) || IsStaticPIE) - CmdArgs.push_back("--start-group"); - - if (NeedsSanitizerDeps) -@@ -518,7 +527,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - if (IsIAMCU) - CmdArgs.push_back("-lgloss"); - -- if (Args.hasArg(options::OPT_static)) -+ if (Args.hasArg(options::OPT_static) || IsStaticPIE) - CmdArgs.push_back("--end-group"); - else - AddRunTimeLibs(ToolChain, D, CmdArgs, Args); -@@ -535,7 +544,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - const char *crtend; - if (Args.hasArg(options::OPT_shared)) - crtend = isAndroid ? "crtend_so.o" : "crtendS.o"; -- else if (IsPIE) -+ else if (IsPIE || IsStaticPIE) - crtend = isAndroid ? "crtend_android.o" : "crtendS.o"; - else - crtend = isAndroid ? "crtend_android.o" : "crtend.o"; -diff --git a/test/Driver/linux-ld.c b/test/Driver/linux-ld.c -index 3ab81be490..800f782523 100644 ---- a/test/Driver/linux-ld.c -+++ b/test/Driver/linux-ld.c -@@ -176,6 +176,19 @@ - // CHECK-CLANG-NO-LIBGCC-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" - // CHECK-CLANG-NO-LIBGCC-STATIC: "--start-group" "-lgcc" "-lgcc_eh" "-lc" "--end-group" - // -+// RUN: %clang -static-pie -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=platform \ -+// RUN: --gcc-toolchain="" \ -+// RUN: --sysroot=%S/Inputs/basic_linux_tree \ -+// RUN: | FileCheck --check-prefix=CHECK-CLANG-LD-STATIC-PIE %s -+// CHECK-CLANG-LD-STATIC-PIE: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" -+// CHECK-CLANG-LD-STATIC-PIE: "-static" -+// CHECK-CLANG-LD-STATIC-PIE: "-pie" -+// CHECK-CLANG-LD-STATIC-PIE: "--no-dynamic-linker" -+// CHECK-CLANG-LD-STATIC-PIE: "-m" "elf_x86_64" -+// CHECK-CLANG-LD-STATIC-PIE: "{{.*}}rcrt1.o" -+// CHECK-CLANG-LD-STATIC-PIE: "--start-group" "-lgcc" "-lgcc_eh" "-lc" "--end-group" -+// - // RUN: %clang -dynamic -no-canonical-prefixes %s -### -o %t.o 2>&1 \ - // RUN: --target=x86_64-unknown-linux -rtlib=platform \ - // RUN: --gcc-toolchain="" \ diff --git a/overlay/llvm-8/clang/unwindlib.patch b/overlay/llvm-8/clang/unwindlib.patch deleted file mode 100644 index 6958fce..0000000 --- a/overlay/llvm-8/clang/unwindlib.patch +++ /dev/null @@ -1,372 +0,0 @@ -commit cd5603a4767277a29d3e67a9c3f2a5d2129cd973 -Author: Sterling Augustine -Date: Tue Mar 19 20:01:59 2019 +0000 - - Add --unwindlib=[libgcc|compiler-rt] to parallel --rtlib= [take 2] - - "clang++ hello.cc --rtlib=compiler-rt" - - now can works without specifying additional unwind or exception - handling libraries. - - This reworked version of the feature no longer modifies today's default - unwind library for compiler-rt: which is nothing. Rather, a user - can specify -DCLANG_DEFAULT_UNWINDLIB=libunwind when configuring - the compiler. - - This should address the issues from the previous version. - - Update tests for new --unwindlib semantics. - - Differential Revision: https://reviews.llvm.org/D59109 - - git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@356508 91177308-0d34-0410-b5e6-96231b3b80d8 - (cherry picked from commit 344aa82a52f2fae527f58284567ae305a314f7a8) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index c2016a45ca..edeb2b66a1 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -261,6 +261,24 @@ if (NOT(CLANG_DEFAULT_RTLIB STREQUAL "" OR - "Default runtime library to use (\"libgcc\" or \"compiler-rt\", empty for platform default)" FORCE) - endif() - -+set(CLANG_DEFAULT_UNWINDLIB "" CACHE STRING -+ "Default unwind library to use (\"none\" \"libgcc\" or \"libunwind\", empty to match runtime library.)") -+if (CLANG_DEFAULT_UNWINDLIB STREQUAL "") -+ if (CLANG_DEFAULT_RTLIB STREQUAL "libgcc") -+ set (CLANG_DEFAULT_UNWINDLIB "libgcc" CACHE STRING "" FORCE) -+ elseif (CLANG_DEFAULT_RTLIBS STREQUAL "libunwind") -+ set (CLANG_DEFAULT_UNWINDLIB "none" CACHE STRING "" FORCE) -+ endif() -+endif() -+ -+if (NOT(CLANG_DEFAULT_UNWINDLIB STREQUAL "none" OR -+ CLANG_DEFAULT_UNWINDLIB STREQUAL "libgcc" OR -+ CLANG_DEFAULT_UNWINDLIB STREQUAL "libunwind")) -+ message(WARNING "Resetting default unwindlib to use platform default") -+ set(CLANG_DEFAULT_UNWINDLIB "" CACHE STRING -+ "Default unwind library to use (\"none\" \"libgcc\" or \"libunwind\", empty for none)" FORCE) -+endif() -+ - set(CLANG_DEFAULT_OBJCOPY "objcopy" CACHE STRING - "Default objcopy executable to use.") - -diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td -index 5475e28ed7..15971210e4 100644 ---- a/include/clang/Basic/DiagnosticDriverKinds.td -+++ b/include/clang/Basic/DiagnosticDriverKinds.td -@@ -52,6 +52,10 @@ def err_drv_invalid_rtlib_name : Error< - "invalid runtime library name in argument '%0'">; - def err_drv_unsupported_rtlib_for_platform : Error< - "unsupported runtime library '%0' for platform '%1'">; -+def err_drv_invalid_unwindlib_name : Error< -+ "invalid unwind library name in argument '%0'">; -+def err_drv_incompatible_unwindlib : Error< -+ "--rtlib=libgcc requires --unwindlib=libgcc">; - def err_drv_invalid_stdlib_name : Error< - "invalid library name in argument '%0'">; - def err_drv_invalid_output_with_multiple_archs : Error< -diff --git a/include/clang/Config/config.h.cmake b/include/clang/Config/config.h.cmake -index 1d624450b9..2d4cb747e8 100644 ---- a/include/clang/Config/config.h.cmake -+++ b/include/clang/Config/config.h.cmake -@@ -23,6 +23,9 @@ - /* Default runtime library to use. */ - #define CLANG_DEFAULT_RTLIB "${CLANG_DEFAULT_RTLIB}" - -+/* Default unwind library to use. */ -+#define CLANG_DEFAULT_UNWINDLIB "${CLANG_DEFAULT_UNWINDLIB}" -+ - /* Default objcopy to use */ - #define CLANG_DEFAULT_OBJCOPY "${CLANG_DEFAULT_OBJCOPY}" - -diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td -index 75a21e66c7..4da0e54965 100644 ---- a/include/clang/Driver/Options.td -+++ b/include/clang/Driver/Options.td -@@ -2570,6 +2570,8 @@ def std_EQ : Joined<["-", "--"], "std=">, Flags<[CC1Option]>, - }]>; - def stdlib_EQ : Joined<["-", "--"], "stdlib=">, Flags<[CC1Option]>, - HelpText<"C++ standard library to use">, Values<"libc++,libstdc++,platform">; -+def unwindlib_EQ : Joined<["-", "--"], "unwindlib=">, Flags<[CC1Option]>, -+ HelpText<"Unwind library to use">, Values<"libgcc,unwindlib,platform">; - def sub__library : JoinedOrSeparate<["-"], "sub_library">; - def sub__umbrella : JoinedOrSeparate<["-"], "sub_umbrella">; - def system_header_prefix : Joined<["--"], "system-header-prefix=">, -diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h -index d5f75b8271..4bedf760eb 100644 ---- a/include/clang/Driver/ToolChain.h -+++ b/include/clang/Driver/ToolChain.h -@@ -100,6 +100,12 @@ public: - RLT_Libgcc - }; - -+ enum UnwindLibType { -+ UNW_None, -+ UNW_CompilerRT, -+ UNW_Libgcc -+ }; -+ - enum RTTIMode { - RM_Enabled, - RM_Disabled, -@@ -368,6 +374,10 @@ public: - return ToolChain::CST_Libstdcxx; - } - -+ virtual UnwindLibType GetDefaultUnwindLibType() const { -+ return ToolChain::UNW_None; -+ } -+ - virtual std::string getCompilerRTPath() const; - - virtual std::string getCompilerRT(const llvm::opt::ArgList &Args, -@@ -512,6 +522,10 @@ public: - // given compilation arguments. - virtual CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const; - -+ // GetUnwindLibType - Determine the unwind library type to use with the -+ // given compilation arguments. -+ virtual UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const; -+ - /// AddClangCXXStdlibIncludeArgs - Add the clang -cc1 level arguments to set - /// the include paths to use for the given C++ standard library type. - virtual void -diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp -index 88a627eab6..d82423f4a8 100644 ---- a/lib/Driver/ToolChain.cpp -+++ b/lib/Driver/ToolChain.cpp -@@ -680,6 +680,33 @@ ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType( - return GetDefaultRuntimeLibType(); - } - -+ToolChain::UnwindLibType ToolChain::GetUnwindLibType( -+ const ArgList &Args) const { -+ const Arg *A = Args.getLastArg(options::OPT_unwindlib_EQ); -+ StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_UNWINDLIB; -+ -+ if (LibName == "none") -+ return ToolChain::UNW_None; -+ else if (LibName == "platform" || LibName == "") { -+ ToolChain::RuntimeLibType RtLibType = GetRuntimeLibType(Args); -+ if (RtLibType == ToolChain::RLT_CompilerRT) -+ return ToolChain::UNW_None; -+ else if (RtLibType == ToolChain::RLT_Libgcc) -+ return ToolChain::UNW_Libgcc; -+ } else if (LibName == "libunwind") { -+ if (GetRuntimeLibType(Args) == RLT_Libgcc) -+ getDriver().Diag(diag::err_drv_incompatible_unwindlib); -+ return ToolChain::UNW_CompilerRT; -+ } else if (LibName == "libgcc") -+ return ToolChain::UNW_Libgcc; -+ -+ if (A) -+ getDriver().Diag(diag::err_drv_invalid_unwindlib_name) -+ << A->getAsString(Args); -+ -+ return GetDefaultUnwindLibType(); -+} -+ - ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{ - const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ); - StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB; -diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp -index 85ffc1618d..9fd29726a4 100644 ---- a/lib/Driver/ToolChains/CommonArgs.cpp -+++ b/lib/Driver/ToolChains/CommonArgs.cpp -@@ -1132,47 +1132,80 @@ bool tools::isObjCAutoRefCount(const ArgList &Args) { - return Args.hasFlag(options::OPT_fobjc_arc, options::OPT_fno_objc_arc, false); - } - --static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, -- ArgStringList &CmdArgs, const ArgList &Args) { -- bool isAndroid = Triple.isAndroid(); -- bool isCygMing = Triple.isOSCygMing(); -- bool IsIAMCU = Triple.isOSIAMCU(); -- bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) || -- Args.hasArg(options::OPT_static) || -- Args.hasArg(options::OPT_static_pie); -- -- bool SharedLibgcc = Args.hasArg(options::OPT_shared_libgcc); -- bool UnspecifiedLibgcc = !StaticLibgcc && !SharedLibgcc; -- -- // Gcc adds libgcc arguments in various ways: -- // -- // gcc : -lgcc --as-needed -lgcc_s --no-as-needed -- // g++ : -lgcc_s -lgcc -- // gcc shared: -lgcc_s -lgcc -- // g++ shared: -lgcc_s -lgcc -- // gcc static: -lgcc -lgcc_eh -- // g++ static: -lgcc -lgcc_eh -- // gcc static-pie: -lgcc -lgcc_eh -- // g++ static-pie: -lgcc -lgcc_eh -- // -- // Also, certain targets need additional adjustments. -+enum class LibGccType { UnspecifiedLibGcc, StaticLibGcc, SharedLibGcc }; -+ -+static LibGccType getLibGccType(const ArgList &Args) { -+ bool Static = Args.hasArg(options::OPT_static_libgcc) || -+ Args.hasArg(options::OPT_static) || -+ Args.hasArg(options::OPT_static_pie); -+ -+ bool Shared = Args.hasArg(options::OPT_shared_libgcc); -+ if (Shared) -+ return LibGccType::SharedLibGcc; -+ if (Static) -+ return LibGccType::StaticLibGcc; -+ return LibGccType::UnspecifiedLibGcc; -+} - -- bool LibGccFirst = (D.CCCIsCC() && UnspecifiedLibgcc) || StaticLibgcc; -- if (LibGccFirst) -- CmdArgs.push_back("-lgcc"); -+// Gcc adds libgcc arguments in various ways: -+// -+// gcc : -lgcc --as-needed -lgcc_s --no-as-needed -+// g++ : -lgcc_s -lgcc -+// gcc shared: -lgcc_s -lgcc -+// g++ shared: -lgcc_s -lgcc -+// gcc static: -lgcc -lgcc_eh -+// g++ static: -lgcc -lgcc_eh -+// gcc static-pie: -lgcc -lgcc_eh -+// g++ static-pie: -lgcc -lgcc_eh -+// -+// Also, certain targets need additional adjustments. -+ -+static void AddUnwindLibrary(const ToolChain &TC, const Driver &D, -+ ArgStringList &CmdArgs, const ArgList &Args) { -+ ToolChain::UnwindLibType UNW = TC.GetUnwindLibType(Args); -+ // Targets that don't use unwind libraries. -+ if (TC.getTriple().isAndroid() || TC.getTriple().isOSIAMCU() || -+ TC.getTriple().isOSBinFormatWasm() || -+ UNW == ToolChain::UNW_None) -+ return; - -- bool AsNeeded = D.CCCIsCC() && UnspecifiedLibgcc && !isAndroid && !isCygMing; -+ LibGccType LGT = getLibGccType(Args); -+ bool AsNeeded = D.CCCIsCC() && LGT == LibGccType::UnspecifiedLibGcc && -+ !TC.getTriple().isAndroid() && !TC.getTriple().isOSCygMing(); - if (AsNeeded) - CmdArgs.push_back("--as-needed"); - -- if ((UnspecifiedLibgcc || SharedLibgcc) && !isAndroid) -- CmdArgs.push_back("-lgcc_s"); -- -- else if (StaticLibgcc && !isAndroid && !IsIAMCU) -- CmdArgs.push_back("-lgcc_eh"); -+ switch (UNW) { -+ case ToolChain::UNW_None: -+ return; -+ case ToolChain::UNW_Libgcc: { -+ LibGccType LGT = getLibGccType(Args); -+ if (LGT == LibGccType::UnspecifiedLibGcc || LGT == LibGccType::SharedLibGcc) -+ CmdArgs.push_back("-lgcc_s"); -+ else if (LGT == LibGccType::StaticLibGcc) -+ CmdArgs.push_back("-lgcc_eh"); -+ break; -+ } -+ case ToolChain::UNW_CompilerRT: -+ CmdArgs.push_back("-lunwind"); -+ break; -+ } - - if (AsNeeded) - CmdArgs.push_back("--no-as-needed"); -+} -+ -+static void AddLibgcc(const ToolChain &TC, const Driver &D, -+ ArgStringList &CmdArgs, const ArgList &Args) { -+ bool isAndroid = TC.getTriple().isAndroid(); -+ -+ LibGccType LGT = getLibGccType(Args); -+ bool LibGccFirst = (D.CCCIsCC() && LGT == LibGccType::UnspecifiedLibGcc) || -+ LGT == LibGccType::StaticLibGcc; -+ if (LibGccFirst) -+ CmdArgs.push_back("-lgcc"); -+ -+ AddUnwindLibrary(TC, D, CmdArgs, Args); - - if (!LibGccFirst) - CmdArgs.push_back("-lgcc"); -@@ -1182,7 +1215,7 @@ static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, - // - // NOTE: This fixes a link error on Android MIPS as well. The non-static - // libgcc for MIPS relies on _Unwind_Find_FDE and dl_iterate_phdr from libdl. -- if (isAndroid && !StaticLibgcc) -+ if (isAndroid && getLibGccType(Args) != LibGccType::StaticLibGcc) - CmdArgs.push_back("-ldl"); - } - -@@ -1194,6 +1227,7 @@ void tools::AddRunTimeLibs(const ToolChain &TC, const Driver &D, - switch (RLT) { - case ToolChain::RLT_CompilerRT: - CmdArgs.push_back(TC.getCompilerRTArgString(Args, "builtins")); -+ AddUnwindLibrary(TC, D, CmdArgs, Args); - break; - case ToolChain::RLT_Libgcc: - // Make sure libgcc is not used under MSVC environment by default -@@ -1205,7 +1239,7 @@ void tools::AddRunTimeLibs(const ToolChain &TC, const Driver &D, - << Args.getLastArg(options::OPT_rtlib_EQ)->getValue() << "MSVC"; - } - } else -- AddLibgcc(TC.getTriple(), D, CmdArgs, Args); -+ AddLibgcc(TC, D, CmdArgs, Args); - break; - } - } -diff --git a/test/Driver/compiler-rt-unwind.c b/test/Driver/compiler-rt-unwind.c -new file mode 100644 -index 0000000000..00024dfa7e ---- /dev/null -+++ b/test/Driver/compiler-rt-unwind.c -@@ -0,0 +1,49 @@ -+// General tests that the driver handles combinations of --rtlib=XXX and -+// --unwindlib=XXX properly. -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux \ -+// RUN: --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-EMPTY %s -+// RTLIB-EMPTY: "{{.*}}lgcc" -+// RTLIB-EMPTY: "{{.*}}-lgcc_s" -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=libgcc \ -+// RUN: --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-GCC %s -+// RTLIB-GCC: "{{.*}}lgcc" -+// RTLIB-GCC: "{{.*}}lgcc_s" -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=libunwind \ -+// RUN: --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-GCC-UNWINDLIB-COMPILER-RT %s -+// RTLIB-GCC-UNWINDLIB-COMPILER-RT: "{{.*}}lgcc" -+// RTLIB-GCC-UNWINDLIB-COMPILER-RT: "{{.*}}lunwind" -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt \ -+// RUN: --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-COMPILER-RT %s -+// RTLIB-COMPILER-RT: "{{.*}}libclang_rt.builtins-x86_64.a" -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt --unwindlib=libgcc \ -+// RUN: --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-COMPILER-RT-UNWINDLIB-GCC %s -+// RTLIB-COMPILER-RT-UNWINDLIB-GCC: "{{.*}}libclang_rt.builtins-x86_64.a" -+// RTLIB-COMPILER-RT-UNWINDLIB-GCC: "{{.*}}lgcc_s" -+// -+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt --unwindlib=libgcc \ -+// RUN: -static --gcc-toolchain="" \ -+// RUN: | FileCheck --check-prefix=RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC %s -+// RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC: "{{.*}}libclang_rt.builtins-x86_64.a" -+// RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC: "{{.*}}lgcc_eh" -+// -+// RUN: not %clang -no-canonical-prefixes %s -o %t.o 2> %t.err \ -+// RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=libunwind \ -+// RUN: --gcc-toolchain="" \ -+// RUN: FileCheck --input-file=%t.err --check-prefix=RTLIB-GCC-UNWINDLIB-COMPILER_RT %s -+// RTLIB-GCC-UNWINDLIB-COMPILER_RT: "{{[.|\\\n]*}}--rtlib=libgcc requires --unwindlib=libgcc" diff --git a/overlay/llvm-8/compiler-rt-codesign.patch b/overlay/llvm-8/compiler-rt-codesign.patch deleted file mode 100644 index 3cc12b9..0000000 --- a/overlay/llvm-8/compiler-rt-codesign.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 3dec5f3475a26aeb4678627795c4b67c6b7b4785 Mon Sep 17 00:00:00 2001 -From: Will Dietz -Date: Tue, 19 Sep 2017 13:13:06 -0500 -Subject: [PATCH] remove codesign use on Apple, disable ios sim testing that - needs it - ---- - cmake/Modules/AddCompilerRT.cmake | 8 ------ - test/asan/CMakeLists.txt | 52 --------------------------------------- - test/tsan/CMakeLists.txt | 47 ----------------------------------- - 3 files changed, 107 deletions(-) - -diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake -index bc5fb9ff7..b64eb4246 100644 ---- a/cmake/Modules/AddCompilerRT.cmake -+++ b/cmake/Modules/AddCompilerRT.cmake -@@ -210,14 +210,6 @@ function(add_compiler_rt_runtime name type) - set_target_properties(${libname} PROPERTIES IMPORT_PREFIX "") - set_target_properties(${libname} PROPERTIES IMPORT_SUFFIX ".lib") - endif() -- if(APPLE) -- # Ad-hoc sign the dylibs -- add_custom_command(TARGET ${libname} -- POST_BUILD -- COMMAND codesign --sign - $ -- WORKING_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} -- ) -- endif() - endif() - install(TARGETS ${libname} - ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} -2.14.1 - diff --git a/overlay/llvm-8/compiler-rt-genode.patch b/overlay/llvm-8/compiler-rt-genode.patch deleted file mode 100644 index 816d71b..0000000 --- a/overlay/llvm-8/compiler-rt-genode.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/lib/builtins/assembly.h b/lib/builtins/assembly.h -index 3f5e59b2544..97d06d6ccd1 100644 ---- a/lib/builtins/assembly.h -+++ b/lib/builtins/assembly.h -@@ -45,7 +45,7 @@ - #define CONST_SECTION .section .rodata - - #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ -- defined(__linux__) -+ defined(__linux__) || defined(__GENODE__) - #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits - #else - #define NO_EXEC_STACK_DIRECTIVE diff --git a/overlay/llvm-8/compiler-rt.nix b/overlay/llvm-8/compiler-rt.nix deleted file mode 100644 index 1a14683..0000000 --- a/overlay/llvm-8/compiler-rt.nix +++ /dev/null @@ -1,75 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv, version, fetch, cmake, python, llvm, libcxxabi }: -stdenv.mkDerivation { - pname = "compiler-rt"; - inherit version; - src = fetch "compiler-rt" "0dqqf8f930l8gag4d9qjgn1n0pj0nbv2anviqqhdi1rkhas8z0hi"; - - nativeBuildInputs = [ cmake python llvm ]; - buildInputs = stdenv.lib.optional stdenv.hostPlatform.isDarwin libcxxabi; - - cmakeFlags = [ - "-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON" - "-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}" - "-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}" - ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ - "-DCMAKE_C_FLAGS=-nodefaultlibs" - "-DCMAKE_CXX_COMPILER_WORKS=ON" - "-DCOMPILER_RT_BUILD_SANITIZERS=OFF" - "-DCOMPILER_RT_BUILD_XRAY=OFF" - "-DCOMPILER_RT_BUILD_LIBFUZZER=OFF" - "-DCOMPILER_RT_BUILD_PROFILE=OFF" - "-DCOMPILER_RT_BAREMETAL_BUILD=ON" - #https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program - "-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY" - "-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}" - ] ++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [ - "-DCOMPILER_RT_BUILD_SANITIZERS=OFF" - "-DCOMPILER_RT_BUILD_XRAY=OFF" - "-DCOMPILER_RT_BUILD_LIBFUZZER=OFF" - "-DCOMPILER_RT_BUILD_PROFILE=OFF" - ] ++ stdenv.lib.optionals (stdenv.hostPlatform.parsed.kernel.name == "none") [ - "-DCOMPILER_RT_BAREMETAL_BUILD=ON" - "-DCOMPILER_RT_OS_DIR=baremetal" - ]; - - outputs = [ "out" "dev" ]; - - patches = [ - ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory - ./compiler-rt-genode.patch - ]# ++ stdenv.lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch - ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) ./crtbegin-and-end.patch; - - # TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks - # to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra - # can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd - # get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by - # a flag and turn the flag off during the stdenv build. - postPatch = stdenv.lib.optionalString stdenv.isDarwin '' - substituteInPlace cmake/config-ix.cmake \ - --replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)' - '' + stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' - substituteInPlace lib/builtins/int_util.c \ - --replace "#include " "" - substituteInPlace lib/builtins/clear_cache.c \ - --replace "#include " "" - substituteInPlace lib/builtins/cpu_model.c \ - --replace "#include " "" - ''; - - # Hack around weird upsream RPATH bug - postInstall = stdenv.lib.optionalString (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isWasm) '' - ln -s "$out/lib"/*/* "$out/lib" - '' + stdenv.lib.optionalString (stdenv.hostPlatform.useLLVM or false) '' - ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o - ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o - ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o - ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o - ''; - - enableParallelBuilding = true; -} diff --git a/overlay/llvm-8/compiler-rt.patch b/overlay/llvm-8/compiler-rt.patch deleted file mode 100644 index 816d71b..0000000 --- a/overlay/llvm-8/compiler-rt.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/lib/builtins/assembly.h b/lib/builtins/assembly.h -index 3f5e59b2544..97d06d6ccd1 100644 ---- a/lib/builtins/assembly.h -+++ b/lib/builtins/assembly.h -@@ -45,7 +45,7 @@ - #define CONST_SECTION .section .rodata - - #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ -- defined(__linux__) -+ defined(__linux__) || defined(__GENODE__) - #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits - #else - #define NO_EXEC_STACK_DIRECTIVE diff --git a/overlay/llvm-8/crtbegin-and-end.patch b/overlay/llvm-8/crtbegin-and-end.patch deleted file mode 100644 index e63be18..0000000 --- a/overlay/llvm-8/crtbegin-and-end.patch +++ /dev/null @@ -1,595 +0,0 @@ -Get crtbegin and crtend without compiler GCC! PR is at https://reviews.llvm.org/D28791 - -Index: compiler-rt/CMakeLists.txt -=================================================================== ---- compiler-rt/CMakeLists.txt -+++ compiler-rt/CMakeLists.txt -@@ -29,6 +29,8 @@ - - option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON) - mark_as_advanced(COMPILER_RT_BUILD_BUILTINS) -+option(COMPILER_RT_BUILD_CRT "Build crtbegin.o/crtend.o" ON) -+mark_as_advanced(COMPILER_RT_BUILD_CRT) - option(COMPILER_RT_BUILD_SANITIZERS "Build sanitizers" ON) - mark_as_advanced(COMPILER_RT_BUILD_SANITIZERS) - option(COMPILER_RT_BUILD_XRAY "Build xray" ON) -Index: compiler-rt/cmake/Modules/AddCompilerRT.cmake -=================================================================== ---- compiler-rt/cmake/Modules/AddCompilerRT.cmake -+++ compiler-rt/cmake/Modules/AddCompilerRT.cmake -@@ -132,7 +132,7 @@ - # Adds static or shared runtime for a list of architectures and operating - # systems and puts it in the proper directory in the build and install trees. - # add_compiler_rt_runtime( --# {STATIC|SHARED} -+# {OBJECT|STATIC|SHARED} - # ARCHS - # OS - # SOURCES -@@ -144,8 +144,8 @@ - # PARENT_TARGET - # ADDITIONAL_HEADERS
) - function(add_compiler_rt_runtime name type) -- if(NOT type MATCHES "^(STATIC|SHARED)$") -- message(FATAL_ERROR "type argument must be STATIC or SHARED") -+ if(NOT type MATCHES "^(OBJECT|STATIC|SHARED)$") -+ message(FATAL_ERROR "type argument must be OBJECT, STATIC or SHARED") - return() - endif() - cmake_parse_arguments(LIB -@@ -204,7 +204,10 @@ - message(FATAL_ERROR "Architecture ${arch} can't be targeted") - return() - endif() -- if(type STREQUAL "STATIC") -+ if(type STREQUAL "OBJECT") -+ set(libname "${name}-${arch}") -+ set(output_name_${libname} ${libname}${COMPILER_RT_OS_SUFFIX}) -+ elseif(type STREQUAL "STATIC") - set(libname "${name}-${arch}") - set_output_name(output_name_${libname} ${name} ${arch}) - else() -@@ -270,12 +273,34 @@ - set(COMPONENT_OPTION COMPONENT ${libname}) - endif() - -- add_library(${libname} ${type} ${sources_${libname}}) -- set_target_compile_flags(${libname} ${extra_cflags_${libname}}) -- set_target_link_flags(${libname} ${extra_link_flags_${libname}}) -- set_property(TARGET ${libname} APPEND PROPERTY -- COMPILE_DEFINITIONS ${LIB_DEFS}) -- set_target_output_directories(${libname} ${output_dir_${libname}}) -+ if(type STREQUAL "OBJECT") -+ string(TOUPPER ${CMAKE_BUILD_TYPE} config) -+ get_property(cflags SOURCE ${sources_${libname}} PROPERTY COMPILE_FLAGS) -+ separate_arguments(cflags) -+ add_custom_command( -+ OUTPUT ${output_dir_${libname}}/${libname}.o -+ COMMAND ${CMAKE_C_COMPILER} ${sources_${libname}} ${cflags} ${extra_cflags_${libname}} -c -o ${output_dir_${libname}}/${libname}.o -+ DEPENDS ${sources_${libname}} -+ COMMENT "Building C object ${libname}.o") -+ add_custom_target(${libname} DEPENDS ${output_dir_${libname}}/${libname}.o) -+ install(FILES ${output_dir_${libname}}/${libname}.o -+ DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION}) -+ else() -+ add_library(${libname} ${type} ${sources_${libname}}) -+ set_target_compile_flags(${libname} ${extra_cflags_${libname}}) -+ set_target_link_flags(${libname} ${extra_link_flags_${libname}}) -+ set_property(TARGET ${libname} APPEND PROPERTY -+ COMPILE_DEFINITIONS ${LIB_DEFS}) -+ set_target_output_directories(${libname} ${output_dir_${libname}}) -+ install(TARGETS ${libname} -+ ARCHIVE DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION} -+ LIBRARY DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION} -+ RUNTIME DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION}) -+ endif() - set_target_properties(${libname} PROPERTIES - OUTPUT_NAME ${output_name_${libname}}) - set_target_properties(${libname} PROPERTIES FOLDER "Compiler-RT Runtime") -@@ -299,13 +324,6 @@ - ) - endif() - endif() -- install(TARGETS ${libname} -- ARCHIVE DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION} -- LIBRARY DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION} -- RUNTIME DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION}) - - # We only want to generate per-library install targets if you aren't using - # an IDE because the extra targets get cluttered in IDEs. -Index: compiler-rt/cmake/config-ix.cmake -=================================================================== ---- compiler-rt/cmake/config-ix.cmake -+++ compiler-rt/cmake/config-ix.cmake -@@ -227,6 +227,7 @@ - ${ARM32} ${ARM64} ${MIPS32} ${MIPS64} ${S390X}) - set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} - ${MIPS32} ${MIPS64} ${PPC64} ${S390X}) -+set(ALL_CRT_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}) - set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) - set(ALL_FUZZER_SUPPORTED_ARCH ${X86_64} ${ARM64}) - -@@ -474,6 +475,7 @@ - SANITIZER_COMMON_SUPPORTED_ARCH) - - else() -+ filter_available_targets(CRT_SUPPORTED_ARCH ${ALL_CRT_SUPPORTED_ARCH}) - # Architectures supported by compiler-rt libraries. - filter_available_targets(SANITIZER_COMMON_SUPPORTED_ARCH - ${ALL_SANITIZER_COMMON_SUPPORTED_ARCH}) -@@ -563,6 +565,12 @@ - - # TODO: Add builtins support. - -+if (CRT_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux") -+ set(COMPILER_RT_HAS_CRT TRUE) -+else() -+ set(COMPILER_RT_HAS_CRT FALSE) -+endif() -+ - if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND - OS_NAME MATCHES "Linux") - set(COMPILER_RT_HAS_DFSAN TRUE) -Index: compiler-rt/lib/CMakeLists.txt -=================================================================== ---- compiler-rt/lib/CMakeLists.txt -+++ compiler-rt/lib/CMakeLists.txt -@@ -17,6 +17,10 @@ - add_subdirectory(builtins) - endif() - -+if(COMPILER_RT_BUILD_CRT) -+ add_subdirectory(crt) -+endif() -+ - function(compiler_rt_build_runtime runtime) - string(TOUPPER ${runtime} runtime_uppercase) - if(COMPILER_RT_HAS_${runtime_uppercase}) -Index: compiler-rt/lib/crt/CMakeLists.txt -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/CMakeLists.txt -@@ -0,0 +1,102 @@ -+add_compiler_rt_component(crt) -+ -+function(check_cxx_section_exists section output) -+ cmake_parse_arguments(ARG "" "" "SOURCE;FLAGS" ${ARGN}) -+ if(NOT ARG_SOURCE) -+ set(ARG_SOURCE "int main() { return 0; }\n") -+ endif() -+ -+ string(RANDOM TARGET_NAME) -+ set(TARGET_NAME "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cmTC_${TARGET_NAME}.dir") -+ file(MAKE_DIRECTORY ${TARGET_NAME}) -+ -+ file(WRITE "${TARGET_NAME}/CheckSectionExists.c" "${ARG_SOURCE}\n") -+ -+ string(REGEX MATCHALL "<[A-Za-z0-9_]*>" substitutions -+ ${CMAKE_C_COMPILE_OBJECT}) -+ -+ set(try_compile_flags "${ARG_FLAGS}") -+ if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_TARGET) -+ list(APPEND try_compile_flags "-target ${CMAKE_C_COMPILER_TARGET}") -+ endif() -+ -+ string(REPLACE ";" " " extra_flags "${try_compile_flags}") -+ -+ set(test_compile_command "${CMAKE_C_COMPILE_OBJECT}") -+ foreach(substitution ${substitutions}) -+ if(substitution STREQUAL "") -+ string(REPLACE "" -+ "${CMAKE_C_COMPILER}" test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "") -+ string(REPLACE "" "${TARGET_NAME}/CheckSectionExists.o" -+ test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "") -+ string(REPLACE "" "${TARGET_NAME}/CheckSectionExists.c" -+ test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "") -+ string(REPLACE "" "${CMAKE_C_FLAGS} ${extra_flags}" -+ test_compile_command ${test_compile_command}) -+ else() -+ string(REPLACE "${substitution}" "" test_compile_command -+ ${test_compile_command}) -+ endif() -+ endforeach() -+ -+ string(REPLACE " " ";" test_compile_command "${test_compile_command}") -+ -+ execute_process( -+ COMMAND ${test_compile_command} -+ RESULT_VARIABLE TEST_RESULT -+ OUTPUT_VARIABLE TEST_OUTPUT -+ ERROR_VARIABLE TEST_ERROR -+ ) -+ -+ execute_process( -+ COMMAND ${CMAKE_OBJDUMP} -h "${TARGET_NAME}/CheckSectionExists.o" -+ RESULT_VARIABLE CHECK_RESULT -+ OUTPUT_VARIABLE CHECK_OUTPUT -+ ERROR_VARIABLE CHECK_ERROR -+ ) -+ string(FIND "${CHECK_OUTPUT}" "${section}" SECTION_FOUND) -+ -+ if(NOT SECTION_FOUND EQUAL -1) -+ set(${output} TRUE PARENT_SCOPE) -+ else() -+ set(${output} FALSE PARENT_SCOPE) -+ endif() -+ -+ file(REMOVE_RECURSE ${TARGET_NAME}) -+endfunction() -+ -+check_cxx_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY -+ SOURCE "__attribute__((constructor)) void f() {}\nint main() { return 0; }\n") -+ -+append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS) -+append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS) -+ -+foreach(arch ${CRT_SUPPORTED_ARCH}) -+ add_compiler_rt_runtime(clang_rt.crtbegin -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c -+ CFLAGS ${CRT_CFLAGS} -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtbegin_shared -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c -+ CFLAGS ${CRT_CFLAGS} -DCRT_SHARED -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtend -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c -+ CFLAGS ${CRT_CFLAGS} -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtend_shared -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c -+ CFLAGS ${CRT_CFLAGS} -DCRT_SHARED -+ PARENT_TARGET crt) -+endforeach() -Index: compiler-rt/lib/crt/crtbegin.c -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/crtbegin.c -@@ -0,0 +1,108 @@ -+/* ===-- crtbegin.c - Start of constructors and destructors ----------------=== -+ * -+ * The LLVM Compiler Infrastructure -+ * -+ * This file is dual licensed under the MIT and the University of Illinois Open -+ * Source Licenses. See LICENSE.TXT for details. -+ * -+ * ===----------------------------------------------------------------------=== -+ */ -+ -+#include -+ -+__attribute__((visibility("hidden"))) -+#ifdef CRT_SHARED -+void *__dso_handle = &__dso_handle; -+#else -+void *__dso_handle = (void *)0; -+#endif -+ -+static long __EH_FRAME_LIST__[] -+ __attribute__((section(".eh_frame"), aligned(sizeof(void *)))) = {}; -+ -+extern void __register_frame_info(const void *, void *) __attribute__((weak)); -+extern void *__deregister_frame_info(const void *) __attribute__((weak)); -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+typedef void (*fp)(void); -+ -+static fp __CTOR_LIST__[] -+ __attribute__((section(".ctors"), aligned(sizeof(fp)), used)) = {(fp)-1}; -+extern fp __CTOR_LIST_END__[]; -+#endif -+ -+#ifdef CRT_SHARED -+extern void __cxa_finalize(void *) __attribute__((weak)); -+#endif -+ -+static void __attribute__((used)) __do_init() { -+ static _Bool __initialized; -+ if (__builtin_expect(__initialized, 0)) -+ return; -+ __initialized = 1; -+ -+ static struct { void *p[8]; } __object; -+ if (__register_frame_info) -+ __register_frame_info(__EH_FRAME_LIST__, &__object); -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+ const size_t n = __CTOR_LIST_END__ - __CTOR_LIST__ - 1; -+ for (size_t i = n; i >= 1; i--) __CTOR_LIST__[i](); -+#endif -+} -+ -+#ifdef CRT_HAS_INITFINI_ARRAY -+__attribute__((section(".init_array"), -+ used)) static void (*__init)(void) = __do_init; -+#else // CRT_HAS_INITFINI_ARRAY -+#if defined(__i386__) || defined(__x86_64__) -+asm(".pushsection .init,\"ax\",@progbits\n\t" -+ "call " __USER_LABEL_PREFIX__ "__do_init\n\t" -+ ".popsection"); -+#elif defined(__arm__) -+asm(".pushsection .init,\"ax\",%progbits\n\t" -+ "bl " __USER_LABEL_PREFIX__ "__do_init\n\t" -+ ".popsection"); -+#endif // CRT_HAS_INITFINI_ARRAY -+#endif -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+static fp __DTOR_LIST__[] -+ __attribute__((section(".dtors"), aligned(sizeof(fp)), used)) = {(fp)-1}; -+extern fp __DTOR_LIST_END__[]; -+#endif -+ -+static void __attribute__((used)) __do_fini() { -+ static _Bool __finalized; -+ if (__builtin_expect(__finalized, 0)) -+ return; -+ __finalized = 1; -+ -+#ifdef CRT_SHARED -+ if (__cxa_finalize) -+ __cxa_finalize(__dso_handle); -+#endif -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+ if (__deregister_frame_info) -+ __deregister_frame_info(__EH_FRAME_LIST__); -+ -+ const size_t n = __DTOR_LIST_END__ - __DTOR_LIST__ - 1; -+ for (size_t i = 1; i < n; i++) __DTOR_LIST__[i](); -+#endif -+} -+ -+#ifdef CRT_HAS_INITFINI_ARRAY -+__attribute__((section(".fini_array"), -+ used)) static void (*__fini)(void) = __do_fini; -+#else // CRT_HAS_INITFINI_ARRAY -+#if defined(__i386__) || defined(__x86_64__) -+asm(".pushsection .fini,\"ax\",@progbits\n\t" -+ "call " __USER_LABEL_PREFIX__ "__do_fini\n\t" -+ ".popsection"); -+#elif defined(__arm__) -+asm(".pushsection .fini,\"ax\",%progbits\n\t" -+ "bl " __USER_LABEL_PREFIX__ "__do_fini\n\t" -+ ".popsection"); -+#endif -+#endif // CRT_HAS_INIT_FINI_ARRAY -Index: compiler-rt/lib/crt/crtend.c -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/crtend.c -@@ -0,0 +1,24 @@ -+/* ===-- crtend.c - End of constructors and destructors --------------------=== -+ * -+ * The LLVM Compiler Infrastructure -+ * -+ * This file is dual licensed under the MIT and the University of Illinois Open -+ * Source Licenses. See LICENSE.TXT for details. -+ * -+ * ===----------------------------------------------------------------------=== -+ */ -+ -+#include -+ -+// Put 4-byte zero which is the length field in FDE at the end as a terminator. -+const int32_t __EH_FRAME_LIST_END__[] -+ __attribute__((section(".eh_frame"), aligned(sizeof(int32_t)), -+ visibility("hidden"), used)) = {0}; -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+typedef void (*fp)(void); -+fp __CTOR_LIST_END__[] -+ __attribute__((section(".ctors"), visibility("hidden"), used)) = {0}; -+fp __DTOR_LIST_END__[] -+ __attribute__((section(".dtors"), visibility("hidden"), used)) = {0}; -+#endif -Index: compiler-rt/test/CMakeLists.txt -=================================================================== ---- compiler-rt/test/CMakeLists.txt -+++ compiler-rt/test/CMakeLists.txt -@@ -73,6 +73,9 @@ - if(COMPILER_RT_BUILD_XRAY) - compiler_rt_test_runtime(xray) - endif() -+ if(COMPILER_RT_HAS_CRT) -+ add_subdirectory(crt) -+ endif() - # ShadowCallStack does not yet provide a runtime with compiler-rt, the tests - # include their own minimal runtime - add_subdirectory(shadowcallstack) -Index: compiler-rt/test/crt/CMakeLists.txt -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/CMakeLists.txt -@@ -0,0 +1,31 @@ -+set(CRT_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -+ -+set(CRT_TESTSUITES) -+ -+set(CRT_TEST_DEPS "") -+ -+if(NOT COMPILER_RT_STANDALONE_BUILD AND COMPILER_RT_BUILD_CRT AND -+ COMPILER_RT_HAS_CRT) -+ list(APPEND CRT_TEST_DEPS crt) -+endif() -+ -+set(CRT_TEST_ARCH ${CRT_SUPPORTED_ARCH}) -+if (COMPILER_RT_BUILD_CRT AND COMPILER_RT_HAS_CRT) -+ foreach(arch ${CRT_TEST_ARCH}) -+ set(CRT_TEST_TARGET_ARCH ${arch}) -+ string(TOLOWER "-${arch}-${OS_NAME}" CRT_TEST_CONFIG_SUFFIX) -+ get_test_cc_for_arch(${arch} CRT_TEST_TARGET_CC CRT_TEST_TARGET_CFLAGS) -+ string(TOUPPER ${arch} ARCH_UPPER_CASE) -+ set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config) -+ -+ configure_lit_site_cfg( -+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in -+ ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) -+ list(APPEND CRT_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) -+ endforeach() -+endif() -+ -+add_lit_testsuite(check-crt "Running the CRT tests" -+ ${CRT_TESTSUITES} -+ DEPENDS ${CRT_TEST_DEPS}) -+set_target_properties(check-crt PROPERTIES FOLDER "Compiler-RT Misc") -Index: compiler-rt/test/crt/dso_handle.cpp -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/dso_handle.cpp -@@ -0,0 +1,33 @@ -+// RUN: %clangxx -g -DCRT_SHARED -c %s -fPIC -o %tshared.o -+// RUN: %clangxx -g -c %s -fPIC -o %t.o -+// RUN: %clangxx -g -shared -o %t.so -nostdlib %crti %shared_crtbegin %tshared.o %libstdcxx -lc -lm -lgcc_s %shared_crtend %crtn -+// RUN: %clangxx -g -o %t -nostdlib %crt1 %crti %crtbegin %t.o %libstdcxx -lc -lm %libgcc %t.so %crtend %crtn -+// RUN: %run %t 2>&1 | FileCheck %s -+ -+#include -+ -+// CHECK: 1 -+// CHECK-NEXT: ~A() -+ -+#ifdef CRT_SHARED -+bool G; -+void C() { -+ printf("%d\n", G); -+} -+ -+struct A { -+ A() { G = true; } -+ ~A() { -+ printf("~A()\n"); -+ } -+}; -+ -+A a; -+#else -+void C(); -+ -+int main() { -+ C(); -+ return 0; -+} -+#endif -Index: compiler-rt/test/crt/lit.cfg -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/lit.cfg -@@ -0,0 +1,80 @@ -+# -*- Python -*- -+ -+import os -+import subprocess -+ -+# Setup config name. -+config.name = 'CRT' + config.name_suffix -+ -+# Setup source root. -+config.test_source_root = os.path.dirname(__file__) -+ -+ -+def get_library_path(file): -+ cmd = subprocess.Popen([config.clang.strip(), -+ config.target_cflags.strip(), -+ '-print-file-name=%s' % file], -+ stdout=subprocess.PIPE, -+ env=config.environment) -+ if not cmd.stdout: -+ lit_config.fatal("Couldn't find the library path for '%s'" % file) -+ dir = cmd.stdout.read().strip() -+ if sys.platform in ['win32'] and execute_external: -+ # Don't pass dosish path separator to msys bash.exe. -+ dir = dir.replace('\\', '/') -+ # Ensure the result is an ascii string, across Python2.5+ - Python3. -+ return str(dir.decode('ascii')) -+ -+ -+def get_libgcc_file_name(): -+ cmd = subprocess.Popen([config.clang.strip(), -+ config.target_cflags.strip(), -+ '-print-libgcc-file-name'], -+ stdout=subprocess.PIPE, -+ env=config.environment) -+ if not cmd.stdout: -+ lit_config.fatal("Couldn't find the library path for '%s'" % file) -+ dir = cmd.stdout.read().strip() -+ if sys.platform in ['win32'] and execute_external: -+ # Don't pass dosish path separator to msys bash.exe. -+ dir = dir.replace('\\', '/') -+ # Ensure the result is an ascii string, across Python2.5+ - Python3. -+ return str(dir.decode('ascii')) -+ -+ -+def build_invocation(compile_flags): -+ return ' ' + ' '.join([config.clang] + compile_flags) + ' ' -+ -+ -+# Setup substitutions. -+config.substitutions.append( -+ ('%clang ', build_invocation([config.target_cflags]))) -+config.substitutions.append( -+ ('%clangxx ', -+ build_invocation(config.cxx_mode_flags + [config.target_cflags]))) -+ -+base_lib = os.path.join( -+ config.compiler_rt_libdir, "clang_rt.%%s-%s.o" % config.target_arch) -+config.substitutions.append(('%crtbegin', base_lib % "crtbegin")) -+config.substitutions.append(('%shared_crtbegin', base_lib % "crtbegin_shared")) -+config.substitutions.append(('%crtend', base_lib % "crtend")) -+config.substitutions.append(('%shared_crtend', base_lib % "crtend_shared")) -+ -+config.substitutions.append( -+ ('%crt1', get_library_path('crt1.o'))) -+config.substitutions.append( -+ ('%crti', get_library_path('crti.o'))) -+config.substitutions.append( -+ ('%crtn', get_library_path('crtn.o'))) -+ -+config.substitutions.append( -+ ('%libgcc', get_libgcc_file_name())) -+ -+config.substitutions.append( -+ ('%libstdcxx', '-l' + config.sanitizer_cxx_lib.lstrip('lib'))) -+ -+# Default test suffixes. -+config.suffixes = ['.c', '.cc', '.cpp'] -+ -+if config.host_os not in ['Linux']: -+ config.unsupported = True -Index: compiler-rt/test/crt/lit.site.cfg.in -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/lit.site.cfg.in -@@ -0,0 +1,14 @@ -+@LIT_SITE_CFG_IN_HEADER@ -+ -+# Tool-specific config options. -+config.name_suffix = "@CRT_TEST_CONFIG_SUFFIX@" -+config.crt_lit_source_dir = "@CRT_LIT_SOURCE_DIR@" -+config.target_cflags = "@CRT_TEST_TARGET_CFLAGS@" -+config.target_arch = "@CRT_TEST_TARGET_ARCH@" -+config.sanitizer_cxx_lib = "@SANITIZER_TEST_CXX_LIBNAME@" -+ -+# Load common config for all compiler-rt lit tests -+lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") -+ -+# Load tool-specific config that would do the real work. -+lit_config.load_config(config, "@CRT_LIT_SOURCE_DIR@/lit.cfg") diff --git a/overlay/llvm-8/default.nix b/overlay/llvm-8/default.nix deleted file mode 100644 index 4603823..0000000 --- a/overlay/llvm-8/default.nix +++ /dev/null @@ -1,213 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ lowPrio, newScope, pkgs, stdenv, cmake, libstdcxxHook -, libxml2, python, isl, fetchurl, overrideCC, wrapCCWith, wrapBintoolsWith -, buildLlvmTools # tools, but from the previous stage, for cross -, targetLlvmLibraries # libraries, but from the next stage, for cross -, genodeBase -}: - -let - release_version = "8.0.1"; - version = release_version; # differentiating these is important for rc's - - fetch = name: sha256: fetchurl { - url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-${release_version}/${name}-${version}.src.tar.xz"; - inherit sha256; - }; - - clang-tools-extra_src = fetch "clang-tools-extra" "1qf3097bc5ia8p6cpmbx985rjr3yaah5s8fc0nv7pw742yv7jw8q"; - - tools = stdenv.lib.makeExtensible (tools: let - callPackage = newScope (tools // { inherit stdenv cmake libxml2 python isl release_version version fetch; }); - mkExtraBuildCommands = cc: '' - rsrc="$out/resource-root" - mkdir "$rsrc" - ln -s "${cc}/lib/clang/${release_version}/include" "$rsrc" - ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" - echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags - '' + stdenv.lib.optionalString (stdenv.targetPlatform.isLinux && tools.clang-unwrapped ? gcc && !(stdenv.targetPlatform.useLLVM or false)) '' - echo "--gcc-toolchain=${tools.clang-unwrapped.gcc}" >> $out/nix-support/cc-cflags - ''; - in { - - llvm = callPackage ./llvm.nix { }; - llvm-polly = callPackage ./llvm.nix { enablePolly = true; }; - - clang-unwrapped = callPackage ./clang { - inherit clang-tools-extra_src; - }; - clang-polly-unwrapped = callPackage ./clang { - inherit clang-tools-extra_src; - llvm = tools.llvm-polly; - enablePolly = true; - }; - - llvm-manpages = lowPrio (tools.llvm.override { - enableManpages = true; - python = pkgs.python; # don't use python-boot - }); - - clang-manpages = lowPrio (tools.clang-unwrapped.override { - enableManpages = true; - python = pkgs.python; # don't use python-boot - }); - - libclang = tools.clang-unwrapped.lib; - - clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang; - - libstdcxxClang = wrapCCWith rec { - cc = tools.clang-unwrapped; - extraPackages = [ - libstdcxxHook - targetLlvmLibraries.compiler-rt - ]; - extraBuildCommands = mkExtraBuildCommands cc; - }; - - libcxxClang = wrapCCWith rec { - cc = tools.clang-unwrapped; - libcxx = targetLlvmLibraries.libcxx; - extraPackages = [ - targetLlvmLibraries.libcxx - targetLlvmLibraries.libcxxabi - targetLlvmLibraries.compiler-rt - ]; - extraBuildCommands = mkExtraBuildCommands cc; - }; - - lld = callPackage ./lld {}; - - lldb = callPackage ./lldb.nix {}; - - # Below, is the LLVM bootstrapping logic. It handles building a - # fully LLVM toolchain from scratch. No GCC toolchain should be - # pulled in. As a consequence, it is very quick to build different - # targets provided by LLVM and we can also build for what GCC - # doesn’t support like LLVM. Probably we should move to some other - # file. - - bintools = callPackage ./bintools.nix {}; - - lldClang = wrapCCWith rec { - cc = tools.clang-unwrapped; - libcxx = targetLlvmLibraries.libcxx; - bintools = wrapBintoolsWith { - inherit (tools) bintools; - }; - extraPackages = [ - targetLlvmLibraries.libcxx - targetLlvmLibraries.libcxxabi - targetLlvmLibraries.compiler-rt - ] ++ stdenv.lib.optionals (!stdenv.targetPlatform.isWasm) [ - targetLlvmLibraries.libunwind - ]; - extraBuildCommands = '' - echo "-target ${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags - echo "-rtlib=compiler-rt -Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags - echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags - '' + stdenv.lib.optionalString (!stdenv.targetPlatform.isWasm) '' - echo "--unwindlib=libunwind" >> $out/nix-support/cc-cflags - '' + stdenv.lib.optionalString stdenv.targetPlatform.isWasm '' - echo "-fno-exceptions" >> $out/nix-support/cc-cflags - '' + mkExtraBuildCommands cc - + stdenv.lib.optionalString stdenv.targetPlatform.isGenode '' - echo "-I${genodeBase}/include" >> $out/nix-support/cc-cflags - echo "--sysroot=${genodeBase}" >> $out/nix-support/cc-cflags - echo "-L ${genodeBase}" >> $out/nix-support/cc-cflags - ''; - }; - - lldClangNoLibcxx = wrapCCWith rec { - cc = tools.clang-unwrapped; - libcxx = null; - bintools = wrapBintoolsWith { - inherit (tools) bintools; - }; - extraPackages = [ - targetLlvmLibraries.compiler-rt - ]; - extraBuildCommands = '' - echo "-target ${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags - echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags - echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags - echo "-nostdlib++" >> $out/nix-support/cc-cflags - '' + mkExtraBuildCommands cc - + stdenv.lib.optionalString stdenv.targetPlatform.isGenode '' - echo "--sysroot=${genodeBase}" >> $out/nix-support/cc-cflags - echo "-L ${genodeBase}" >> $out/nix-support/cc-cflags - ''; - }; - - lldClangNoLibc = wrapCCWith rec { - cc = tools.clang-unwrapped; - libcxx = null; - bintools = wrapBintoolsWith { - inherit (tools) bintools; - libc = null; - }; - extraPackages = [ - targetLlvmLibraries.compiler-rt - ]; - extraBuildCommands = '' - echo "-target ${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags - echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags - echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags - '' + mkExtraBuildCommands cc; - }; - - lldClangNoCompilerRt = wrapCCWith { - cc = tools.clang-unwrapped; - libcxx = null; - bintools = wrapBintoolsWith { - inherit (tools) bintools; - libc = null; - }; - extraPackages = [ ]; - extraBuildCommands = '' - echo "-nostartfiles" >> $out/nix-support/cc-cflags - echo "-target ${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags - '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode '' - echo "--sysroot=${genodeBase}" >> $out/nix-support/cc-cflags - ''; - }; - - }); - - libraries = stdenv.lib.makeExtensible (libraries: let - callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python isl release_version version fetch; }); - in { - - compiler-rt = callPackage ./compiler-rt.nix ({} // - (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) { - stdenv = overrideCC stdenv buildLlvmTools.lldClangNoCompilerRt; - })); - - stdenv = overrideCC stdenv buildLlvmTools.clang; - - libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang; - - libcxx = callPackage ./libc++ ({} // - (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) { - stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx; - })); - - libcxxabi = callPackage ./libc++abi.nix ({} // - (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) { - stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx; - libunwind = libraries.libunwind; - })); - - openmp = callPackage ./openmp.nix {}; - - libunwind = callPackage ./libunwind.nix ({} // - (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) { - stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx; - })); - - }); - -in { inherit tools libraries; } // libraries // tools diff --git a/overlay/llvm-8/genode.patch b/overlay/llvm-8/genode.patch deleted file mode 100644 index 1ab6215..0000000 --- a/overlay/llvm-8/genode.patch +++ /dev/null @@ -1,498 +0,0 @@ -diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp -index 3c139d72479..89d6df3f5b4 100644 ---- a/clang/lib/Basic/Targets.cpp -+++ b/clang/lib/Basic/Targets.cpp -@@ -147,6 +147,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); - case llvm::Triple::NetBSD: -@@ -171,6 +173,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); - case llvm::Triple::NetBSD: -@@ -528,6 +532,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, - return new FreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Fuchsia: - return new FuchsiaTargetInfo(Triple, Opts); -+ case llvm::Triple::Genode: -+ return new GenodeTargetInfo(Triple, Opts); - case llvm::Triple::KFreeBSD: - return new KFreeBSDTargetInfo(Triple, Opts); - case llvm::Triple::Solaris: -diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h -index 09867d82c38..f67151a13e8 100644 ---- a/clang/lib/Basic/Targets/OSTargets.h -+++ b/clang/lib/Basic/Targets/OSTargets.h -@@ -760,6 +760,26 @@ public: - } - }; - -+// Genode Target -+template -+class LLVM_LIBRARY_VISIBILITY GenodeTargetInfo : public OSTargetInfo { -+protected: -+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, -+ MacroBuilder &Builder) const override { -+ Builder.defineMacro("__GENODE__"); -+ Builder.defineMacro("__ELF__"); -+ // Required by the libc++ locale support. -+ if (Opts.CPlusPlus) -+ Builder.defineMacro("_GNU_SOURCE"); -+ } -+ -+public: -+ GenodeTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) -+ : OSTargetInfo(Triple, Opts) { -+ this->MCountName = "__mcount"; -+ } -+}; -+ - // WebAssembly target - template - class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo -diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt -index 4793a1f90b2..4691b898eb2 100644 ---- a/clang/lib/Driver/CMakeLists.txt -+++ b/clang/lib/Driver/CMakeLists.txt -@@ -44,6 +44,7 @@ add_clang_library(clangDriver - ToolChains/DragonFly.cpp - ToolChains/FreeBSD.cpp - ToolChains/Fuchsia.cpp -+ ToolChains/Genode.cpp - ToolChains/Gnu.cpp - ToolChains/Haiku.cpp - ToolChains/HIP.cpp -diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp -index a784e218f13..881b78abc4d 100644 ---- a/clang/lib/Driver/Driver.cpp -+++ b/clang/lib/Driver/Driver.cpp -@@ -22,6 +22,7 @@ - #include "ToolChains/DragonFly.h" - #include "ToolChains/FreeBSD.h" - #include "ToolChains/Fuchsia.h" -+#include "ToolChains/Genode.h" - #include "ToolChains/Gnu.h" - #include "ToolChains/HIP.h" - #include "ToolChains/Haiku.h" -@@ -4570,6 +4571,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, - case llvm::Triple::Solaris: - TC = llvm::make_unique(*this, Target, Args); - break; -+ case llvm::Triple::Genode: -+ TC = llvm::make_unique(*this, Target, Args); -+ break; - case llvm::Triple::AMDHSA: - TC = llvm::make_unique(*this, Target, Args); - break; -diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp -index 1a46073aaa3..72b6f7389a3 100644 ---- a/clang/lib/Driver/SanitizerArgs.cpp -+++ b/clang/lib/Driver/SanitizerArgs.cpp -@@ -693,7 +693,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, - ImplicitCfiRuntime = TC.getTriple().isAndroid(); - - if (AllAddedKinds & Address) { -- NeedPIE |= TC.getTriple().isOSFuchsia(); -+ NeedPIE |= TC.getTriple().isOSFuchsia() | TC.getTriple().isOSGenode(); - if (Arg *A = - Args.getLastArg(options::OPT_fsanitize_address_field_padding)) { - StringRef S = A->getValue(); -diff --git a/clang/lib/Driver/ToolChains/Genode.cpp b/clang/lib/Driver/ToolChains/Genode.cpp -new file mode 100644 -index 00000000000..52ed73ae0b4 ---- /dev/null -+++ b/clang/lib/Driver/ToolChains/Genode.cpp -@@ -0,0 +1,86 @@ -+//===--- Genode.cpp - CloudABI ToolChain Implementations --------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+ -+#include "Genode.h" -+#include "InputInfo.h" -+#include "CommonArgs.h" -+#include "clang/Driver/Compilation.h" -+#include "clang/Driver/Driver.h" -+#include "clang/Driver/Options.h" -+#include "llvm/ADT/SmallString.h" -+#include "llvm/Option/ArgList.h" -+#include "llvm/Support/Path.h" -+ -+using namespace clang::driver; -+using namespace clang::driver::tools; -+using namespace clang::driver::toolchains; -+using namespace clang; -+using namespace llvm::opt; -+ -+void genode::Linker::ConstructJob(Compilation &C, const JobAction &JA, -+ const InputInfo &Output, -+ const InputInfoList &Inputs, -+ const llvm::opt::ArgList &Args, -+ const char *LinkingOutput) const { -+ const ToolChain &ToolChain = getToolChain(); -+ const Driver &D = ToolChain.getDriver(); -+ ArgStringList CmdArgs; -+ -+ if (Output.isFilename()) { -+ CmdArgs.push_back("-o"); -+ CmdArgs.push_back(Output.getFilename()); -+ } else { -+ assert(Output.isNothing() && "Invalid output."); -+ } -+ -+ AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); -+ -+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); -+ C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs, Inputs)); -+} -+ -+Genode::Genode(const Driver &D, const llvm::Triple &Triple, -+ const llvm::opt::ArgList &Args) -+ : Generic_ELF(D, Triple, Args) { -+ SmallString<128> P(getDriver().Dir); -+ llvm::sys::path::append(P, "..", getTriple().str(), "lib"); -+ getFilePaths().push_back(P.str()); -+} -+ -+void Genode::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const { -+ SmallString<128> P(getDriver().Dir); -+ llvm::sys::path::append(P, "..", getTriple().str(), "include/c++/v1"); -+ addSystemInclude(DriverArgs, CC1Args, P.str()); -+} -+ -+bool Genode::isPIEDefault() const { -+ switch (getTriple().getArch()) { -+ case llvm::Triple::aarch64: -+ case llvm::Triple::x86_64: -+ return true; -+ default: -+ return false; -+ } -+} -+ -+SanitizerMask Genode::getSupportedSanitizers() const { -+ SanitizerMask Res = Generic_ELF::getSupportedSanitizers(); -+ Res |= SanitizerKind::SafeStack; -+ return Res; -+} -+ -+SanitizerMask Genode::getDefaultSanitizers() const { -+ return SanitizerKind::SafeStack; -+} -+ -+Tool *Genode::buildLinker() const { -+ return new tools::genode::Linker(*this); -+} -diff --git a/clang/lib/Driver/ToolChains/Genode.h b/clang/lib/Driver/ToolChains/Genode.h -new file mode 100644 -index 00000000000..971efb04ef9 ---- /dev/null -+++ b/clang/lib/Driver/ToolChains/Genode.h -@@ -0,0 +1,69 @@ -+//===----- Genode.h - CloudABI ToolChain Implementations --------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+ -+#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -+#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -+ -+#include "Gnu.h" -+#include "clang/Driver/Tool.h" -+#include "clang/Driver/ToolChain.h" -+ -+namespace clang { -+namespace driver { -+namespace tools { -+ -+//// genode -- Directly call GNU Binutils linker -+namespace genode { -+class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { -+public: -+ Linker(const ToolChain &TC) : GnuTool("genode::Linker", "linker", TC) {} -+ -+ bool hasIntegratedCPP() const override { return false; } -+ bool isLinkJob() const override { return true; } -+ -+ void ConstructJob(Compilation &C, const JobAction &JA, -+ const InputInfo &Output, const InputInfoList &Inputss, -+ const llvm::opt::ArgList &Args, -+ const char *LinkingOutput) const override; -+}; -+} // end namespace genode -+} // end namespace tools -+ -+namespace toolchains { -+ -+class LLVM_LIBRARY_VISIBILITY Genode : public Generic_ELF { -+public: -+ Genode(const Driver &D, const llvm::Triple &Triple, -+ const llvm::opt::ArgList &Args); -+ bool HasNativeLLVMSupport() const override { return true; } -+ -+ bool IsMathErrnoDefault() const override { return true; } -+ -+ CXXStdlibType -+ GetCXXStdlibType(const llvm::opt::ArgList &Args) const override { -+ return ToolChain::CST_Libcxx; -+ } -+ void addLibCxxIncludePaths( -+ const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const override; -+ -+ bool isPIEDefault() const override; -+ SanitizerMask getSupportedSanitizers() const override; -+ SanitizerMask getDefaultSanitizers() const override; -+ -+protected: -+ Tool *buildLinker() const override; -+}; -+ -+} // end namespace toolchains -+} // end namespace driver -+} // end namespace clang -+ -+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GENODE_H -diff --git a/clang/lib/Frontend/InitHeaderSearch.cpp b/clang/lib/Frontend/InitHeaderSearch.cpp -index 67842b5dca2..26a2c65fec2 100644 ---- a/clang/lib/Frontend/InitHeaderSearch.cpp -+++ b/clang/lib/Frontend/InitHeaderSearch.cpp -@@ -221,6 +221,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, - case llvm::Triple::PS4: - case llvm::Triple::ELFIAMCU: - case llvm::Triple::Fuchsia: -+ case llvm::Triple::Genode: - break; - case llvm::Triple::Win32: - if (triple.getEnvironment() != llvm::Triple::Cygnus) -@@ -329,6 +330,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, - case llvm::Triple::NaCl: - case llvm::Triple::ELFIAMCU: - case llvm::Triple::Fuchsia: -+ case llvm::Triple::Genode: - break; - case llvm::Triple::PS4: { - // gets prepended later in AddPath(). -diff --git a/clang/test/Driver/genode.c b/clang/test/Driver/genode.c -new file mode 100644 -index 00000000000..e69de29bb2d -diff --git a/clang/test/Driver/genode.cpp b/clang/test/Driver/genode.cpp -new file mode 100644 -index 00000000000..e69de29bb2d -diff --git a/compiler-rt/lib/builtins/assembly.h b/compiler-rt/lib/builtins/assembly.h -index 3f5e59b2544..97d06d6ccd1 100644 ---- a/compiler-rt/lib/builtins/assembly.h -+++ b/compiler-rt/lib/builtins/assembly.h -@@ -45,7 +45,7 @@ - #define CONST_SECTION .section .rodata - - #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ -- defined(__linux__) -+ defined(__linux__) || defined(__GENODE__) - #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits - #else - #define NO_EXEC_STACK_DIRECTIVE -diff --git a/libcxx/utils/google-benchmark/src/internal_macros.h b/libcxx/utils/google-benchmark/src/internal_macros.h -index 5dbf4fd2752..4699c5ed913 100644 ---- a/libcxx/utils/google-benchmark/src/internal_macros.h -+++ b/libcxx/utils/google-benchmark/src/internal_macros.h -@@ -70,6 +70,8 @@ - #define BENCHMARK_OS_FUCHSIA 1 - #elif defined (__SVR4) && defined (__sun) - #define BENCHMARK_OS_SOLARIS 1 -+#elif defined(__GENODE__) -+ #define BENCHMARK_OS_GENODE 1 - #endif - - #if defined(__ANDROID__) && defined(__GLIBCXX__) -diff --git a/libunwind/src/assembly.h b/libunwind/src/assembly.h -index 0b7d24389a4..84cb7bf2f8b 100644 ---- a/libunwind/src/assembly.h -+++ b/libunwind/src/assembly.h -@@ -71,7 +71,7 @@ - #define HIDDEN_SYMBOL(name) .hidden name - - #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ -- defined(__linux__) -+ defined(__linux__) || defined(__GENODE__) - #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits - #else - #define NO_EXEC_STACK_DIRECTIVE -diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake -index 49db3088bbc..32ffed3cb2e 100644 ---- a/llvm/cmake/modules/HandleLLVMOptions.cmake -+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake -@@ -107,7 +107,7 @@ if(WIN32) - set(LLVM_ON_UNIX 0) - endif(CYGWIN) - else(WIN32) -- if(FUCHSIA OR UNIX) -+ if(FUCHSIA OR GENODE OR UNIX) - set(LLVM_ON_WIN32 0) - set(LLVM_ON_UNIX 1) - if(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") -@@ -115,9 +115,9 @@ else(WIN32) - else() - set(LLVM_HAVE_LINK_VERSION_SCRIPT 1) - endif() -- else(FUCHSIA OR UNIX) -+ else(FUCHSIA OR GENODE OR UNIX) - MESSAGE(SEND_ERROR "Unable to determine platform") -- endif(FUCHSIA OR UNIX) -+ endif(FUCHSIA OR GENODE OR UNIX) - endif(WIN32) - - set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) -diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h -index e06a68e2731..7da3d5d29bc 100644 ---- a/llvm/include/llvm/ADT/Triple.h -+++ b/llvm/include/llvm/ADT/Triple.h -@@ -159,6 +159,7 @@ public: - DragonFly, - FreeBSD, - Fuchsia, -+ Genode, - IOS, - KFreeBSD, - Linux, -@@ -498,6 +499,8 @@ public: - - bool isOSDragonFly() const { return getOS() == Triple::DragonFly; } - -+ bool isOSGenode() const { return getOS() == Triple::Genode; } -+ - bool isOSSolaris() const { - return getOS() == Triple::Solaris; - } -diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h -index ce35d127d43..d7a589057db 100644 ---- a/llvm/include/llvm/BinaryFormat/ELF.h -+++ b/llvm/include/llvm/BinaryFormat/ELF.h -@@ -348,6 +348,7 @@ enum { - ELFOSABI_AROS = 15, // AROS - ELFOSABI_FENIXOS = 16, // FenixOS - ELFOSABI_CLOUDABI = 17, // Nuxi CloudABI -+ ELFOSABI_GENODE = 18, // Genode - ELFOSABI_FIRST_ARCH = 64, // First architecture-specific OS ABI - ELFOSABI_AMDGPU_HSA = 64, // AMD HSA runtime - ELFOSABI_AMDGPU_PAL = 65, // AMD PAL runtime -diff --git a/llvm/include/llvm/MC/MCELFObjectWriter.h b/llvm/include/llvm/MC/MCELFObjectWriter.h -index f226d6a45a5..91efe079d20 100644 ---- a/llvm/include/llvm/MC/MCELFObjectWriter.h -+++ b/llvm/include/llvm/MC/MCELFObjectWriter.h -@@ -74,6 +74,8 @@ public: - switch (OSType) { - case Triple::CloudABI: - return ELF::ELFOSABI_CLOUDABI; -+ case Triple::Genode: -+ return ELF::ELFOSABI_GENODE; - case Triple::HermitCore: - return ELF::ELFOSABI_STANDALONE; - case Triple::PS4: -diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp -index 215d6bdd091..0d3f5eaf032 100644 ---- a/llvm/lib/ObjectYAML/ELFYAML.cpp -+++ b/llvm/lib/ObjectYAML/ELFYAML.cpp -@@ -260,6 +260,7 @@ void ScalarEnumerationTraits::enumeration( - ECase(ELFOSABI_AROS); - ECase(ELFOSABI_FENIXOS); - ECase(ELFOSABI_CLOUDABI); -+ ECase(ELFOSABI_GENODE); - ECase(ELFOSABI_AMDGPU_HSA); - ECase(ELFOSABI_AMDGPU_PAL); - ECase(ELFOSABI_AMDGPU_MESA3D); -diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp -index 26d9327f620..1866b07ac68 100644 ---- a/llvm/lib/Support/Triple.cpp -+++ b/llvm/lib/Support/Triple.cpp -@@ -181,6 +181,7 @@ StringRef Triple::getOSTypeName(OSType Kind) { - case DragonFly: return "dragonfly"; - case FreeBSD: return "freebsd"; - case Fuchsia: return "fuchsia"; -+ case Genode: return "genode"; - case IOS: return "ios"; - case KFreeBSD: return "kfreebsd"; - case Linux: return "linux"; -@@ -478,6 +479,7 @@ static Triple::OSType parseOS(StringRef OSName) { - .StartsWith("dragonfly", Triple::DragonFly) - .StartsWith("freebsd", Triple::FreeBSD) - .StartsWith("fuchsia", Triple::Fuchsia) -+ .StartsWith("genode", Triple::Genode) - .StartsWith("ios", Triple::IOS) - .StartsWith("kfreebsd", Triple::KFreeBSD) - .StartsWith("linux", Triple::Linux) -diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp -index 93254717e92..3d96ff9332a 100644 ---- a/llvm/tools/llvm-readobj/ELFDumper.cpp -+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp -@@ -911,6 +911,7 @@ static const EnumEntry ElfOSABI[] = { - {"AROS", "AROS", ELF::ELFOSABI_AROS}, - {"FenixOS", "FenixOS", ELF::ELFOSABI_FENIXOS}, - {"CloudABI", "CloudABI", ELF::ELFOSABI_CLOUDABI}, -+ {"Genode", "Genode", ELF::ELFOSABI_GENODE}, - {"Standalone", "Standalone App", ELF::ELFOSABI_STANDALONE} - }; - -diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp -index bc7f9321caa..5d6a56d7723 100644 ---- a/llvm/unittests/ADT/TripleTest.cpp -+++ b/llvm/unittests/ADT/TripleTest.cpp -@@ -241,6 +241,12 @@ TEST(TripleTest, ParsedIDs) { - EXPECT_EQ(Triple::Fuchsia, T.getOS()); - EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); - -+ T = Triple("x86_64-unknown-genode"); -+ EXPECT_EQ(Triple::x86_64, T.getArch()); -+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); -+ EXPECT_EQ(Triple::Genode, T.getOS()); -+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); -+ - T = Triple("x86_64-unknown-hermit"); - EXPECT_EQ(Triple::x86_64, T.getArch()); - EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); -diff --git a/llvm/utils/benchmark/src/internal_macros.h b/llvm/utils/benchmark/src/internal_macros.h -index f2d54bfcbd9..e20f891d435 100644 ---- a/llvm/utils/benchmark/src/internal_macros.h -+++ b/llvm/utils/benchmark/src/internal_macros.h -@@ -65,6 +65,8 @@ - #define BENCHMARK_OS_FUCHSIA 1 - #elif defined (__SVR4) && defined (__sun) - #define BENCHMARK_OS_SOLARIS 1 -+#elif defined(__GENODE__) -+ #define BENCHMARK_OS_GENODE 1 - #endif - - #if !__has_feature(cxx_exceptions) && !defined(__cpp_exceptions) \ -diff --git a/llvm/utils/gn/secondary/clang/lib/Driver/BUILD.gn b/llvm/utils/gn/secondary/clang/lib/Driver/BUILD.gn -index 1f07a6272d8..74eefe63b01 100644 ---- a/llvm/utils/gn/secondary/clang/lib/Driver/BUILD.gn -+++ b/llvm/utils/gn/secondary/clang/lib/Driver/BUILD.gn -@@ -62,6 +62,7 @@ static_library("Driver") { - "ToolChains/DragonFly.cpp", - "ToolChains/FreeBSD.cpp", - "ToolChains/Fuchsia.cpp", -+ "ToolChains/Genode.cpp", - "ToolChains/Gnu.cpp", - "ToolChains/HIP.cpp", - "ToolChains/Haiku.cpp", diff --git a/overlay/llvm-8/libc++/default.nix b/overlay/llvm-8/libc++/default.nix deleted file mode 100644 index fb19708..0000000 --- a/overlay/llvm-8/libc++/default.nix +++ /dev/null @@ -1,70 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ lib, stdenv, fetch, cmake, python, libcxxabi, fixDarwinDylibNames, version -, enableShared ? true }: - -let - enableShared' = if enableShared then !stdenv.hostPlatform.isGenode else false; -in -stdenv.mkDerivation rec { - pname = "libc++"; - inherit version; - - src = fetch "libcxx" "0y4vc9z36c1zlq15cnibdzxnc1xi5glbc6klnm8a41q3db4541kz"; - - postUnpack = '' - unpackFile ${libcxxabi.src} - export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include" - ''; - - patches = with stdenv.hostPlatform; [] - ++ stdenv.lib.optional isMusl ../../libcxx-0001-musl-hacks.patch - ++ stdenv.lib.optional isGenode ./genode.patch; - - prePatch = '' - substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++" - ''; - - preConfigure = '' - # Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package - cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR") - '' + lib.optionalString stdenv.hostPlatform.isMusl '' - patchShebangs utils/cat_files.py - ''; - nativeBuildInputs = [ cmake ] - ++ stdenv.lib.optional (with stdenv.hostPlatform; (isMusl || isWasi || isGenode)) python; - - buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames; - - cmakeFlags = [ - "-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib" - "-DLIBCXX_LIBCPPABI_VERSION=2" - "-DLIBCXX_CXX_ABI=libcxxabi" - ] ++ stdenv.lib.optional (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) "-DLIBCXX_HAS_MUSL_LIBC=1" - ++ stdenv.lib.optional (stdenv.hostPlatform.useLLVM or false) "-DLIBCXX_USE_COMPILER_RT=ON" - ++ stdenv.lib.optional stdenv.hostPlatform.isGenode - "-DLIBCXX_ENABLE_THREADS=OFF" - ++ stdenv.lib.optional stdenv.hostPlatform.isWasm [ - "-DLIBCXX_ENABLE_THREADS=OFF" - "-DLIBCXX_ENABLE_FILESYSTEM=OFF" - "-DLIBCXX_ENABLE_EXCEPTIONS=OFF" - ] ++ stdenv.lib.optional (!enableShared') "-DLIBCXX_ENABLE_SHARED=OFF"; - - enableParallelBuilding = true; - - linkCxxAbi = stdenv.isLinux; - - setupHooks = [ - ./role.bash - ./setup-hook.sh - ]; - - meta = { - homepage = http://libcxx.llvm.org/; - description = "A new implementation of the C++ standard library, targeting C++11"; - license = with stdenv.lib.licenses; [ ncsa mit ]; - platforms = stdenv.lib.platforms.all; - }; -} diff --git a/overlay/llvm-8/libc++/genode.patch b/overlay/llvm-8/libc++/genode.patch deleted file mode 100644 index e37ad0b..0000000 --- a/overlay/llvm-8/libc++/genode.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/include/locale b/include/locale -index 2043892fa2d..6e5c285a7c9 100644 ---- a/include/locale -+++ b/include/locale -@@ -737,7 +737,7 @@ __num_get_signed_integral(const char* __a, const char* __a_end, - typename remove_reference::type __save_errno = errno; - errno = 0; - char *__p2; -- long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE); -+ long long __ll = strtoll(__a, &__p2, __base); - typename remove_reference::type __current_errno = errno; - if (__current_errno == 0) - errno = __save_errno; -@@ -777,7 +777,7 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end, - typename remove_reference::type __save_errno = errno; - errno = 0; - char *__p2; -- unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE); -+ unsigned long long __ll = strtoull(__a, &__p2, __base); - typename remove_reference::type __current_errno = errno; - if (__current_errno == 0) - errno = __save_errno; -@@ -806,19 +806,19 @@ _Tp __do_strtod(const char* __a, char** __p2); - template <> - inline _LIBCPP_INLINE_VISIBILITY - float __do_strtod(const char* __a, char** __p2) { -- return strtof_l(__a, __p2, _LIBCPP_GET_C_LOCALE); -+ return strtof(__a, __p2); - } - - template <> - inline _LIBCPP_INLINE_VISIBILITY - double __do_strtod(const char* __a, char** __p2) { -- return strtod_l(__a, __p2, _LIBCPP_GET_C_LOCALE); -+ return strtod(__a, __p2); - } - - template <> - inline _LIBCPP_INLINE_VISIBILITY - long double __do_strtod(const char* __a, char** __p2) { -- return strtold_l(__a, __p2, _LIBCPP_GET_C_LOCALE); -+ return strtold(__a, __p2); - } - - template -@@ -1197,13 +1197,13 @@ __num_put<_CharT>::__widen_and_group_float(char* __nb, char* __np, char* __ne, - *__oe++ = __ct.widen(*__nf++); - *__oe++ = __ct.widen(*__nf++); - for (__ns = __nf; __ns < __ne; ++__ns) -- if (!isxdigit_l(*__ns, _LIBCPP_GET_C_LOCALE)) -+ if (!isxdigit(*__ns)) - break; - } - else - { - for (__ns = __nf; __ns < __ne; ++__ns) -- if (!isdigit_l(*__ns, _LIBCPP_GET_C_LOCALE)) -+ if (!isdigit(*__ns)) - break; - } - if (__grouping.empty()) -diff --git a/utils/google-benchmark/src/internal_macros.h b/utils/google-benchmark/src/internal_macros.h -index 5dbf4fd2752..4699c5ed913 100644 ---- a/utils/google-benchmark/src/internal_macros.h -+++ b/utils/google-benchmark/src/internal_macros.h -@@ -70,6 +70,8 @@ - #define BENCHMARK_OS_FUCHSIA 1 - #elif defined (__SVR4) && defined (__sun) - #define BENCHMARK_OS_SOLARIS 1 -+#elif defined(__GENODE__) -+ #define BENCHMARK_OS_GENODE 1 - #endif - - #if defined(__ANDROID__) && defined(__GLIBCXX__) diff --git a/overlay/llvm-8/libc++/role.bash b/overlay/llvm-8/libc++/role.bash deleted file mode 100644 index 6f1c36f..0000000 --- a/overlay/llvm-8/libc++/role.bash +++ /dev/null @@ -1,75 +0,0 @@ -# Since the same derivation can be depend on in multiple ways, we need to -# accumulate *each* role (i.e. host and target platforms relative the depending -# derivation) in which the derivation is used. -# -# The role is intened to be use as part of other variables names like -# - $NIX_${role_pre}_SOMETHING -# - $NIX_SOMETHING_${role_post} - -function getRole() { - case $1 in - -1) - role_pre='BUILD_' - role_post='_FOR_BUILD' - ;; - 0) - role_pre='' - role_post='' - ;; - 1) - role_pre='TARGET_' - role_post='_FOR_TARGET' - ;; - *) - echo "@name@: used as improper sort of dependency" >2 - return 1 - ;; - esac -} - -# `hostOffset` describes how the host platform of the package is slid relative -# to the depending package. `targetOffset` likewise describes the target -# platform of the package. Both are brought into scope of the setup hook defined -# for dependency whose setup hook is being processed relative to the package -# being built. - -function getHostRole() { - getRole "$hostOffset" -} -function getTargetRole() { - getRole "$targetOffset" -} - -# `depHostOffset` describes how the host platform of the dependencies are slid -# relative to the depending package. `depTargetOffset` likewise describes the -# target platform of dependenices. Both are brought into scope of the -# environment hook defined for the dependency being applied relative to the -# package being built. - -function getHostRoleEnvHook() { - getRole "$depHostOffset" -} -function getTargetRoleEnvHook() { - getRole "$depTargetOffset" -} - -# This variant is inteneded specifically for code-prodocing tool wrapper scripts -# `NIX_@wrapperName@_@infixSalt@_TARGET_*` tracks this (needs to be an exported -# env var so can't use fancier data structures). -function getTargetRoleWrapper() { - case $targetOffset in - -1) - export NIX_@wrapperName@_@infixSalt@_TARGET_BUILD=1 - ;; - 0) - export NIX_@wrapperName@_@infixSalt@_TARGET_HOST=1 - ;; - 1) - export NIX_@wrapperName@_@infixSalt@_TARGET_TARGET=1 - ;; - *) - echo "@name@: used as improper sort of dependency" >2 - return 1 - ;; - esac -} diff --git a/overlay/llvm-8/libc++/setup-hook.sh b/overlay/llvm-8/libc++/setup-hook.sh deleted file mode 100644 index 6611259..0000000 --- a/overlay/llvm-8/libc++/setup-hook.sh +++ /dev/null @@ -1,6 +0,0 @@ -# See pkgs/build-support/setup-hooks/role.bash -getHostRole - -linkCxxAbi="@linkCxxAbi@" -export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1" -export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}" diff --git a/overlay/llvm-8/libc++abi.nix b/overlay/llvm-8/libc++abi.nix deleted file mode 100644 index 38f263a..0000000 --- a/overlay/llvm-8/libc++abi.nix +++ /dev/null @@ -1,83 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv, cmake, fetch, libcxx, libunwind, llvm, version -, enableShared ? true }: - -let - enableShared' = enableShared -> !stdenv.hostPlatform.isGenode; -in -stdenv.mkDerivation { - pname = "libc++abi"; - inherit version; - - src = fetch "libcxxabi" "1vznz8n1z1h8af0ga451m98lc2hjnv4fyzl71napsvjhvk4g6nxp"; - - nativeBuildInputs = [ cmake ]; - buildInputs = stdenv.lib.optional (!stdenv.isDarwin && !stdenv.isFreeBSD && !stdenv.hostPlatform.isGenode && !stdenv.hostPlatform.isWasm) libunwind; - - cmakeFlags = stdenv.lib.optionals (stdenv.hostPlatform.useLLVM or false) [ - "-DLLVM_ENABLE_LIBCXX=ON" - "-DLIBCXXABI_USE_LLVM_UNWINDER=ON" - ] ++ stdenv.lib.optionals stdenv.hostPlatform.isWasm [ - "-DLIBCXXABI_ENABLE_THREADS=OFF" - "-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF" - ] ++ stdenv.lib.optionals (!enableShared') [ - "-DLIBCXXABI_ENABLE_SHARED=OFF" - ] ++ stdenv.lib.optionals stdenv.hostPlatform.isGenode [ - "-DCMAKE_C_FLAGS=-nodefaultlibs" - "-DLIBCXXABI_ENABLE_THREADS=OFF" - "-DLIBCXXABI_BAREMETAL=ON" - "-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON" - ]; - - patches = [ - ./libcxxabi-no-threads.patch - ]; - - postUnpack = '' - unpackFile ${libcxx.src} - unpackFile ${llvm.src} - cmakeFlags+=" -DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)" - '' + stdenv.lib.optionalString stdenv.isDarwin '' - export TRIPLE=x86_64-apple-darwin - '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' - patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch} - '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode '' - patch -p1 -d $(ls -d llvm-*) -i ${./llvm-genode.patch} - '' + stdenv.lib.optionalString stdenv.hostPlatform.isWasm '' - patch -p1 -d $(ls -d llvm-*) -i ${./libcxxabi-wasm.patch} - ''; - - installPhase = if stdenv.isDarwin - then '' - for file in lib/*.dylib; do - # this should be done in CMake, but having trouble figuring out - # the magic combination of necessary CMake variables - # if you fancy a try, take a look at - # http://www.cmake.org/Wiki/CMake_RPATH_handling - install_name_tool -id $out/$file $file - done - make install - install -d 755 $out/include - install -m 644 ../include/*.h $out/include - '' - else '' - install -d -m 755 $out/include $out/lib - install -m 644 lib/libc++abi.a $out/lib - install -m 644 ../include/*.h $out/include - '' + stdenv.lib.optionalString enableShared' '' - install -m 644 lib/libc++abi.so.1.0 $out/lib - ln -s libc++abi.so.1.0 $out/lib/libc++abi.so - ln -s libc++abi.so.1.0 $out/lib/libc++abi.so.1 - ''; - - meta = { - homepage = http://libcxxabi.llvm.org/; - description = "A new implementation of low level support for a standard C++ library"; - license = with stdenv.lib.licenses; [ ncsa mit ]; - maintainers = with stdenv.lib.maintainers; [ vlstill ]; - platforms = stdenv.lib.platforms.all; - }; -} diff --git a/overlay/llvm-8/libcxxabi-no-threads.patch b/overlay/llvm-8/libcxxabi-no-threads.patch deleted file mode 100644 index 787f3e1..0000000 --- a/overlay/llvm-8/libcxxabi-no-threads.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 4138acf..41b4763 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -362,6 +362,7 @@ if (NOT LIBCXXABI_ENABLE_THREADS) - " is also set to ON.") - endif() - add_definitions(-D_LIBCXXABI_HAS_NO_THREADS) -+ add_definitions(-D_LIBCPP_HAS_NO_THREADS) - endif() - - if (LIBCXXABI_HAS_EXTERNAL_THREAD_API) diff --git a/overlay/llvm-8/libcxxabi-wasm.patch b/overlay/llvm-8/libcxxabi-wasm.patch deleted file mode 100644 index 4ebfe46..0000000 --- a/overlay/llvm-8/libcxxabi-wasm.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake -index 15497d405e0..33f7f18193a 100644 ---- a/cmake/modules/HandleLLVMOptions.cmake -+++ b/cmake/modules/HandleLLVMOptions.cmake -@@ -127,7 +127,10 @@ else(WIN32) - set(LLVM_HAVE_LINK_VERSION_SCRIPT 1) - endif() - else(FUCHSIA OR UNIX) -- MESSAGE(SEND_ERROR "Unable to determine platform") -+ if(${CMAKE_SYSTEM_NAME} MATCHES "Wasi") -+ else() -+ MESSAGE(SEND_ERROR "Unable to determine platform") -+ endif() - endif(FUCHSIA OR UNIX) - endif(WIN32) - diff --git a/overlay/llvm-8/libunwind-genode.patch b/overlay/llvm-8/libunwind-genode.patch deleted file mode 100644 index e728395..0000000 --- a/overlay/llvm-8/libunwind-genode.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 3d06073cfe7..076d8c383ac 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -333,6 +333,11 @@ if (WIN32 AND LIBUNWIND_ENABLE_STATIC AND NOT LIBUNWIND_ENABLE_SHARED) - add_definitions(-D_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS) - endif() - -+if (LIBUNWIND_IS_BAREMETAL) -+ add_definitions(-D_LIBUNWIND_IS_BAREMETAL) -+ add_definitions(-D_LIBUNWIND_SUPPORT_DWARF_UNWIND) -+endif() -+ - #=============================================================================== - # Setup Source Code - #=============================================================================== -diff --git a/src/assembly.h b/src/assembly.h -index 0b7d24389a4..84cb7bf2f8b 100644 ---- a/src/assembly.h -+++ b/src/assembly.h -@@ -71,7 +71,7 @@ - #define HIDDEN_SYMBOL(name) .hidden name - - #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ -- defined(__linux__) -+ defined(__linux__) || defined(__GENODE__) - #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits - #else - #define NO_EXEC_STACK_DIRECTIVE diff --git a/overlay/llvm-8/libunwind.nix b/overlay/llvm-8/libunwind.nix deleted file mode 100644 index f27970b..0000000 --- a/overlay/llvm-8/libunwind.nix +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv, version, fetch, cmake, fetchpatch -, enableShared ? true -, isBaremetal ? false }: - -let - enableShared' = if stdenv.targetPlatform ? isGenode then - !stdenv.targetPlatform.isGenode - else - false; -in -stdenv.mkDerivation { - pname = "libunwind"; - inherit version; - - src = fetch "libunwind" "0vhgcgzsb33l83qaikrkj87ypqb48mi607rccczccwiiv8ficw0q"; - - nativeBuildInputs = [ cmake ]; - - patches = [ - (fetchpatch { - url = "https://github.com/llvm-mirror/libunwind/commit/34a45c630d4c79af403661d267db42fbe7de1178.patch"; - sha256 = "0n0pv6jvcky8pn3srhrf9x5kbnd0d2kia9xlx2g590f5q0bgwfhv"; - }) - (fetchpatch { - url = "https://github.com/llvm-mirror/libunwind/commit/e050272d2eb57eb4e56a37b429a61df2ebb8aa3e.patch"; - sha256 = "1sxyx5xnax8k713jjcxgq3jq3cpnxygs2rcdf5vfja0f2k9jzldl"; - }) - ] ++ stdenv.lib.optionals stdenv.hostPlatform.isGenode [ - ./libunwind-genode.patch - ]; - - enableParallelBuilding = true; - - cmakeFlags = [ ] - ++ stdenv.lib.optional (!enableShared') "-DLIBUNWIND_ENABLE_SHARED=OFF" - ++ stdenv.lib.optional isBaremetal "-DLIBUNWIND_IS_BAREMETAL=ON"; -} diff --git a/overlay/llvm-8/lld/default.nix b/overlay/llvm-8/lld/default.nix deleted file mode 100644 index f39cdb9..0000000 --- a/overlay/llvm-8/lld/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv -, fetch -, cmake -, libxml2 -, llvm -, version -}: - -stdenv.mkDerivation { - pname = "lld"; - inherit version; - - src = fetch "lld" "121xhxrlvwy3k5nf6p1wv31whxlb635ssfkci8z93mwv4ja1xflz"; - - nativeBuildInputs = [ cmake ]; - buildInputs = [ llvm libxml2 ]; - - outputs = [ "out" "dev" ]; - - patches = stdenv.lib.optional (stdenv.targetPlatform.isGenode) ./genode.patch; - - enableParallelBuilding = true; - - postInstall = '' - moveToOutput include "$dev" - moveToOutput lib "$dev" - ''; - - meta = { - description = "The LLVM Linker"; - homepage = http://lld.llvm.org/; - license = stdenv.lib.licenses.ncsa; - platforms = stdenv.lib.platforms.all; - }; -} diff --git a/overlay/llvm-8/lld/genode.patch b/overlay/llvm-8/lld/genode.patch deleted file mode 100644 index d5cf95a..0000000 --- a/overlay/llvm-8/lld/genode.patch +++ /dev/null @@ -1,64 +0,0 @@ -diff --git a/ELF/Driver.cpp b/ELF/Driver.cpp -index bce9d944a..cf42193f9 100644 ---- a/ELF/Driver.cpp -+++ b/ELF/Driver.cpp -@@ -235,12 +235,8 @@ void LinkerDriver::addFile(StringRef Path, bool WithLOption) { - // file has a DT_SONAME or not because we haven't parsed it yet. - // Here, we set the default soname for the file because we might - // need it later. -- // -- // If a file was specified by -lfoo, the directory part is not -- // significant, as a user did not specify it. This behavior is -- // compatible with GNU. - Files.push_back( -- createSharedFile(MBRef, WithLOption ? path::filename(Path) : Path)); -+ createSharedFile(MBRef, Path)); - return; - case file_magic::bitcode: - case file_magic::elf_relocatable: -diff --git a/ELF/DriverUtils.cpp b/ELF/DriverUtils.cpp -index e51d02e38..259ea8053 100644 ---- a/ELF/DriverUtils.cpp -+++ b/ELF/DriverUtils.cpp -@@ -194,14 +194,16 @@ std::string elf::createResponseFile(const opt::InputArgList &Args) { - // Find a file by concatenating given paths. If a resulting path - // starts with "=", the character is replaced with a --sysroot value. - static Optional findFile(StringRef Path1, const Twine &Path2) { -- SmallString<128> S; -+ SmallString<256> S; - if (Path1.startswith("=")) - path::append(S, Config->Sysroot, Path1.substr(1), Path2); - else - path::append(S, Path1, Path2); - -- if (fs::exists(S)) -- return S.str().str(); -+ SmallString<256> RealPath; -+ fs::real_path(S, RealPath); -+ if (fs::exists(RealPath)) -+ return RealPath.str().str(); - return None; - } - -@@ -220,8 +222,19 @@ Optional elf::searchLibrary(StringRef Name) { - - for (StringRef Dir : Config->SearchPaths) { - if (!Config->Static) -- if (Optional S = findFile(Dir, "lib" + Name + ".so")) -- return S; -+ if (Name.size() == 1) { -+ if (Optional S = findFile(Dir, "lib" + Name + ".lib.so")) -+ return S; -+ if (Optional S = findFile(Dir, "lib" + Name + ".so")) -+ return S; -+ } else { -+ if (Optional S = findFile(Dir, Name + ".lib.so")) -+ return S; -+ if (Optional S = findFile(Dir, "lib" + Name + ".so")) -+ return S; -+ } -+ if (Optional S = findFile(Dir, Name + ".lib.a")) -+ return S; - if (Optional S = findFile(Dir, "lib" + Name + ".a")) - return S; - } diff --git a/overlay/llvm-8/lldb.nix b/overlay/llvm-8/lldb.nix deleted file mode 100644 index 964372f..0000000 --- a/overlay/llvm-8/lldb.nix +++ /dev/null @@ -1,65 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv -, fetch -, cmake -, zlib -, ncurses -, swig -, which -, libedit -, libxml2 -, llvm -, clang-unwrapped -, python -, version -, darwin -}: - -stdenv.mkDerivation { - pname = "lldb"; - inherit version; - - src = fetch "lldb" "1mriw4adrwm6kzabrjr7yqmdiylxd6glf6samd80dp8idnm9p9z8"; - - postPatch = '' - # Fix up various paths that assume llvm and clang are installed in the same place - sed -i 's,".*ClangConfig.cmake","${clang-unwrapped}/lib/cmake/clang/ClangConfig.cmake",' \ - cmake/modules/LLDBStandalone.cmake - sed -i 's,".*tools/clang/include","${clang-unwrapped}/include",' \ - cmake/modules/LLDBStandalone.cmake - sed -i 's,"$.LLVM_LIBRARY_DIR.",${llvm}/lib ${clang-unwrapped}/lib,' \ - cmake/modules/LLDBStandalone.cmake - ''; - - nativeBuildInputs = [ cmake python which swig ]; - buildInputs = [ ncurses zlib libedit libxml2 llvm ] - ++ stdenv.lib.optionals stdenv.isDarwin [ darwin.libobjc darwin.apple_sdk.libs.xpc darwin.apple_sdk.frameworks.Foundation darwin.bootstrap_cmds darwin.apple_sdk.frameworks.Carbon darwin.apple_sdk.frameworks.Cocoa ]; - - CXXFLAGS = "-fno-rtti"; - hardeningDisable = [ "format" ]; - - cmakeFlags = [ - "-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic - ]; - - enableParallelBuilding = true; - - postInstall = '' - mkdir -p $out/share/man/man1 - cp ../docs/lldb.1 $out/share/man/man1/ - - install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json - mkdir $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin - ln -s $out/bin/lldb-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin - ''; - - meta = with stdenv.lib; { - description = "A next-generation high-performance debugger"; - homepage = http://llvm.org/; - license = licenses.ncsa; - platforms = platforms.all; - }; -} diff --git a/overlay/llvm-8/llvm-genode.patch b/overlay/llvm-8/llvm-genode.patch deleted file mode 100644 index 59d84fd..0000000 --- a/overlay/llvm-8/llvm-genode.patch +++ /dev/null @@ -1,157 +0,0 @@ -diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake -index 49db3088bbc..32ffed3cb2e 100644 ---- a/cmake/modules/HandleLLVMOptions.cmake -+++ b/cmake/modules/HandleLLVMOptions.cmake -@@ -107,7 +107,7 @@ if(WIN32) - set(LLVM_ON_UNIX 0) - endif(CYGWIN) - else(WIN32) -- if(FUCHSIA OR UNIX) -+ if(FUCHSIA OR GENODE OR UNIX) - set(LLVM_ON_WIN32 0) - set(LLVM_ON_UNIX 1) - if(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") -@@ -115,9 +115,9 @@ else(WIN32) - else() - set(LLVM_HAVE_LINK_VERSION_SCRIPT 1) - endif() -- else(FUCHSIA OR UNIX) -+ else(FUCHSIA OR GENODE OR UNIX) - MESSAGE(SEND_ERROR "Unable to determine platform") -- endif(FUCHSIA OR UNIX) -+ endif(FUCHSIA OR GENODE OR UNIX) - endif(WIN32) - - set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) -diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h -index e06a68e2731..7da3d5d29bc 100644 ---- a/include/llvm/ADT/Triple.h -+++ b/include/llvm/ADT/Triple.h -@@ -159,6 +159,7 @@ public: - DragonFly, - FreeBSD, - Fuchsia, -+ Genode, - IOS, - KFreeBSD, - Linux, -@@ -498,6 +499,8 @@ public: - - bool isOSDragonFly() const { return getOS() == Triple::DragonFly; } - -+ bool isOSGenode() const { return getOS() == Triple::Genode; } -+ - bool isOSSolaris() const { - return getOS() == Triple::Solaris; - } -diff --git a/include/llvm/BinaryFormat/ELF.h b/include/llvm/BinaryFormat/ELF.h -index ce35d127d43..d7a589057db 100644 ---- a/include/llvm/BinaryFormat/ELF.h -+++ b/include/llvm/BinaryFormat/ELF.h -@@ -348,6 +348,7 @@ enum { - ELFOSABI_AROS = 15, // AROS - ELFOSABI_FENIXOS = 16, // FenixOS - ELFOSABI_CLOUDABI = 17, // Nuxi CloudABI -+ ELFOSABI_GENODE = 18, // Genode - ELFOSABI_FIRST_ARCH = 64, // First architecture-specific OS ABI - ELFOSABI_AMDGPU_HSA = 64, // AMD HSA runtime - ELFOSABI_AMDGPU_PAL = 65, // AMD PAL runtime -diff --git a/include/llvm/MC/MCELFObjectWriter.h b/include/llvm/MC/MCELFObjectWriter.h -index f226d6a45a5..91efe079d20 100644 ---- a/include/llvm/MC/MCELFObjectWriter.h -+++ b/include/llvm/MC/MCELFObjectWriter.h -@@ -74,6 +74,8 @@ public: - switch (OSType) { - case Triple::CloudABI: - return ELF::ELFOSABI_CLOUDABI; -+ case Triple::Genode: -+ return ELF::ELFOSABI_GENODE; - case Triple::HermitCore: - return ELF::ELFOSABI_STANDALONE; - case Triple::PS4: -diff --git a/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp -index 215d6bdd091..0d3f5eaf032 100644 ---- a/lib/ObjectYAML/ELFYAML.cpp -+++ b/lib/ObjectYAML/ELFYAML.cpp -@@ -260,6 +260,7 @@ void ScalarEnumerationTraits::enumeration( - ECase(ELFOSABI_AROS); - ECase(ELFOSABI_FENIXOS); - ECase(ELFOSABI_CLOUDABI); -+ ECase(ELFOSABI_GENODE); - ECase(ELFOSABI_AMDGPU_HSA); - ECase(ELFOSABI_AMDGPU_PAL); - ECase(ELFOSABI_AMDGPU_MESA3D); -diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp -index 26d9327f620..1866b07ac68 100644 ---- a/lib/Support/Triple.cpp -+++ b/lib/Support/Triple.cpp -@@ -181,6 +181,7 @@ StringRef Triple::getOSTypeName(OSType Kind) { - case DragonFly: return "dragonfly"; - case FreeBSD: return "freebsd"; - case Fuchsia: return "fuchsia"; -+ case Genode: return "genode"; - case IOS: return "ios"; - case KFreeBSD: return "kfreebsd"; - case Linux: return "linux"; -@@ -478,6 +479,7 @@ static Triple::OSType parseOS(StringRef OSName) { - .StartsWith("dragonfly", Triple::DragonFly) - .StartsWith("freebsd", Triple::FreeBSD) - .StartsWith("fuchsia", Triple::Fuchsia) -+ .StartsWith("genode", Triple::Genode) - .StartsWith("ios", Triple::IOS) - .StartsWith("kfreebsd", Triple::KFreeBSD) - .StartsWith("linux", Triple::Linux) -diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp -index 93254717e92..3d96ff9332a 100644 ---- a/tools/llvm-readobj/ELFDumper.cpp -+++ b/tools/llvm-readobj/ELFDumper.cpp -@@ -911,6 +911,7 @@ static const EnumEntry ElfOSABI[] = { - {"AROS", "AROS", ELF::ELFOSABI_AROS}, - {"FenixOS", "FenixOS", ELF::ELFOSABI_FENIXOS}, - {"CloudABI", "CloudABI", ELF::ELFOSABI_CLOUDABI}, -+ {"Genode", "Genode", ELF::ELFOSABI_GENODE}, - {"Standalone", "Standalone App", ELF::ELFOSABI_STANDALONE} - }; - -diff --git a/unittests/ADT/TripleTest.cpp b/unittests/ADT/TripleTest.cpp -index bc7f9321caa..5d6a56d7723 100644 ---- a/unittests/ADT/TripleTest.cpp -+++ b/unittests/ADT/TripleTest.cpp -@@ -241,6 +241,12 @@ TEST(TripleTest, ParsedIDs) { - EXPECT_EQ(Triple::Fuchsia, T.getOS()); - EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); - -+ T = Triple("x86_64-unknown-genode"); -+ EXPECT_EQ(Triple::x86_64, T.getArch()); -+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); -+ EXPECT_EQ(Triple::Genode, T.getOS()); -+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); -+ - T = Triple("x86_64-unknown-hermit"); - EXPECT_EQ(Triple::x86_64, T.getArch()); - EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); -diff --git a/utils/benchmark/src/internal_macros.h b/utils/benchmark/src/internal_macros.h -index f2d54bfcbd9..e20f891d435 100644 ---- a/utils/benchmark/src/internal_macros.h -+++ b/utils/benchmark/src/internal_macros.h -@@ -65,6 +65,8 @@ - #define BENCHMARK_OS_FUCHSIA 1 - #elif defined (__SVR4) && defined (__sun) - #define BENCHMARK_OS_SOLARIS 1 -+#elif defined(__GENODE__) -+ #define BENCHMARK_OS_GENODE 1 - #endif - - #if !__has_feature(cxx_exceptions) && !defined(__cpp_exceptions) \ -diff --git a/utils/gn/secondary/clang/lib/Driver/BUILD.gn b/utils/gn/secondary/clang/lib/Driver/BUILD.gn -index 1f07a6272d8..74eefe63b01 100644 ---- a/utils/gn/secondary/clang/lib/Driver/BUILD.gn -+++ b/utils/gn/secondary/clang/lib/Driver/BUILD.gn -@@ -62,6 +62,7 @@ static_library("Driver") { - "ToolChains/DragonFly.cpp", - "ToolChains/FreeBSD.cpp", - "ToolChains/Fuchsia.cpp", -+ "ToolChains/Genode.cpp", - "ToolChains/Gnu.cpp", - "ToolChains/HIP.cpp", - "ToolChains/Haiku.cpp", diff --git a/overlay/llvm-8/llvm-outputs.patch b/overlay/llvm-8/llvm-outputs.patch deleted file mode 100644 index 40096fa..0000000 --- a/overlay/llvm-8/llvm-outputs.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp -index 94d426b..37f7794 100644 ---- a/tools/llvm-config/llvm-config.cpp -+++ b/tools/llvm-config/llvm-config.cpp -@@ -333,6 +333,21 @@ int main(int argc, char **argv) { - ActiveIncludeOption = "-I" + ActiveIncludeDir; - } - -+ /// Nix-specific multiple-output handling: override ActiveLibDir if --link-shared -+ if (!IsInDevelopmentTree) { -+ bool WantShared = true; -+ for (int i = 1; i < argc; ++i) { -+ StringRef Arg = argv[i]; -+ if (Arg == "--link-shared") -+ WantShared = true; -+ else if (Arg == "--link-static") -+ WantShared = false; // the last one wins -+ } -+ -+ if (WantShared) -+ ActiveLibDir = std::string("@lib@") + "/lib" + LLVM_LIBDIR_SUFFIX; -+ } -+ - /// We only use `shared library` mode in cases where the static library form - /// of the components provided are not available; note however that this is - /// skipped if we're run from within the build dir. However, once installed, diff --git a/overlay/llvm-8/llvm.nix b/overlay/llvm-8/llvm.nix deleted file mode 100644 index bd3f013..0000000 --- a/overlay/llvm-8/llvm.nix +++ /dev/null @@ -1,179 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv -, fetch -, cmake -, python -, libffi -, libbfd -, libpfm -, libxml2 -, ncurses -, version -, release_version -, zlib -, buildPackages -, debugVersion ? false -, enableManpages ? false -, enableSharedLibraries ? true -, enablePFM ? !(stdenv.isDarwin - || stdenv.isAarch64 # broken for Ampere eMAG 8180 (c2.large.arm on Packet) #56245 -) -, enablePolly ? false -}: - -let - inherit (stdenv.lib) optional optionals optionalString; - - # Used when creating a version-suffixed symlink of libLLVM.dylib - shortVersion = with stdenv.lib; - concatStringsSep "." (take 1 (splitString "." release_version)); - -in stdenv.mkDerivation ({ - name = "llvm-${version}"; - - src = fetch "llvm" "1rvm5gqp5v8hfn17kqws3zhk94w4kxndal12bqa0y57p09nply24"; - polly_src = fetch "polly" "1lfjdz3ilj5xmjxvicd8f5ykybks67ry2pdb777352r3mzlgg8g8"; - - unpackPhase = '' - unpackFile $src - mv llvm-${version}* llvm - sourceRoot=$PWD/llvm - '' + optionalString enablePolly '' - unpackFile $polly_src - mv polly-* $sourceRoot/tools/polly - ''; - - outputs = [ "out" "python" ] - ++ optional enableSharedLibraries "lib"; - - nativeBuildInputs = [ cmake python ] - ++ optionals enableManpages [ python.pkgs.sphinx python.pkgs.recommonmark ]; - - buildInputs = [ libxml2 libffi ] - ++ optional enablePFM libpfm; # exegesis - - propagatedBuildInputs = [ ncurses zlib ]; - - patches = [ ./llvm-genode.patch ]; - - postPatch = optionalString stdenv.isDarwin '' - substituteInPlace cmake/modules/AddLLVM.cmake \ - --replace 'set(_install_name_dir INSTALL_NAME_DIR "@rpath")' "set(_install_name_dir)" \ - --replace 'set(_install_rpath "@loader_path/../lib" ''${extra_libdir})' "" - '' - # Patch llvm-config to return correct library path based on --link-{shared,static}. - + optionalString (enableSharedLibraries) '' - substitute '${./llvm-outputs.patch}' ./llvm-outputs.patch --subst-var lib - patch -p1 < ./llvm-outputs.patch - '' + '' - # FileSystem permissions tests fail with various special bits - substituteInPlace unittests/Support/CMakeLists.txt \ - --replace "Path.cpp" "" - rm unittests/Support/Path.cpp - '' + optionalString stdenv.hostPlatform.isMusl '' - patch -p1 -i ${../TLI-musl.patch} - substituteInPlace unittests/Support/CMakeLists.txt \ - --replace "add_subdirectory(DynamicLibrary)" "" - rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp - # valgrind unhappy with musl or glibc, but fails w/musl only - rm test/CodeGen/AArch64/wineh4.mir - '' + '' - patchShebangs test/BugPoint/compile-custom.ll.py - ''; - - # hacky fix: created binaries need to be run before installation - preBuild = '' - mkdir -p $out/ - ln -sv $PWD/lib $out - ''; - - cmakeFlags = with stdenv; [ - "-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}" - "-DLLVM_INSTALL_UTILS=ON" # Needed by rustc - "-DLLVM_BUILD_TESTS=ON" - "-DLLVM_ENABLE_FFI=ON" - "-DLLVM_ENABLE_RTTI=ON" - "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}" - "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}" - "-DLLVM_ENABLE_DUMP=ON" - ] ++ optionals enableSharedLibraries [ - "-DLLVM_LINK_LLVM_DYLIB=ON" - ] ++ optionals enableManpages [ - "-DLLVM_BUILD_DOCS=ON" - "-DLLVM_ENABLE_SPHINX=ON" - "-DSPHINX_OUTPUT_MAN=ON" - "-DSPHINX_OUTPUT_HTML=OFF" - "-DSPHINX_WARNINGS_AS_ERRORS=OFF" - ] ++ optionals (!isDarwin) [ - "-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include" - ] ++ optionals (isDarwin) [ - "-DLLVM_ENABLE_LIBCXX=ON" - "-DCAN_TARGET_i386=false" - ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ - "-DCMAKE_CROSSCOMPILING=True" - "-DLLVM_TABLEGEN=${buildPackages.llvm_7}/bin/llvm-tblgen" - ]; - - postBuild = '' - rm -fR $out - ''; - - preCheck = '' - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib - ''; - - postInstall = '' - mkdir -p $python/share - mv $out/share/opt-viewer $python/share/opt-viewer - '' - + optionalString enableSharedLibraries '' - moveToOutput "lib/libLLVM-*" "$lib" - moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" - substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ - --replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-" - '' - + optionalString (stdenv.isDarwin && enableSharedLibraries) '' - substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ - --replace "\''${_IMPORT_PREFIX}/lib/libLLVM.dylib" "$lib/lib/libLLVM.dylib" - ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib - ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib - ''; - - doCheck = stdenv.isLinux && (!stdenv.isx86_32); - - checkTarget = "check-all"; - - enableParallelBuilding = true; - - meta = { - description = "Collection of modular and reusable compiler and toolchain technologies"; - homepage = http://llvm.org/; - license = stdenv.lib.licenses.ncsa; - maintainers = with stdenv.lib.maintainers; [ lovek323 raskin dtzWill ]; - platforms = stdenv.lib.platforms.all; - }; -} // stdenv.lib.optionalAttrs enableManpages { - name = "llvm-manpages-${version}"; - - buildPhase = '' - make docs-llvm-man - ''; - - propagatedBuildInputs = []; - - installPhase = '' - make -C docs install - ''; - - postPatch = null; - postInstall = null; - - outputs = [ "out" ]; - - doCheck = false; - - meta.description = "man pages for LLVM ${version}"; -}) diff --git a/overlay/llvm-8/openmp.nix b/overlay/llvm-8/openmp.nix deleted file mode 100644 index 4343518..0000000 --- a/overlay/llvm-8/openmp.nix +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-FileCopyrightText: 2003-2020 Nixpkgs/NixOS contributors -# -# SPDX-License-Identifier: MIT - -{ stdenv -, fetch -, cmake -, llvm -, perl -, version -}: - -stdenv.mkDerivation { - pname = "openmp"; - inherit version; - - src = fetch "openmp" "0b3jlxhqbpyd1nqkpxjfggm5d9va5qpyf7d4i5y7n4a1mlydv19y"; - - nativeBuildInputs = [ cmake perl ]; - buildInputs = [ llvm ]; - - enableParallelBuilding = true; - - meta = { - description = "Components required to build an executable OpenMP program"; - homepage = http://openmp.llvm.org/; - license = stdenv.lib.licenses.mit; - platforms = stdenv.lib.platforms.all; - }; -} diff --git a/overlay/llvm-8/sanitizers-nongnu.patch b/overlay/llvm-8/sanitizers-nongnu.patch deleted file mode 100644 index 1f2ac97..0000000 --- a/overlay/llvm-8/sanitizers-nongnu.patch +++ /dev/null @@ -1,412 +0,0 @@ -From f7a253f8f85d0f49df6b73996737a3e84ac64236 Mon Sep 17 00:00:00 2001 -From: Will Dietz -Date: Mon, 24 Sep 2018 11:17:25 -0500 -Subject: [PATCH] Ported to 7.0, taken from gentoo-musl project. - ------- -Ported to compiler-rt-sanitizers-5.0.0. Taken from - -https://gist.githubusercontent.com/pwaller/2337f3290f12634cad3e3730cff0a6c1/raw/83c87a8585e2f9662494db5662e5361beb093c26/nongnu.patch -Signed-off-by: Jory A. Pratt - -Taken from gentoo-musl project, with a few additional minor fixes. ---- - lib/asan/asan_linux.cc | 4 +- - lib/interception/interception_linux.cc | 2 +- - lib/interception/interception_linux.h | 2 +- - lib/msan/msan_linux.cc | 2 +- - lib/sanitizer_common/sanitizer_allocator.cc | 2 +- - .../sanitizer_common_interceptors_ioctl.inc | 4 +- - .../sanitizer_common_syscalls.inc | 2 +- - lib/sanitizer_common/sanitizer_linux.cc | 8 +++- - .../sanitizer_linux_libcdep.cc | 10 ++--- - lib/sanitizer_common/sanitizer_platform.h | 6 +++ - .../sanitizer_platform_interceptors.h | 4 +- - .../sanitizer_platform_limits_posix.cc | 37 +++++++++++-------- - lib/tsan/rtl/tsan_platform_linux.cc | 2 +- - 13 files changed, 51 insertions(+), 34 deletions(-) - -diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc -index 625f32d40..73cf77aca 100644 ---- a/lib/asan/asan_linux.cc -+++ b/lib/asan/asan_linux.cc -@@ -46,7 +46,7 @@ - #include - #endif - --#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS -+#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU - #include - extern "C" void* _DYNAMIC; - #elif SANITIZER_NETBSD -@@ -139,7 +139,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) { - UNIMPLEMENTED(); - } - --#if SANITIZER_ANDROID -+#if SANITIZER_ANDROID || SANITIZER_NONGNU - // FIXME: should we do anything for Android? - void AsanCheckDynamicRTPrereqs() {} - void AsanCheckIncompatibleRT() {} -diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc -index 26bfcd8f6..529b234f7 100644 ---- a/lib/interception/interception_linux.cc -+++ b/lib/interception/interception_linux.cc -@@ -43,7 +43,7 @@ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, - } - - // Android and Solaris do not have dlvsym --#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD -+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU - void *GetFuncAddrVer(const char *func_name, const char *ver) { - return dlvsym(RTLD_NEXT, func_name, ver); - } -diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h -index 942c25609..24a4d5080 100644 ---- a/lib/interception/interception_linux.h -+++ b/lib/interception/interception_linux.h -@@ -36,7 +36,7 @@ void *GetFuncAddrVer(const char *func_name, const char *ver); - (::__interception::uptr) & WRAP(func)) - - // Android, Solaris and OpenBSD do not have dlvsym --#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD -+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU - #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ - (::__interception::real_##func = (func##_f)( \ - unsigned long)::__interception::GetFuncAddrVer(#func, symver)) -diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc -index 385a650c4..6e30a8ce9 100644 ---- a/lib/msan/msan_linux.cc -+++ b/lib/msan/msan_linux.cc -@@ -13,7 +13,7 @@ - //===----------------------------------------------------------------------===// - - #include "sanitizer_common/sanitizer_platform.h" --#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD -+#if SANITIZER_FREEBSD || (SANITIZER_LINUX && !SANITIZER_NONGNU) || SANITIZER_NETBSD - - #include "msan.h" - #include "msan_report.h" -diff --git a/lib/sanitizer_common/sanitizer_allocator.cc b/lib/sanitizer_common/sanitizer_allocator.cc -index 6bfd5e5ee..048f6154f 100644 ---- a/lib/sanitizer_common/sanitizer_allocator.cc -+++ b/lib/sanitizer_common/sanitizer_allocator.cc -@@ -27,7 +27,7 @@ const char *SecondaryAllocatorName = "LargeMmapAllocator"; - - // ThreadSanitizer for Go uses libc malloc/free. - #if SANITIZER_GO || defined(SANITIZER_USE_MALLOC) --# if SANITIZER_LINUX && !SANITIZER_ANDROID -+# if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - extern "C" void *__libc_malloc(uptr size); - # if !SANITIZER_GO - extern "C" void *__libc_memalign(uptr alignment, uptr size); -diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -index 2d633c173..b6eb23116 100644 ---- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -+++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -@@ -104,7 +104,7 @@ static void ioctl_table_fill() { - _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz); - #endif - --#if SANITIZER_LINUX -+#if SANITIZER_LINUX && !SANITIZER_NONGNU - // Conflicting request ids. - // _(CDROMAUDIOBUFSIZ, NONE, 0); - // _(SNDCTL_TMR_CONTINUE, NONE, 0); -@@ -365,7 +365,7 @@ static void ioctl_table_fill() { - _(VT_WAITACTIVE, NONE, 0); - #endif - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE - _(CYGETDEFTHRESH, WRITE, sizeof(int)); - _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); -diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc -index 469c8eb7e..24f87867d 100644 ---- a/lib/sanitizer_common/sanitizer_common_syscalls.inc -+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc -@@ -2038,7 +2038,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) { - } - } - --#if !SANITIZER_ANDROID -+#if !SANITIZER_ANDROID && !SANITIZER_NONGNU - PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim, - void *old_rlim) { - if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz); -diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc -index 96d6c1eff..9e2b7fb9d 100644 ---- a/lib/sanitizer_common/sanitizer_linux.cc -+++ b/lib/sanitizer_common/sanitizer_linux.cc -@@ -541,13 +541,13 @@ const char *GetEnv(const char *name) { - #endif - } - --#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD -+#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_NONGNU - extern "C" { - SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end; - } - #endif - --#if !SANITIZER_GO && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \ -+#if (!SANITIZER_GO || SANITIZER_NONGNU) && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \ - !SANITIZER_OPENBSD - static void ReadNullSepFileToArray(const char *path, char ***arr, - int arr_size) { -@@ -590,6 +590,10 @@ static void GetArgsAndEnv(char ***argv, char ***envp) { - #elif SANITIZER_NETBSD - *argv = __ps_strings->ps_argvstr; - *envp = __ps_strings->ps_envstr; -+#elif SANITIZER_NONGNU -+ static const int kMaxArgv = 2000, kMaxEnvp = 2000; -+ ReadNullSepFileToArray("/proc/self/cmdline", argv, kMaxArgv); -+ ReadNullSepFileToArray("/proc/self/environ", envp, kMaxEnvp); - #else // SANITIZER_FREEBSD - #if !SANITIZER_GO - if (&__libc_stack_end) { -diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc -index 4962ff832..438f94dbe 100644 ---- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc -+++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc -@@ -179,7 +179,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor, - } - - #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \ -- !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS -+ !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU - static uptr g_tls_size; - - #ifdef __i386__ -@@ -261,7 +261,7 @@ void InitTlsSize() { } - #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) || \ - defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) || \ - defined(__arm__)) && \ -- SANITIZER_LINUX && !SANITIZER_ANDROID -+ SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - // sizeof(struct pthread) from glibc. - static atomic_uintptr_t thread_descriptor_size; - -@@ -426,7 +426,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) { - - #if !SANITIZER_GO - static void GetTls(uptr *addr, uptr *size) { --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - # if defined(__x86_64__) || defined(__i386__) || defined(__s390__) - *addr = ThreadSelf(); - *size = GetTlsSize(); -@@ -470,7 +470,7 @@ static void GetTls(uptr *addr, uptr *size) { - #elif SANITIZER_OPENBSD - *addr = 0; - *size = 0; --#elif SANITIZER_ANDROID -+#elif SANITIZER_ANDROID || SANITIZER_NONGNU - *addr = 0; - *size = 0; - #elif SANITIZER_SOLARIS -@@ -486,7 +486,7 @@ static void GetTls(uptr *addr, uptr *size) { - #if !SANITIZER_GO - uptr GetTlsSize() { - #if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \ -- SANITIZER_OPENBSD || SANITIZER_SOLARIS -+ SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU - uptr addr, size; - GetTls(&addr, &size); - return size; -diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h -index d81e25580..e10680ac8 100644 ---- a/lib/sanitizer_common/sanitizer_platform.h -+++ b/lib/sanitizer_common/sanitizer_platform.h -@@ -208,6 +208,12 @@ - # define SANITIZER_SOLARIS32 0 - #endif - -+#if defined(__linux__) && !defined(__GLIBC__) -+# define SANITIZER_NONGNU 1 -+#else -+# define SANITIZER_NONGNU 0 -+#endif -+ - #if defined(__myriad2__) - # define SANITIZER_MYRIAD2 1 - #else -diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h -index f95539a73..6c53b3415 100644 ---- a/lib/sanitizer_common/sanitizer_platform_interceptors.h -+++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h -@@ -39,7 +39,7 @@ - # include "sanitizer_platform_limits_solaris.h" - #endif - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - # define SI_LINUX_NOT_ANDROID 1 - #else - # define SI_LINUX_NOT_ANDROID 0 -@@ -322,7 +322,7 @@ - #define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID) - #define SANITIZER_INTERCEPT_SHMCTL \ - (SI_NETBSD || SI_OPENBSD || SI_SOLARIS || \ -- ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && \ -+ ((SI_FREEBSD || SI_LINUX_NOT_ANDROID || SANITIZER_NONGNU) && \ - SANITIZER_WORDSIZE == 64)) // NOLINT - #define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID - #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_POSIX -diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc -index 54da635d7..2f6ff69c3 100644 ---- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc -+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc -@@ -14,6 +14,9 @@ - - #include "sanitizer_platform.h" - -+// Workaround musl <--> linux conflicting definition of 'struct sysinfo' -+#define _LINUX_SYSINFO_H -+ - #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC - // Tests in this file assume that off_t-dependent data structures match the - // libc ABI. For example, struct dirent here is what readdir() function (as -@@ -138,12 +141,14 @@ typedef struct user_fpregs elf_fpregset_t; - - #if SANITIZER_LINUX && !SANITIZER_ANDROID - #include --#include -+# if !SANITIZER_NONGNU -+# include -+# endif - #include --#include --#include --#include --#include -+#include -+#include -+#include -+#include - #if HAVE_RPC_XDR_H - # include - #elif HAVE_TIRPC_RPC_XDR_H -@@ -251,7 +256,7 @@ namespace __sanitizer { - unsigned struct_itimerspec_sz = sizeof(struct itimerspec); - #endif // SANITIZER_LINUX || SANITIZER_FREEBSD - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - // Use pre-computed size of struct ustat to avoid which - // has been removed from glibc 2.28. - #if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \ -@@ -322,7 +327,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr)); - unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); - #endif - --#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID -+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU - int glob_nomatch = GLOB_NOMATCH; - int glob_altdirfunc = GLOB_ALTDIRFUNC; - #endif -@@ -416,7 +421,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); - unsigned struct_termios_sz = sizeof(struct termios); - unsigned struct_winsize_sz = sizeof(struct winsize); - --#if SANITIZER_LINUX -+#if SANITIZER_LINUX && !SANITIZER_NONGNU - unsigned struct_arpreq_sz = sizeof(struct arpreq); - unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf); - unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession); -@@ -466,7 +471,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); - unsigned struct_vt_mode_sz = sizeof(struct vt_mode); - #endif // SANITIZER_LINUX || SANITIZER_FREEBSD - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); - unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); - #if EV_VERSION > (0x010000) -@@ -834,7 +839,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); - unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE; - #endif // SANITIZER_LINUX || SANITIZER_FREEBSD - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; - unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; - unsigned IOCTL_CYGETMON = CYGETMON; -@@ -989,7 +994,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); - CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); - #endif // SANITIZER_LINUX || SANITIZER_FREEBSD - --#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID -+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU - CHECK_TYPE_SIZE(glob_t); - CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); - CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); -@@ -1023,6 +1028,7 @@ CHECK_TYPE_SIZE(iovec); - CHECK_SIZE_AND_OFFSET(iovec, iov_base); - CHECK_SIZE_AND_OFFSET(iovec, iov_len); - -+#if !SANITIZER_NONGNU - CHECK_TYPE_SIZE(msghdr); - CHECK_SIZE_AND_OFFSET(msghdr, msg_name); - CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen); -@@ -1036,6 +1042,7 @@ CHECK_TYPE_SIZE(cmsghdr); - CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len); - CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level); - CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type); -+#endif - - #ifndef __GLIBC_PREREQ - #define __GLIBC_PREREQ(x, y) 0 -@@ -1145,7 +1152,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno); - - CHECK_TYPE_SIZE(ether_addr); - --#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID -+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU - CHECK_TYPE_SIZE(ipc_perm); - # if SANITIZER_FREEBSD - CHECK_SIZE_AND_OFFSET(ipc_perm, key); -@@ -1206,7 +1213,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); - CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data); - #endif - --#if SANITIZER_LINUX -+#if SANITIZER_LINUX && !SANITIZER_NONGNU - COMPILER_CHECK(sizeof(__sanitizer_mallinfo) == sizeof(struct mallinfo)); - #endif - -@@ -1256,7 +1263,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); - COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); - #endif - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE)); - CHECK_SIZE_AND_OFFSET(FILE, _flags); - CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr); -@@ -1275,7 +1282,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain); - CHECK_SIZE_AND_OFFSET(FILE, _fileno); - #endif - --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk)); - CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit); - CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev); -diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc -index de989b780..51a97b554 100644 ---- a/lib/tsan/rtl/tsan_platform_linux.cc -+++ b/lib/tsan/rtl/tsan_platform_linux.cc -@@ -294,7 +294,7 @@ void InitializePlatform() { - // This is required to properly "close" the fds, because we do not see internal - // closes within glibc. The code is a pure hack. - int ExtractResolvFDs(void *state, int *fds, int nfd) { --#if SANITIZER_LINUX && !SANITIZER_ANDROID -+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - int cnt = 0; - struct __res_state *statp = (struct __res_state*)state; - for (int i = 0; i < MAXNS && cnt < nfd; i++) { --- -2.19.0 -