This commit is contained in:
Alexey Pavlov
2018-08-07 17:04:49 +03:00
10 changed files with 0 additions and 1250 deletions

View File

@@ -1,28 +0,0 @@
Index: llvm-toolchain-snapshot-3.5~svn211313/tools/bugpoint/Makefile
===================================================================
--- llvm-toolchain-snapshot-3.5~svn211313.orig/tools/bugpoint/Makefile
+++ llvm-toolchain-snapshot-3.5~svn211313/tools/bugpoint/Makefile
@@ -12,6 +12,9 @@ TOOLNAME := bugpoint
LINK_COMPONENTS := asmparser instrumentation scalaropts ipo linker bitreader \
bitwriter irreader vectorize objcarcopts codegen
+# Crappy workaround to make sure it links correctly.
+LLVMLibsOptions := ../../lib/IR/Release*/Pass.o
+
# Support plugins.
NO_DEAD_STRIP := 1
Index: llvm-toolchain-snapshot-3.5~svn211313/tools/opt/Makefile
===================================================================
--- llvm-toolchain-snapshot-3.5~svn211313.orig/tools/opt/Makefile
+++ llvm-toolchain-snapshot-3.5~svn211313/tools/opt/Makefile
@@ -10,7 +10,9 @@
LEVEL := ../..
TOOLNAME := opt
LINK_COMPONENTS := bitreader bitwriter asmparser irreader instrumentation scalaropts objcarcopts ipo vectorize all-targets codegen
+# Crappy workaround to make sure it links correctly.
+LLVMLibsOptions := ../../lib/IR/Release*/Pass.o
# Support plugins.
NO_DEAD_STRIP := 1

View File

@@ -1,32 +0,0 @@
Original author: Reid Kleckner <rnk@google.com>
Backported to clang 3.5 by: Antal Szabó <szabo.antal.92@gmail.com>
This patch fixes the lowering of __builtin_fabs, __builtin_fabsf and __builtin_fabsl. Based on clang r221206.
Original log message:
Lower __builtin_fabs* to @llvm.fabs.*
mingw64's headers implement fabs by calling __builtin_fabs, so using the
library call results in an infinite loop. If the backend legalizes
@llvm.fabs as a call to fabs later, things should work out, as the crt
provides a definition.
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp
index 4f68b34..230a770 100644
--- a/lib/CodeGen/CGBuiltin.cpp
+++ b/lib/CodeGen/CGBuiltin.cpp
@@ -255,6 +255,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
return RValue::get(Result);
}
+ case Builtin::BI__builtin_fabs:
+ case Builtin::BI__builtin_fabsf:
+ case Builtin::BI__builtin_fabsl: {
+ Value *Arg1 = EmitScalarExpr(E->getArg(0));
+ Value *Result = EmitFAbs(*this, Arg1, E->getArg(0)->getType());
+ return RValue::get(Result);
+ }
case Builtin::BI__builtin_conj:
case Builtin::BI__builtin_conjf:

View File

