Merge branch 'master' of https://github.com/Alexpux/MINGW-packages
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
@@ -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");
|
||||
@@ -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);
|
||||
@@ -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>
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user