@@ -1,136 +0,0 @@
Author: Martell Malone <martellmalone@gmail.com>
This adds seh exception handling on the clang side.
For now this will remove link errors regardless if seh is supported on the llvm backend or not.
diff --git a/include/clang/Basic/LangOptions.def b/include/clang/Basic/LangOptions.def
index 34dfea2..ac20a9b 100644
--- a/include/clang/Basic/LangOptions.def
+++ b/include/clang/Basic/LangOptions.def
@@ -82,6 +82,7 @@
LANGOPT(ObjCExceptions , 1, 0, "Objective-C exceptions")
LANGOPT(CXXExceptions , 1, 0, "C++ exceptions")
LANGOPT(SjLjExceptions , 1, 0, "setjmp-longjump exception handling")
+LANGOPT(SEHExceptions , 1, 0, "SEH exception handling")
LANGOPT(TraditionalCPP , 1, 0, "traditional CPP emulation")
LANGOPT(RTTI , 1, 1, "run-time type information")
LANGOPT(RTTIData , 1, 1, "emit run-time type information data")
diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td
index 5ffeb43..ab73ca8 100644
--- a/include/clang/Driver/CC1Options.td
+++ b/include/clang/Driver/CC1Options.td
@@ -425,6 +425,8 @@
HelpText<"Weakly link in the blocks runtime">;
def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">,
HelpText<"Use SjLj style exceptions">;
+def fseh_exceptions : Flag<["-"], "fseh-exceptions">,
+ HelpText<"Use SEH style exceptions">;
def split_dwarf_file : Separate<["-"], "split-dwarf-file">,
HelpText<"File name to use for split dwarf debug info output">;
def fno_wchar : Flag<["-"], "fno-wchar">,
diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h
index ceb1c76..30d687f 100644
--- a/include/clang/Driver/ToolChain.h
+++ b/include/clang/Driver/ToolChain.h
@@ -248,6 +248,9 @@
/// UseSjLjExceptions - Does this tool chain use SjLj exceptions.
virtual bool UseSjLjExceptions() const { return false; }
+ /// UseSEHExceptions - Does this tool chain use SEH exceptions.
+ virtual bool UseSEHExceptions() const { return false; }
+
/// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
/// command line arguments into account.
virtual std::string
diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp
index cc03b0a..a4aa44b 100644
--- a/lib/CodeGen/CGException.cpp
+++ b/lib/CodeGen/CGException.cpp
@@ -137,12 +137,14 @@
static const EHPersonality &get(const LangOptions &Lang);
static const EHPersonality GNU_C;
static const EHPersonality GNU_C_SJLJ;
+ static const EHPersonality GNU_C_SEH;
static const EHPersonality GNU_ObjC;
static const EHPersonality GNUstep_ObjC;
static const EHPersonality GNU_ObjCXX;
static const EHPersonality NeXT_ObjC;
static const EHPersonality GNU_CPlusPlus;
static const EHPersonality GNU_CPlusPlus_SJLJ;
+ static const EHPersonality GNU_CPlusPlus_SEH;
};
}
@@ -150,12 +152,16 @@
const EHPersonality
EHPersonality::GNU_C_SJLJ = { "__gcc_personality_sj0", nullptr };
const EHPersonality
+EHPersonality::GNU_C_SEH = { "__gcc_personality_seh0", nullptr };
+const EHPersonality
EHPersonality::NeXT_ObjC = { "__objc_personality_v0", nullptr };
const EHPersonality
EHPersonality::GNU_CPlusPlus = { "__gxx_personality_v0", nullptr };
const EHPersonality
EHPersonality::GNU_CPlusPlus_SJLJ = { "__gxx_personality_sj0", nullptr };
const EHPersonality
+EHPersonality::GNU_CPlusPlus_SEH = { "__gxx_personality_seh0", nullptr };
+const EHPersonality
EHPersonality::GNU_ObjC = {"__gnu_objc_personality_v0", "objc_exception_throw"};
const EHPersonality
EHPersonality::GNU_ObjCXX = { "__gnustep_objcxx_personality_v0", nullptr };
@@ -165,6 +171,8 @@
static const EHPersonality &getCPersonality(const LangOptions &L) {
if (L.SjLjExceptions)
return EHPersonality::GNU_C_SJLJ;
+ if (L.SEHExceptions)
+ return EHPersonality::GNU_C_SEH;
return EHPersonality::GNU_C;
}
@@ -189,6 +197,8 @@
static const EHPersonality &getCXXPersonality(const LangOptions &L) {
if (L.SjLjExceptions)
return EHPersonality::GNU_CPlusPlus_SJLJ;
+ else if (L.SEHExceptions)
+ return EHPersonality::GNU_CPlusPlus_SEH;
else
return EHPersonality::GNU_CPlusPlus;
}
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index a670502..65bd056 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -4048,6 +4048,8 @@
if (getToolChain().UseSjLjExceptions())
CmdArgs.push_back("-fsjlj-exceptions");
+ else if (getToolChain().UseSEHExceptions())
+ CmdArgs.push_back("-fseh-exceptions");
// C++ "sane" operator new.
if (!Args.hasFlag(options::OPT_fassume_sane_operator_new,
diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp
index 92202b7..de55c8b 100644
--- a/lib/Frontend/CompilerInvocation.cpp
+++ b/lib/Frontend/CompilerInvocation.cpp
@@ -1424,6 +1424,7 @@
Opts.ObjCExceptions = Args.hasArg(OPT_fobjc_exceptions);
Opts.CXXExceptions = Args.hasArg(OPT_fcxx_exceptions);
Opts.SjLjExceptions = Args.hasArg(OPT_fsjlj_exceptions);
+ Opts.SEHExceptions = Args.hasArg(OPT_fseh_exceptions);
Opts.TraditionalCPP = Args.hasArg(OPT_traditional_cpp);
Opts.RTTI = !Args.hasArg(OPT_fno_rtti);
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp
index 39c474b..ceab8ac 100644
--- a/lib/Frontend/InitPreprocessor.cpp
+++ b/lib/Frontend/InitPreprocessor.cpp
@@ -557,6 +557,8 @@
Builder.defineMacro("__GXX_RTTI");
if (LangOpts.SjLjExceptions)
Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__");
+ if (LangOpts.SEHExceptions)
+ Builder.defineMacro("__SEH__");
if (LangOpts.Deprecated)
Builder.defineMacro("__DEPRECATED");

View File

@@ -1,675 +0,0 @@
Author: Martell Malone <martellmalone@gmail.com>
This adds the mingw64 driver to clang even with the new triplets compnerd has created in clang.
Based off of ruben driver patch back from Jan
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index bb1fe2d..9877216 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -1041,6 +1041,11 @@
def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>;
def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>;
def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">, Group<clang_ignored_m_Group>;
+def mconsole : Joined<["-"], "mconsole">, Group<m_Group>, Flags<[DriverOption]>;
+def mwindows : Joined<["-"], "mwindows">, Group<m_Group>, Flags<[DriverOption]>;
+def mdll : Joined<["-"], "mdll">, Group<m_Group>, Flags<[DriverOption]>;
+def municode : Joined<["-"], "municode">, Group<m_Group>, Flags<[DriverOption]>;
+def mthreads : Joined<["-"], "mthreads">, Group<m_Group>, Flags<[DriverOption]>;
def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
def mfix_and_continue : Flag<["-"], "mfix-and-continue">, Group<clang_ignored_m_Group>;
diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt
index e874ab8..71b7ec6 100644
--- a/lib/Driver/CMakeLists.txt
+++ b/lib/Driver/CMakeLists.txt
@@ -16,6 +16,7 @@
ToolChain.cpp
ToolChains.cpp
WindowsToolChain.cpp
+ MinGWToolChain.cpp
Tools.cpp
Types.cpp
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index ca3e50f..c49d9fd 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -1993,12 +1993,7 @@
TC = new toolchains::Generic_GCC(*this, Target, Args);
break;
case llvm::Triple::GNU:
- // FIXME: We need a MinGW toolchain. Use the default Generic_GCC
- // toolchain for now as the default case would below otherwise.
- if (Target.isOSBinFormatELF())
- TC = new toolchains::Generic_ELF(*this, Target, Args);
- else
- TC = new toolchains::Generic_GCC(*this, Target, Args);
+ TC = new toolchains::MinGW(*this, Target, Args);
break;
case llvm::Triple::MSVC:
case llvm::Triple::UnknownEnvironment:
diff --git a/lib/Driver/MinGWToolChain.cpp b/lib/Driver/MinGWToolChain.cpp
new file mode 100644
index 0000000..87c0aa2
--- /dev/null
+++ b/lib/Driver/MinGWToolChain.cpp
@@ -0,0 +1,195 @@
+//===--- MinGWToolChain.cpp - MinGWToolChain Implementation -----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ToolChains.h"
+#include "clang/Basic/CharInfo.h"
+#include "clang/Basic/DiagnosticIDs.h"
+#include "clang/Basic/Version.h"
+#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Driver.h"
+#include "clang/Driver/DriverDiagnostic.h"
+#include "clang/Driver/Options.h"
+#include "llvm/Option/Arg.h"
+#include "llvm/Option/ArgList.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+
+using namespace clang::diag;
+using namespace clang::driver;
+using namespace clang::driver::toolchains;
+using namespace clang;
+using namespace llvm::opt;
+
+MinGW::MinGW(const Driver &D, const llvm::Triple& Triple,
+ const ArgList &Args)
+ : ToolChain(D, Triple, Args) {
+ //TODO: libc++ directory
+
+ // Get GCC version string for library and header directories
+ const std::string GCClibdir =
+#ifdef LLVM_ON_WIN32
+ getDriver().Dir + "/../lib/gcc/" + getTriple().getArchName().str() + "-w64-mingw32";
+#else
+ getDriver().SysRoot + "/usr/lib/gcc/" + getTriple().getArchName().str() + "-w64-mingw32";
+#endif
+ if (llvm::sys::fs::exists(GCClibdir)) {
+ // Find subdirectory, should be the version of MinGW-w64 GCC
+ std::error_code EC;
+ llvm::sys::fs::directory_iterator entry(StringRef(GCClibdir), EC);
+ if (!EC)
+ GCCVersion = llvm::sys::path::filename(entry->path());
+ // TODO report error: "no MinGW-w64 GCC installation found"
+ }
+
+#ifdef LLVM_ON_WIN32
+ // assume sysrooted compiler
+ getFilePaths().push_back(getDriver().Dir + "/../lib");
+ getFilePaths().push_back(getDriver().Dir + "/../" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/lib");
+ getFilePaths().push_back(getDriver().Dir + "/../lib/gcc/"
+ + getTriple().getArchName().str() + "-w64-mingw32" + "/" + GCCVersion);
+
+#else
+ // assume install prefix /usr
+ getFilePaths().push_back(getDriver().SysRoot + "/usr/"
+ + getTriple().getArchName().str() + "-w64-mingw32" + "/lib");
+ getFilePaths().push_back(getDriver().SysRoot + "/usr/lib/gcc/"
+ + getTriple().getArchName().str() + "-w64-mingw32" + "/" + GCCVersion);
+#endif
+}
+
+Tool *MinGW::buildLinker() const {
+ return new tools::MinGW::Link(*this);
+}
+
+bool MinGW::IsIntegratedAssemblerDefault() const {
+ return true;
+}
+
+Tool *MinGW::getTool(Action::ActionClass AC) const {
+ switch (AC) {
+ case Action::PreprocessJobClass:
+ if (!Preprocess)
+ Preprocess.reset(new tools::gcc::Preprocess(*this));
+ return Preprocess.get();
+ case Action::CompileJobClass:
+ if (!Compile)
+ Compile.reset(new tools::gcc::Compile(*this));
+ return Compile.get();
+ default:
+ return ToolChain::getTool(AC);
+ }
+}
+
+Tool *MinGW::buildAssembler() const {
+ return new tools::MinGW::Assemble(*this);
+}
+
+bool MinGW::IsUnwindTablesDefault() const {
+ return getArch() == llvm::Triple::x86_64;
+}
+
+bool MinGW::isPICDefault() const {
+ return getArch() == llvm::Triple::x86_64;
+}
+
+bool MinGW::isPIEDefault() const {
+ return false;
+}
+
+
+bool MinGW::isPICDefaultForced() const {
+ return getArch() == llvm::Triple::x86_64;
+}
+
+bool MinGW::UseSEHExceptions() const {
+ return getArch() == llvm::Triple::x86_64;
+}
+
+void MinGW::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
+ ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdinc))
+ return;
+
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+ SmallString<128> P(getDriver().ResourceDir);
+ llvm::sys::path::append(P, "include");
+ addSystemInclude(DriverArgs, CC1Args, P.str());
+ }
+
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc))
+ return;
+
+#ifdef LLVM_ON_WIN32
+ // Clang runs on Windows, assume sysroot toolchain
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include");
+ // Add users standard include directory
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../include");
+#else
+ // Clang runs somewhere else, e.g. Linux, assume install prefix /usr
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include");
+#endif
+}
+
+void MinGW::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
+ ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
+ DriverArgs.hasArg(options::OPT_nostdincxx))
+ return;
+
+ // Check if libc++ has been enabled and provide its include paths if so.
+ if (GetCXXStdlibType(DriverArgs) == ToolChain::CST_Libcxx) {
+ // libc++ is always installed at a fixed path on Linux currently.
+#ifdef LLVM_ON_WIN32
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../include/c++/v1");
+#else
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/include/c++/v1");
+#endif
+ return;
+ }
+#ifdef LLVM_ON_WIN32
+ // Assume sysroot toolchain
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../include/c++/" + GCCVersion);
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../include/c++/" + GCCVersion
+ + "/" + getTriple().getArchName().str() + "-w64-mingw32");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../include/c++/" + GCCVersion
+ + "/backward");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++/" + getTriple().getArchName().str() + "-w64-mingw32");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().Dir + "/../" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++/backward");
+#else
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++/" + GCCVersion);
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++/" + GCCVersion
+ + "/" + getTriple().getArchName().str() + "-w64-mingw32");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/" + getTriple().getArchName().str() + "-w64-mingw32"
+ + "/include/c++/" + GCCVersion + "/backward");
+#endif
+}
diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h
index d5d0581..556afed 100644
--- a/lib/Driver/ToolChains.h
+++ b/lib/Driver/ToolChains.h
@@ -751,6 +751,36 @@
Tool *buildAssembler() const override;
};
+class LLVM_LIBRARY_VISIBILITY MinGW : public ToolChain {
+public:
+ MinGW(const Driver &D, const llvm::Triple &Triple,
+ const llvm::opt::ArgList &Args);
+
+ bool IsIntegratedAssemblerDefault() const override;
+ bool IsUnwindTablesDefault() const override;
+ bool isPICDefault() const override;
+ bool isPIEDefault() const override;
+ bool isPICDefaultForced() const override;
+ bool UseSEHExceptions() const override;
+
+ void
+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
+ void
+ AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
+
+protected:
+ Tool *buildLinker() const override;
+ Tool *buildAssembler() const override;
+ Tool *getTool(Action::ActionClass AC) const override;
+
+private:
+ std::string GCCVersion;
+ mutable std::unique_ptr<tools::gcc::Preprocess> Preprocess;
+ mutable std::unique_ptr<tools::gcc::Compile> Compile;
+};
+
class LLVM_LIBRARY_VISIBILITY XCore : public ToolChain {
public:
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 892810e..a670502 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -7949,6 +7949,210 @@
return new Command(JA, *this, Args.MakeArgString(Exec), CmdArgs);
}
+/// MinGW Tools
+void MinGW::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
+ const InputInfo &Output,
+ const InputInfoList &Inputs,
+ const ArgList &Args,
+ const char *LinkingOutput) const {
+ ArgStringList CmdArgs;
+
+ if (getToolChain().getArch() == llvm::Triple::x86) {
+ CmdArgs.push_back("--32");
+ } else if (getToolChain().getArch() == llvm::Triple::x86_64) {
+ CmdArgs.push_back("--64");
+ }
+
+ Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
+ options::OPT_Xassembler);
+
+ CmdArgs.push_back("-o");
+ CmdArgs.push_back(Output.getFilename());
+
+ for (const auto &II : Inputs)
+ CmdArgs.push_back(II.getFilename());
+
+ const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as"));
+ C.addCommand(new Command(JA, *this, Exec, CmdArgs));
+
+ if (Args.hasArg(options::OPT_gsplit_dwarf))
+ SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output,
+ SplitDebugName(Args, Inputs));
+}
+
+void MinGW::Link::AddLibGCC(const ArgList &Args, ArgStringList &CmdArgs) const {
+ if (Args.hasArg(options::OPT_mthreads))
+ CmdArgs.push_back("-lmingwthrd");
+ CmdArgs.push_back("-lmingw32");
+ if (Args.hasArg(options::OPT_shared) ||
+ Args.hasArg(options::OPT_shared_libgcc)) {
+ CmdArgs.push_back("-lgcc_s");
+ CmdArgs.push_back("-lgcc");
+ } else {
+ CmdArgs.push_back("-lgcc");
+ CmdArgs.push_back("-lgcc_eh");
+ }
+ CmdArgs.push_back("-lmoldname");
+ CmdArgs.push_back("-lmingwex");
+ CmdArgs.push_back("-lmsvcrt");
+}
+
+void MinGW::Link::ConstructJob(Compilation &C, const JobAction &JA,
+ const InputInfo &Output,
+ const InputInfoList &Inputs,
+ const ArgList &Args,
+ const char *LinkingOutput) const {
+ const ToolChain &TC = getToolChain();
+ const Driver &D = TC.getDriver();
+ //const SanitizerArgs &Sanitize = TC.getSanitizerArgs();
+
+ ArgStringList CmdArgs;
+
+ // Silence warning for "clang -g foo.o -o foo"
+ Args.ClaimAllArgs(options::OPT_g_Group);
+ // and "clang -emit-llvm foo.o -o foo"
+ Args.ClaimAllArgs(options::OPT_emit_llvm);
+ // and for "clang -w foo.o -o foo". Other warning options are already
+ // handled somewhere else.
+ Args.ClaimAllArgs(options::OPT_w);
+
+ if (!D.SysRoot.empty())
+ CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
+
+ if (Args.hasArg(options::OPT_s))
+ CmdArgs.push_back("-s");
+
+ CmdArgs.push_back("-m");
+ if (TC.getArch() == llvm::Triple::x86)
+ CmdArgs.push_back("i386pe");
+ if (TC.getArch() == llvm::Triple::x86_64)
+ CmdArgs.push_back("i386pep");
+
+ if (Args.hasArg(options::OPT_mwindows)) {
+ CmdArgs.push_back("--subsystem");
+ CmdArgs.push_back("windows");
+ } else if (Args.hasArg(options::OPT_mconsole)) {
+ CmdArgs.push_back("--subsystem");
+ CmdArgs.push_back("console");
+ }
+
+ if (Args.hasArg(options::OPT_static))
+ CmdArgs.push_back("-Bstatic");
+ else {
+ if (Args.hasArg(options::OPT_mdll))
+ CmdArgs.push_back("--dll");
+ else if (Args.hasArg(options::OPT_shared))
+ CmdArgs.push_back("--shared");
+ CmdArgs.push_back("-Bdynamic");
+ if (Args.hasArg(options::OPT_mdll) || Args.hasArg(options::OPT_shared)) {
+ CmdArgs.push_back("-e");
+ if (TC.getArch() == llvm::Triple::x86)
+ CmdArgs.push_back("_DllMainCRTStartup@12");
+ else
+ CmdArgs.push_back("DllMainCRTStartup");
+ CmdArgs.push_back("--enable-auto-image-base");
+ }
+ }
+
+ CmdArgs.push_back("-o");
+ CmdArgs.push_back(Output.getFilename());
+
+ Args.AddAllArgs(CmdArgs, options::OPT_e);
+ // FIXME: add -N, -n flags
+ Args.AddLastArg(CmdArgs, options::OPT_r);
+ Args.AddLastArg(CmdArgs, options::OPT_s);
+ Args.AddLastArg(CmdArgs, options::OPT_t);
+ Args.AddAllArgs(CmdArgs, options::OPT_u_Group);
+ Args.AddLastArg(CmdArgs, options::OPT_Z_Flag);
+
+ if (!Args.hasArg(options::OPT_nostdlib) &&
+ !Args.hasArg(options::OPT_nostartfiles)) {
+ if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_mdll)) {
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("dllcrt2.o")));
+ } else {
+ if (Args.hasArg(options::OPT_municode))
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crt2u.o")));
+ else
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crt2.o")));
+ }
+ if (Args.hasArg(options::OPT_pg))
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("gcrt2.o")));
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtbegin.o")));
+ }
+
+ Args.AddAllArgs(CmdArgs, options::OPT_L);
+ const ToolChain::path_list Paths = TC.getFilePaths();
+ for (const auto &Path : Paths)
+ CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + Path));
+
+ AddLinkerInputs(TC, Inputs, Args, CmdArgs);
+
+ // TODO: Add ASan stuff here
+
+ // TODO: Add profile stuff here
+
+ if (D.CCCIsCXX() &&
+ !Args.hasArg(options::OPT_nostdlib) &&
+ !Args.hasArg(options::OPT_nodefaultlibs)) {
+ bool OnlyLibstdcxxStatic = Args.hasArg(options::OPT_static_libstdcxx) &&
+ !Args.hasArg(options::OPT_static);
+ if (OnlyLibstdcxxStatic)
+ CmdArgs.push_back("-Bstatic");
+ TC.AddCXXStdlibLibArgs(Args, CmdArgs);
+ if (OnlyLibstdcxxStatic)
+ CmdArgs.push_back("-Bdynamic");
+ }
+
+ if (!Args.hasArg(options::OPT_nostdlib)) {
+ if (!Args.hasArg(options::OPT_nodefaultlibs)) {
+ if (Args.hasArg(options::OPT_static))
+ CmdArgs.push_back("--start-group");
+
+ if (Args.hasArg(options::OPT_fstack_protector) ||
+ Args.hasArg(options::OPT_fstack_protector_strong) ||
+ Args.hasArg(options::OPT_fstack_protector_all)) {
+ CmdArgs.push_back("-lssp_nonshared");
+ CmdArgs.push_back("-lssp");
+ }
+ if (Args.hasArg(options::OPT_fopenmp))
+ CmdArgs.push_back("-lgomp");
+
+ AddLibGCC(Args, CmdArgs);
+
+ if (Args.hasArg(options::OPT_pg))
+ CmdArgs.push_back("-lgmon");
+
+ // TODO: remove unconditionally linking pthreads library
+ // Currently required for OpenMP and posix-threading libgcc
+ CmdArgs.push_back("-lpthread");
+
+ // add system libraries
+ if (Args.hasArg(options::OPT_mwindows)) {
+ CmdArgs.push_back("-lgdi32");
+ CmdArgs.push_back("-lcomdlg32");
+ }
+ CmdArgs.push_back("-ladvapi32");
+ CmdArgs.push_back("-lshell32");
+ CmdArgs.push_back("-luser32");
+ CmdArgs.push_back("-lkernel32");
+
+ if (Args.hasArg(options::OPT_static))
+ CmdArgs.push_back("--end-group");
+ else
+ AddLibGCC(Args, CmdArgs);
+ }
+
+ if (!Args.hasArg(options::OPT_nostartfiles)) {
+ // Add crtfastmath.o if available and fast math is enabled.
+ TC.AddFastMathRuntimeIfAvailable(Args, CmdArgs);
+
+ CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtend.o")));
+ }
+ }
+ const char *Exec =
+ Args.MakeArgString(TC.GetProgramPath("ld"));
+ C.addCommand(new Command(JA, *this, Exec, CmdArgs));
+}
/// XCore Tools
// We pass assemble and link construction to the xcc tool.
diff --git a/lib/Driver/Tools.h b/lib/Driver/Tools.h
index 873969b..3265ce1 100644
--- a/lib/Driver/Tools.h
+++ b/lib/Driver/Tools.h
@@ -613,6 +613,39 @@
};
} // end namespace visualstudio
+ /// MinGW -- Directly call GNU Binutils assembler and linker
+namespace MinGW {
+ class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
+ public:
+ Assemble(const ToolChain &TC) : Tool("MinGW::Assemble", "assembler",
+ TC) {}
+
+ bool hasIntegratedCPP() const override { return false; }
+
+ void ConstructJob(Compilation &C, const JobAction &JA,
+ const InputInfo &Output,
+ const InputInfoList &Inputs,
+ const llvm::opt::ArgList &TCArgs,
+ const char *LinkingOutput) const override;
+ };
+
+ class LLVM_LIBRARY_VISIBILITY Link : public Tool {
+ public:
+ Link(const ToolChain &TC) : Tool("MinGW::Link", "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 &Inputs,
+ const llvm::opt::ArgList &TCArgs,
+ const char *LinkingOutput) const override;
+ private:
+ void AddLibGCC(const llvm::opt::ArgList &Args, ArgStringList &CmdArgs) const;
+ };
+} // end namespace MinGW
+
namespace arm {
StringRef getARMFloatABI(const Driver &D, const llvm::opt::ArgList &Args,
const llvm::Triple &Triple);
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp
index bb1fe2d..9877216 100644
--- a/lib/Frontend/InitHeaderSearch.cpp
+++ b/lib/Frontend/InitHeaderSearch.cpp
@@ -82,11 +82,6 @@
StringRef Arch,
StringRef Version);
- /// AddMinGW64CXXPaths - Add the necessary paths to support
- /// libstdc++ of x86_64-w64-mingw32 aka mingw-w64.
- void AddMinGW64CXXPaths(StringRef Base,
- StringRef Version);
-
// AddDefaultCIncludePaths - Add paths that should always be searched.
void AddDefaultCIncludePaths(const llvm::Triple &triple,
const HeaderSearchOptions &HSOpts);
@@ -208,18 +203,6 @@
CXXSystem, false);
}
-void InitHeaderSearch::AddMinGW64CXXPaths(StringRef Base,
- StringRef Version) {
- // Assumes Base is HeaderSearchOpts' ResourceDir
- AddPath(Base + "/../../../include/c++/" + Version,
- CXXSystem, false);
- AddPath(Base + "/../../../include/c++/" + Version + "/x86_64-w64-mingw32",
- CXXSystem, false);
- AddPath(Base + "/../../../include/c++/" + Version + "/i686-w64-mingw32",
- CXXSystem, false);
- AddPath(Base + "/../../../include/c++/" + Version + "/backward",
- CXXSystem, false);
-}
void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
const HeaderSearchOptions &HSOpts) {
@@ -232,6 +232,9 @@
case llvm::Triple::OpenBSD:
case llvm::Triple::Bitrig:
break;
+ case llvm::Triple::Win32:
+ if (triple.getEnvironment() == llvm::Triple::GNU)
+ break;
default:
// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, false);
@@ -269,7 +252,7 @@
switch (os) {
case llvm::Triple::Linux:
llvm_unreachable("Include management is handled in the driver.");
-
+ break;
case llvm::Triple::Haiku:
AddPath("/boot/common/include", System, false);
AddPath("/boot/develop/headers/os", System, false);
@@ -309,30 +292,11 @@
case llvm::Triple::Win32:
switch (triple.getEnvironment()) {
default: llvm_unreachable("Include management is handled in the driver.");
+ break;
case llvm::Triple::Cygnus:
AddPath("/usr/include/w32api", System, false);
break;
case llvm::Triple::GNU:
- // mingw-w64 crt include paths
- // <sysroot>/i686-w64-mingw32/include
- SmallString<128> P = StringRef(HSOpts.ResourceDir);
- llvm::sys::path::append(P, "../../../i686-w64-mingw32/include");
- AddPath(P.str(), System, false);
-
- // <sysroot>/x86_64-w64-mingw32/include
- P.resize(HSOpts.ResourceDir.size());
- llvm::sys::path::append(P, "../../../x86_64-w64-mingw32/include");
- AddPath(P.str(), System, false);
-
- // mingw.org crt include paths
- // <sysroot>/include
- P.resize(HSOpts.ResourceDir.size());
- llvm::sys::path::append(P, "../../../include");
- AddPath(P.str(), System, false);
- AddPath("/mingw/include", System, false);
-#if defined(LLVM_ON_WIN32)
- AddPath("c:/mingw/include", System, false);
-#endif
break;
}
break;
@@ -340,7 +304,7 @@
break;
}
- if ( os != llvm::Triple::RTEMS )
+ if ( os != llvm::Triple::RTEMS && !triple.isWindowsGNUEnvironment() )
AddPath("/usr/include", ExternCSystem, false);
}
@@ -404,26 +368,9 @@
AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.3.2");
break;
case llvm::Triple::GNU:
- // mingw-w64 C++ include paths (i686-w64-mingw32 and x86_64-w64-mingw32)
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.0");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.1");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.2");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.3");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.8.0");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.8.1");
- AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.8.2");
- // mingw.org C++ include paths
-#if defined(LLVM_ON_WIN32)
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.7.0");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.7.1");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.7.2");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.7.3");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.8.0");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.8.1");
- AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.8.2");
-#endif
break;
}
+ break;
case llvm::Triple::DragonFly:
if (llvm::sys::fs::exists("/usr/lib/gcc47"))
AddPath("/usr/include/c++/4.7", CXXSystem, false);

View File

@@ -1,14 +0,0 @@
Index: include/llvm/ADT/IntrusiveRefCntPtr.h
===================================================================
--- include/llvm/ADT/IntrusiveRefCntPtr.h (revision 218294)
+++ include/llvm/ADT/IntrusiveRefCntPtr.h (revision 218295)
@@ -197,6 +197,9 @@
private:
void retain() { if (Obj) IntrusiveRefCntPtrInfo<T>::retain(Obj); }
void release() { if (Obj) IntrusiveRefCntPtrInfo<T>::release(Obj); }
+
+ template <typename X>
+ friend class IntrusiveRefCntPtr;
};
template<class T, class U>

View File

@@ -1,256 +0,0 @@
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
_realname=clang
pkgbase="mingw-w64-${_realname}35"
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}35"
"${MINGW_PACKAGE_PREFIX}-clang-analyzer35"
"${MINGW_PACKAGE_PREFIX}-clang-tools-extra35"
"${MINGW_PACKAGE_PREFIX}-llvm35"
)
pkgver=3.5.2
pkgrel=1
pkgdesc="LC language family frontend for LLVM (mingw-w64)"
arch=('any')
url="https://llvm.org/"
license=("custom:University of Illinois/NCSA Open Source License")
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
"${MINGW_PACKAGE_PREFIX}-pkg-config"
"${MINGW_PACKAGE_PREFIX}-python3-sphinx"
"python2" "tar")
depends=("${MINGW_PACKAGE_PREFIX}-gcc")
options=('staticlibs' 'strip')
source=(https://releases.llvm.org/${pkgver}/llvm-${pkgver}.src.tar.xz{,.sig}
https://releases.llvm.org/${pkgver}/cfe-${pkgver}.src.tar.xz{,.sig}
https://releases.llvm.org/${pkgver}/clang-tools-extra-${pkgver}.src.tar.xz{,.sig}
0000-llvm-3.5.0-force-link-pass.o.patch
0001-clang-fabs.patch
0002-clang-win64-seh.patch
0003-clang-mingw-driver.patch
0004-gcc5-compatibility.patch)
sha256sums=('44196156d5749eb4b4224fe471a29cc3984df92570a4a89fa859f7394fc0c575'
'SKIP'
'4feb575f74fb3a74b6245400460230141bf610f235ef3a25008cfe6137828620'
'SKIP'
'f21a374d74b194d8c984546266491b518859b5f12ed9abd49337b8060d3fc004'
'SKIP'
'5702053503d49448598eda1b8dc8c263f0df9ad7486833273e3987b5dec25a19'
'614a076dc65b400910b190f4e3d26fdebd20885cfd482f7f8464469808e3beac'
'6e1168e5c9cba875ef7e87ccfd3060c3a0db6b5e2c3f1fa9fdb4d0eaea465025'
'2f49bba3acb0e45b0c3374537f2f9036891013c751930437c80472d8d8d8e2a7'
'c964eecdfb0cbf4d2a59a553d7bdb3f16e70d8910e6aa7e9c768828ecbdfcea2')
noextract=(cfe-${pkgver}.src.tar.xz)
prepare() {
plain "Extracting clang-${pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)"
[[ -d ${srcdir}/cfe-${pkgver} ]] && rm -rf ${srcdir}/cfe-${pkgver}
[[ -d ${srcdir}/cfe-${pkgver} ]] || tar -xJvf ${srcdir}/cfe-${pkgver}.src.tar.xz -C ${srcdir} || true
sleep 10
cd "${srcdir}/llvm-${pkgver}.src"
# At the present, clang must reside inside the LLVM source code tree to build
# See https://bugs.llvm.org/show_bug.cgi?id=4840
[[ -d tools/clang ]] && rm -rf tools/clang
mv "${srcdir}/cfe-${pkgver}.src" tools/clang
[[ -d tools/clang/tools/extra ]] && rm -rf tools/clang/tools/extra
mv "${srcdir}/clang-tools-extra-${pkgver}.src" tools/clang/tools/extra
# Fix docs installation directory
sed -i 's:$(PROJ_prefix)/docs/llvm:$(PROJ_prefix)/share/doc/llvm:' \
Makefile.config.in
# Fix definition of LLVM_CMAKE_DIR in LLVMConfig.cmake
sed -i '/@LLVM_CONFIG_CMAKE_DIR@/s:$(PROJ_cmake):$(PROJ_prefix)/share/llvm/cmake:' \
cmake/modules/Makefile
# Fix build with GCC 4.9 (patch from Debian)
# https://bugs.llvm.org/show_bug.cgi?id=20067
patch -p1 -i "${srcdir}/0000-llvm-3.5.0-force-link-pass.o.patch"
patch -p0 -i "${srcdir}/0004-gcc5-compatibility.patch"
cd tools/clang
patch -p1 -i ${srcdir}/0001-clang-fabs.patch
patch -p1 -i ${srcdir}/0002-clang-win64-seh.patch
patch -p1 -i ${srcdir}/0003-clang-mingw-driver.patch
}
build() {
cd "${srcdir}"
mkdir -p build-${MINGW_CHOST}
cd build-${MINGW_CHOST}
echo 'ac_cv_have_decl_strerror_s=${ac_cv_have_decl_strerror_s=no}' > config.cache
# Include location of libffi headers in CPPFLAGS
CPPFLAGS+=" $(pkg-config --cflags libffi)"
../llvm-${pkgver}.src/configure \
-C \
--prefix=${MINGW_PREFIX} \
--build=${MINGW_CHOST} \
--host=${MINGW_CHOST} \
--with-sysroot=${MINGW_PREFIX} \
--enable-targets=x86,x86_64,arm,mips \
--enable-optimized \
--disable-assertions \
--disable-pthreads \
--with-python=/usr/bin/python2 \
--enable-libffi \
--enable-docs
make
make -C ../llvm-${pkgver}.src/docs -f Makefile.sphinx man
make -C ../llvm-${pkgver}.src/docs -f Makefile.sphinx html
make -C ../llvm-${pkgver}.src/tools/clang/docs -f Makefile.sphinx html
setup
}
check() {
plain "skipping make check..."
#cd "$srcdir/build-${MINGW_CHOST}"
#make check
}
setup() {
local destdir=${srcdir}/dest
[[ -d ${destdir} ]] && rm -rf ${destdir}
mkdir -p ${destdir}
# CLANG-TOOLS-EXTRA
cd "$srcdir/build-${MINGW_CHOST}/tools/clang/tools/extra"
make DESTDIR="$destdir/clang-tools-extra" install
# Fix permissions of static libs
chmod -x ${destdir}/clang-tools-extra${MINGW_PREFIX}/lib/*.a
install -Dm644 ${srcdir}/llvm-${pkgver}.src/tools/clang/tools/extra/LICENSE.TXT "$destdir/clang-tools-extra${MINGW_PREFIX}/share/licenses/clang-tools-extra/LICENSE"
cd ${srcdir}
mv ${srcdir}/build-${MINGW_CHOST}/tools/clang/tools/extra ${srcdir}/clang-tools-extra-${MINGW_CHOST}
mv ${srcdir}/llvm-${pkgver}.src/tools/clang/tools/extra ${srcdir}/clang-tools-extra-${pkgver}
# CLANG
cd "$srcdir/build-${MINGW_CHOST}/tools/clang"
make -j1 DESTDIR="$destdir/clang" install
# Fix mis-named clang doc folder (is llvm, should be clang)
mv ${destdir}/clang${MINGW_PREFIX}/share/doc/llvm ${destdir}/clang${MINGW_PREFIX}/share/doc/clang
# Install html docs
install -d "${destdir}"/clang${MINGW_PREFIX}/share/doc/clang/html
cp -rf ${srcdir}/llvm-${pkgver}.src/tools/clang/docs/_build/html/* "${destdir}"/clang${MINGW_PREFIX}/share/doc/clang/html/
rm -r "${destdir}"/clang${MINGW_PREFIX}/share/doc/clang/html/_sources
# CLANG-ANAYLYSER
install -d ${destdir}/clang-analyzer${MINGW_PREFIX}/{bin,lib/clang-analyzer}
for _tool in scan-{build,view}; do
cp -r ${srcdir}/llvm-${pkgver}.src/tools/clang/tools/${_tool} ${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer/
ln -s ${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer/${_tool}/${_tool} ${destdir}/clang-analyzer${MINGW_PREFIX}/bin/
done
# scan-build looks for clang within the same directory
install -d ${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer/scan-build/
ln -s ${destdir}/clang${MINGW_PREFIX}/bin/clang.exe ${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer/scan-build/
# Relocate man page
install -d ${destdir}/clang-analyzer${MINGW_PREFIX}/share/man/man1
mv ${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer/scan-build/scan-build.1 \
${destdir}/clang-analyzer${MINGW_PREFIX}/share/man/man1/
# Compile Python scripts
python2 -m compileall "${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer"
python2 -O -m compileall "${destdir}/clang-analyzer${MINGW_PREFIX}/lib/clang-analyzer"
install -Dm644 ${srcdir}/llvm-${pkgver}.src/tools/clang/LICENSE.TXT "${destdir}/clang-analyzer${MINGW_PREFIX}/share/licenses/clang-analyzer/LICENSE"
# LLVM
cd ${srcdir}
# Move clang out of the way *before* installing llvm, both src and build. We'll put build back afterwards to allow re-packaging.
# but the src move is undoing what prepare() did.
mv "${srcdir}/build-${MINGW_CHOST}/tools/clang" "${srcdir}/clang-${MINGW_CHOST}"
mv "${srcdir}/llvm-${pkgver}.src/tools/clang" "${srcdir}/clang-${pkgver}" # Put src back where it was (clang)
cd "${srcdir}/build-${MINGW_CHOST}"
make -j1 DESTDIR="${destdir}/llvm" install
# Install man pages
install -d "${destdir}"/llvm${MINGW_PREFIX}/share/man/man1
cp ${srcdir}/llvm-${pkgver}.src/docs/_build/man/*.1 "${destdir}"/llvm${MINGW_PREFIX}/share/man/man1/
# Install html docs
install -d "${destdir}"/llvm${MINGW_PREFIX}/share/doc/llvm/html
cp -rf ${srcdir}/llvm-${pkgver}.src/docs/_build/html/* "${destdir}"/llvm${MINGW_PREFIX}/share/doc/llvm/html/
rm -r "${destdir}"/llvm${MINGW_PREFIX}/share/doc/llvm/html/_sources
# Install CMake stuff
install -d "${destdir}"/llvm${MINGW_PREFIX}/share/llvm/cmake/{modules,platforms}
install -Dm644 ${srcdir}/llvm-${pkgver}.src/cmake/modules/*.cmake "${destdir}"/llvm${MINGW_PREFIX}/share/llvm/cmake/modules/
install -Dm644 ${srcdir}/llvm-${pkgver}.src/cmake/platforms/*.cmake "${destdir}"/llvm${MINGW_PREFIX}/share/llvm/cmake/platforms/
# Move all back
mv "${srcdir}/clang-${MINGW_CHOST}" "${srcdir}/build-${MINGW_CHOST}/tools/clang"
mv "${srcdir}/clang-${pkgver}" "${srcdir}/llvm-${pkgver}.src/tools/clang"
mv "${srcdir}/clang-tools-extra-${MINGW_CHOST}" "${srcdir}/build-${MINGW_CHOST}/tools/clang/tools/extra"
mv "${srcdir}/clang-tools-extra-${pkgver}" "${srcdir}/llvm-${pkgver}.src/tools/clang/tools/extra"
}
package_clang35(){
pkgdesc="C language family frontend for LLVM"
depends=("${MINGW_PACKAGE_PREFIX}-llvm35=${pkgver}-${pkgrel}")
conflicts=(${MINGW_PACKAGE_PREFIX}-clang)
mv ${srcdir}/dest/clang/* ${pkgdir}
}
package_llvm35(){
pkgdesc="Low Level Virtual Machine"
depends=("${MINGW_PACKAGE_PREFIX}-gcc")
conflicts=(${MINGW_PACKAGE_PREFIX}-llvm)
install=llvm-${CARCH}.install
mv ${srcdir}/dest/llvm/* ${pkgdir}
}
package_clang-analyzer35() {
pkgdesc="A source code analysis framework"
url="https://clang-analyzer.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-clang35=${pkgver}-${pkgrel}" "${MINGW_PACKAGE_PREFIX}-python2")
conflicts=(${MINGW_PACKAGE_PREFIX}-clang-analyzer)
mv ${srcdir}/dest/clang-analyzer/* ${pkgdir}
}
package_clang-tools-extra35() {
pkgdesc="Extra tools built using Clang's tooling APIs"
url="https://clang.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-clang35=${pkgver}-${pkgrel}")
conflicts=(${MINGW_PACKAGE_PREFIX}-clang)
mv ${srcdir}/dest/clang-tools-extra/* ${pkgdir}
}
package_mingw-w64-i686-clang35(){
package_clang35
}
package_mingw-w64-i686-clang-analyzer35(){
package_clang-analyzer35
}
package_mingw-w64-i686-clang-tools-extra35(){
package_clang-tools-extra35
}
package_mingw-w64-i686-llvm35(){
package_llvm35
}
package_mingw-w64-x86_64-clang35(){
package_clang35
}
package_mingw-w64-x86_64-clang-analyzer35(){
package_clang-analyzer35
}
package_mingw-w64-x86_64-clang-tools-extra35(){
package_clang-tools-extra35
}
package_mingw-w64-x86_64-llvm35(){
package_llvm35
}

View File

@@ -1,10 +0,0 @@
post_install() {
cd mingw32
local _prefix=$(pwd -W)
cd -
sed -e "s|/mingw32|${_prefix}|g" -i mingw32/share/llvm/cmake/LLVMConfig.cmake
}
post_upgrade() {
post_install
}

View File

@@ -1,10 +0,0 @@
post_install() {
cd mingw64
local _prefix=$(pwd -W)
cd -
sed -e "s|/mingw64|${_prefix}|g" -i mingw64/share/llvm/cmake/LLVMConfig.cmake
}
post_upgrade() {
post_install
}

View File

@@ -1,44 +0,0 @@
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
_realname=libc++
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=3.5.0
pkgrel=1
pkgdesc='A new implementation of the C++ standard library, targeting C++11.'
url='https://libcxx.llvm.org/'
license=('custom:University of Illinois/NCSA Open Source License')
arch=('any')
# gcc-libs needed for libgcc_s, because mingw-w64 doesn't use a pure compiler-rt clang
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
#"${MINGW_PACKAGE_PREFIX}-libc++abi"
)
makedepends=("${MINGW_PACKAGE_PREFIX}-clang"
"${MINGW_PACKAGE_PREFIX}-cmake")
source=(https://releases.llvm.org/$pkgver/libcxx-${pkgver}.src.tar.xz{,.sig})
sha256sums=('8045da845a63e50c201939eda8290d45e5752a9385d4d626214300d4a4d0b1c0'
'SKIP')
#install=${pkgname}.install
prepare() {
cd ${srcdir}/libcxx-${pkgver}.src
}
build() {
[[ -d ${srcdir}/build-${MINGW_CHOST} ]] && rm -rf ${srcdir}/build-${MINGW_CHOST}
mkdir -p ${srcdir}/build-${MINGW_CHOST} && cd ${srcdir}/build-${MINGW_CHOST}
export CXX="${MINGW_PREFIX}/bin/clang++"
export CC="${MINGW_PREFIX}/bin/clang"
${MINGW_PREFIX}/bin/cmake.exe \
-G"MSYS Makefiles" \
-DCMAKE_INSTALL_PREFIX:PATH=${pkgdir}${MINGW_PREFIX} \
-DCMAKE_BUILD_TYPE=Release \
../libcxx-${pkgver}.src
make
}
package() {
cd "${srcdir}/build-${MINGW_CHOST}"
make -j1 DESTDIR="$pkgdir" install
}

View File

@@ -1,45 +0,0 @@
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
_realname=libc++abi
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=3.5.0
pkgrel=1
pkgdesc='A new implementation of low level support for a standard C++ library'
url='https://libcxxabi.llvm.org'
license=('custom:University of Illinois/NCSA Open Source License')
arch=('any')
# gcc-libs needed for libgcc_s, because mingw-w64 doesn't use a pure compiler-rt clang
depends=()
makedepends=("${MINGW_PACKAGE_PREFIX}-clang"
"${MINGW_PACKAGE_PREFIX}-cmake")
source=(https://releases.llvm.org/$pkgver/libcxxabi-${pkgver}.src.tar.xz{,.sig}
https://releases.llvm.org/$pkgver/libcxx-${pkgver}.src.tar.xz{,.sig})
sha256sums=('53c6be6a2dd2371f6d92c968cb8a59fbe13c6153583025433df067f706bfacd9'
'SKIP'
'8045da845a63e50c201939eda8290d45e5752a9385d4d626214300d4a4d0b1c0'
'SKIP')
prepare() {
cd ${srcdir}/libcxxabi-${pkgver}.src
}
build() {
[[ -d ${srcdir}/build-${MINGW_CHOST} ]] && rm -rf ${srcdir}/build-${MINGW_CHOST}
mkdir -p ${srcdir}/build-${MINGW_CHOST} && cd ${srcdir}/build-${MINGW_CHOST}
export CXX="${MINGW_PREFIX}/bin/clang++"
export CC="${MINGW_PREFIX}/bin/clang"
${MINGW_PREFIX}/bin/cmake.exe \
-G"MSYS Makefiles" \
-DCMAKE_INSTALL_PREFIX:PATH=${pkgdir}${MINGW_PREFIX} \
-DCMAKE_BUILD_TYPE=Release \
-DLIBCXXABI_LIBCXX_INCLUDES=${srcdir}/libcxx-${pkgver}.src/include \
../libcxxabi-${pkgver}.src
make
}
package() {
cd "${srcdir}/build-${MINGW_CHOST}"
make -j1 DESTDIR="$pkgdir" install
}