mirror of
https://abf.rosa.ru/djam/llvm.git
synced 2025-02-23 16:22:50 +00:00
Updated to version 3.9.0
Most of the work was done in https://abf.io/import/llvm/pull_requests/2 I have reworked clang-mandriva.patch to keeps it (as clang-rosa.patch). It seems, it did not actually detect ROSA in the past (it checked that /etc/lsb-release has DISTRIB_ID=Mandriva<...> while we have "Rosa<...>" there). However, it could be useful to align the default Clang flags with Ubuntu, Fedora and such.
This commit is contained in:
parent
047b84f741
commit
9b14190aa4
9 changed files with 127 additions and 1852 deletions
10
.abf.yml
10
.abf.yml
|
@ -1,6 +1,6 @@
|
|||
sources:
|
||||
cfe-3.8.0.src.tar.xz: 2230ef962f2df3c13ec93f5b04b0e3cdff94b2ce
|
||||
clang-tools-extra-3.8.0.src.tar.xz: a99d8b6fc5e593c4671424b327779318a1856acf
|
||||
compiler-rt-3.8.0.src.tar.xz: 480ea09e369dac6de1f3759b27fa19417b26b69e
|
||||
llvm-3.8.0.src.tar.xz: 723ac918979255706434a05f5af34b71c49c9971
|
||||
polly-3.8.0.src.tar.xz: 8db242fbc4a33eacf08e11fad033b2a90c652ac9
|
||||
cfe-3.9.0.src.tar.xz: 00d49ee82451130a8e1e7b1d56cffa37b783bcb2
|
||||
clang-tools-extra-3.9.0.src.tar.xz: 396ad1af7a8d3cff015a644e595f35553a7548c4
|
||||
compiler-rt-3.9.0.src.tar.xz: a306d576e84b7ee048ebb0ae5ca72e6ec9e1c549
|
||||
llvm-3.9.0.src.tar.xz: da792f11a208d5b994c4fe1c8faa20f90ff0e4a3
|
||||
polly-3.9.0.src.tar.xz: 9d5809bd413b05de18480b69fcf6dbe8d3b1f9ac
|
||||
|
|
|
@ -1,216 +0,0 @@
|
|||
--- clang/lib/Driver/ToolChains.cpp.mandriva~ 2016-01-13 00:47:59.000000000 +0100
|
||||
+++ clang/lib/Driver/ToolChains.cpp 2016-01-26 11:16:44.273579956 +0100
|
||||
@@ -1418,16 +1418,46 @@ bool Generic_GCC::GCCInstallationDetecto
|
||||
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const AArch64Triples[] = {
|
||||
"aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-linux-android",
|
||||
- "aarch64-redhat-linux"};
|
||||
- static const char *const AArch64beLibDirs[] = {"/lib"};
|
||||
- static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu",
|
||||
- "aarch64_be-linux-gnu"};
|
||||
+ "aarch64-redhat-linux", "aarch64-mandriva-linux-gnu",
|
||||
+ "aarch64-openmandriva-linux-gnu", "aarch64-openmandriva-linux-musl"};
|
||||
+ static const char *const AArch64beLibDirs[] = {"/lib64", "/lib"};
|
||||
+ static const char *const AArch64beTriples[] = {
|
||||
+ "aarch64_be-none-linux-gnu", "aarch64_be-linux-gnu",
|
||||
+ "aarch64_be-linux-android", "aarch64_be-mandriva-linux-gnu",
|
||||
+ "aarch64_be-openmandriva-linux-gnu", "aarch64_be-openmandriva-linux-musl"
|
||||
+ };
|
||||
|
||||
static const char *const ARMLibDirs[] = {"/lib"};
|
||||
static const char *const ARMTriples[] = {"arm-linux-gnueabi",
|
||||
- "arm-linux-androideabi"};
|
||||
- static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
|
||||
- "armv7hl-redhat-linux-gnueabi"};
|
||||
+ "arm-linux-androideabi",
|
||||
+ "arm-mandriva-linux-gnueabi",
|
||||
+ "arm-openmandriva-linux-gnueabi",
|
||||
+ "arm-openmandriva-linux-musl",
|
||||
+ "arm-openmandriva-linux-musleabi",
|
||||
+ "armv6-mandriva-linux-gnueabi",
|
||||
+ "armv6-openmandriva-linux-gnueabi",
|
||||
+ "armv7-mandriva-linux-gnueabi",
|
||||
+ "armv7-openmandriva-linux-gnueabi",
|
||||
+ "armv7-openmandriva-linux-musleabi"};
|
||||
+ static const char *const ARMHFTriples[] = {
|
||||
+ "arm-linux-gnueabihf",
|
||||
+ "armv7hl-redhat-linux-gnueabi",
|
||||
+ "arm-mandriva-linux-gnueabihf",
|
||||
+ "arm-openmandriva-linux-gnueabihf",
|
||||
+ "arm-openmandriva-linux-musleabihf",
|
||||
+ "armv7hl-openmandriva-linux-gnueabi",
|
||||
+ "armv7hl-openmandriva-linux-gnueabihf",
|
||||
+ "armv7hnl-openmandriva-linux-gnueabi",
|
||||
+ "armv7hnl-openmandriva-linux-musleabi",
|
||||
+ "armv7nl-openmandriva-linux-gnueabihf",
|
||||
+ "armv7nl-openmandriva-linux-musleabihf",
|
||||
+ "armv6hl-openmandriva-linux-gnueabi",
|
||||
+ "armv6hl-openmandriva-linux-gnueabihf",
|
||||
+ "armv6hnl-openmandriva-linux-gnueabi",
|
||||
+ "armv6hnl-openmandriva-linux-musleabi",
|
||||
+ "armv6nl-openmandriva-linux-gnueabihf",
|
||||
+ "armv6nl-openmandriva-linux-musleabihf"
|
||||
+ };
|
||||
static const char *const ARMebLibDirs[] = {"/lib"};
|
||||
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
|
||||
"armeb-linux-androideabi"};
|
||||
@@ -1441,7 +1471,9 @@ bool Generic_GCC::GCCInstallationDetecto
|
||||
"x86_64-redhat-linux", "x86_64-suse-linux",
|
||||
"x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
|
||||
"x86_64-slackware-linux", "x86_64-linux-android",
|
||||
- "x86_64-unknown-linux"};
|
||||
+ "x86_64-unknown-linux", "x86_64-mandriva-linux-gnu",
|
||||
+ "x86_64-openmandriva-linux-gnu",
|
||||
+ "x86_64-openmandriva-linux-musl"};
|
||||
static const char *const X32LibDirs[] = {"/libx32"};
|
||||
static const char *const X86LibDirs[] = {"/lib32", "/lib"};
|
||||
static const char *const X86Triples[] = {
|
||||
@@ -1449,7 +1481,15 @@ bool Generic_GCC::GCCInstallationDetecto
|
||||
"i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux",
|
||||
"i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux",
|
||||
"i486-slackware-linux", "i686-montavista-linux", "i686-linux-android",
|
||||
- "i586-linux-gnu"};
|
||||
+ "i586-linux-gnu", "i586-mandriva-linux", "i586-mandriva-linux-gnu",
|
||||
+ "i686-mandriva-linux", "i686-mandriva-linux-gnu",
|
||||
+ "i586-openmandriva-linux",
|
||||
+ "i586-openmandriva-linux-gnu",
|
||||
+ "i586-openmandriva-linux-musl",
|
||||
+ "i686-openmandriva-linux",
|
||||
+ "i686-openmandriva-linux-gnu",
|
||||
+ "i686-openmandriva-linux-musl"
|
||||
+ };
|
||||
|
||||
static const char *const MIPSLibDirs[] = {"/lib"};
|
||||
static const char *const MIPSTriples[] = {"mips-linux-gnu", "mips-mti-linux",
|
||||
@@ -1471,11 +1511,12 @@ bool Generic_GCC::GCCInstallationDetecto
|
||||
static const char *const PPCLibDirs[] = {"/lib32", "/lib"};
|
||||
static const char *const PPCTriples[] = {
|
||||
"powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe",
|
||||
- "powerpc-suse-linux", "powerpc-montavista-linuxspe"};
|
||||
+ "powerpc-suse-linux", "powerpc-montavista-linuxspe",
|
||||
+ "powerpc-mandriva-linux-gnu"};
|
||||
static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const PPC64Triples[] = {
|
||||
"powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu",
|
||||
- "powerpc64-suse-linux", "ppc64-redhat-linux"};
|
||||
+ "powerpc64-suse-linux", "ppc64-redhat-linux", "powerpc64-mandriva-linux"};
|
||||
static const char *const PPC64LELibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const PPC64LETriples[] = {
|
||||
"powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu",
|
||||
@@ -3386,6 +3427,9 @@ enum Distro {
|
||||
UbuntuVivid,
|
||||
UbuntuWily,
|
||||
UbuntuXenial,
|
||||
+ Mandriva,
|
||||
+ OpenMandriva,
|
||||
+ ROSA,
|
||||
UnknownDistro
|
||||
};
|
||||
|
||||
@@ -3403,6 +3447,10 @@ static bool IsUbuntu(enum Distro Distro)
|
||||
return Distro >= UbuntuHardy && Distro <= UbuntuXenial;
|
||||
}
|
||||
|
||||
+static bool IsMandriva(enum Distro Distro) {
|
||||
+ return Distro >= Mandriva && Distro < UnknownDistro;
|
||||
+}
|
||||
+
|
||||
static Distro DetectDistro(const Driver &D, llvm::Triple::ArchType Arch) {
|
||||
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
|
||||
llvm::MemoryBuffer::getFile("/etc/lsb-release");
|
||||
@@ -3411,7 +3459,17 @@ static Distro DetectDistro(const Driver
|
||||
SmallVector<StringRef, 16> Lines;
|
||||
Data.split(Lines, "\n");
|
||||
Distro Version = UnknownDistro;
|
||||
- for (StringRef Line : Lines)
|
||||
+ for (StringRef Line : Lines) {
|
||||
+ if (Version == UnknownDistro && Line.startswith("DISTRIB_ID=MandrivaLinux"))
|
||||
+ // It's either Mandriva or a close derivate, will get details
|
||||
+ // from DISTRIB_DESCRIPTION
|
||||
+ Version = Mandriva;
|
||||
+ if (Version == Mandriva && Line.startswith("DISTRIB_DESCRIPTION=")) {
|
||||
+ if(Line.substr(20).find("ROSA") != StringRef::npos)
|
||||
+ Version = ROSA;
|
||||
+ else if(Line.substr(20).find("Open") != StringRef::npos)
|
||||
+ Version = OpenMandriva;
|
||||
+ }
|
||||
if (Version == UnknownDistro && Line.startswith("DISTRIB_CODENAME="))
|
||||
Version = llvm::StringSwitch<Distro>(Line.substr(17))
|
||||
.Case("hardy", UbuntuHardy)
|
||||
@@ -3432,6 +3490,7 @@ static Distro DetectDistro(const Driver
|
||||
.Case("wily", UbuntuWily)
|
||||
.Case("xenial", UbuntuXenial)
|
||||
.Default(UnknownDistro);
|
||||
+ }
|
||||
return Version;
|
||||
}
|
||||
|
||||
@@ -3592,7 +3651,7 @@ static std::string getMultiarchTriple(co
|
||||
return TargetTriple.str();
|
||||
}
|
||||
|
||||
-static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
||||
+static StringRef getOSLibDir(const enum Distro &Distro, const llvm::Triple &Triple, const ArgList &Args) {
|
||||
if (isMipsArch(Triple.getArch())) {
|
||||
// lib32 directory has a special meaning on MIPS targets.
|
||||
// It contains N32 ABI binaries. Use this folder if produce
|
||||
@@ -3608,11 +3667,15 @@ static StringRef getOSLibDir(const llvm:
|
||||
// with a 'lib32' library search path being considered. So we only enable
|
||||
// them when we know we may need it.
|
||||
//
|
||||
+ // Also, lib32 is highly distro-specific -- OpenMandriva for one doesn't
|
||||
+ // use lib32 (64 bit libs go to lib64, 32 bit libs go to lib)
|
||||
+ //
|
||||
// FIXME: This is a bit of a hack. We should really unify this code for
|
||||
// reasoning about oslibdir spellings with the lib dir spellings in the
|
||||
// GCCInstallationDetector, but that is a more significant refactoring.
|
||||
- if (Triple.getArch() == llvm::Triple::x86 ||
|
||||
- Triple.getArch() == llvm::Triple::ppc)
|
||||
+ if (!IsMandriva(Distro) &&
|
||||
+ (Triple.getArch() == llvm::Triple::x86 ||
|
||||
+ Triple.getArch() == llvm::Triple::ppc))
|
||||
return "lib32";
|
||||
|
||||
if (Triple.getArch() == llvm::Triple::x86_64 &&
|
||||
@@ -3645,7 +3708,7 @@ Linux::Linux(const Driver &D, const llvm
|
||||
|
||||
Distro Distro = DetectDistro(D, Arch);
|
||||
|
||||
- if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
|
||||
+ if (IsOpenSUSE(Distro) || IsUbuntu(Distro) || IsMandriva(Distro)) {
|
||||
ExtraOpts.push_back("-z");
|
||||
ExtraOpts.push_back("relro");
|
||||
}
|
||||
@@ -3665,7 +3728,7 @@ Linux::Linux(const Driver &D, const llvm
|
||||
// ABI requires a mapping between the GOT and the symbol table.
|
||||
// Android loader does not support .gnu.hash.
|
||||
if (!IsMips && !IsAndroid) {
|
||||
- if (IsRedhat(Distro) || IsOpenSUSE(Distro) ||
|
||||
+ if (IsRedhat(Distro) || IsOpenSUSE(Distro) || IsMandriva(Distro) ||
|
||||
(IsUbuntu(Distro) && Distro >= UbuntuMaverick))
|
||||
ExtraOpts.push_back("--hash-style=gnu");
|
||||
|
||||
@@ -3677,12 +3740,12 @@ Linux::Linux(const Driver &D, const llvm
|
||||
if (IsRedhat(Distro))
|
||||
ExtraOpts.push_back("--no-add-needed");
|
||||
|
||||
- if ((IsDebian(Distro) && Distro >= DebianSqueeze) || IsOpenSUSE(Distro) ||
|
||||
+ if ((IsDebian(Distro) && Distro >= DebianSqueeze) || IsOpenSUSE(Distro) || IsMandriva(Distro) ||
|
||||
(IsRedhat(Distro) && Distro != RHEL4 && Distro != RHEL5) ||
|
||||
(IsUbuntu(Distro) && Distro >= UbuntuKarmic))
|
||||
ExtraOpts.push_back("--build-id");
|
||||
|
||||
- if (IsOpenSUSE(Distro))
|
||||
+ if (IsOpenSUSE(Distro) || IsMandriva(Distro))
|
||||
ExtraOpts.push_back("--enable-new-dtags");
|
||||
|
||||
// The selection of paths to try here is designed to match the patterns which
|
||||
@@ -3692,7 +3755,7 @@ Linux::Linux(const Driver &D, const llvm
|
||||
// to the link paths.
|
||||
path_list &Paths = getFilePaths();
|
||||
|
||||
- const std::string OSLibDir = getOSLibDir(Triple, Args);
|
||||
+ const std::string OSLibDir = getOSLibDir(Distro, Triple, Args);
|
||||
const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
|
||||
|
||||
// Add the multilib suffixed paths where they are available.
|
|
@ -1,314 +0,0 @@
|
|||
diff -Naur cfe-3.8.0.src.orig/docs/ItaniumMangleAbiTags.rst cfe-3.8.0.src/docs/ItaniumMangleAbiTags.rst
|
||||
--- cfe-3.8.0.src.orig/docs/ItaniumMangleAbiTags.rst 1970-01-01 03:00:00.000000000 +0300
|
||||
+++ cfe-3.8.0.src/docs/ItaniumMangleAbiTags.rst 2016-05-15 00:37:17.721321969 +0300
|
||||
@@ -0,0 +1,101 @@
|
||||
+========
|
||||
+ABI tags
|
||||
+========
|
||||
+
|
||||
+Introduction
|
||||
+============
|
||||
+
|
||||
+This text tries to describe gcc semantic for mangling "abi_tag" attributes
|
||||
+described in https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html
|
||||
+
|
||||
+There is no guarantee the following rules are correct, complete or make sense
|
||||
+in any way as they were determined empirically by experiments with gcc5.
|
||||
+
|
||||
+Declaration
|
||||
+===========
|
||||
+
|
||||
+ABI tags are declared in an abi_tag attribute and can be applied to a
|
||||
+function, variable, class or inline namespace declaration. The attribute takes
|
||||
+one or more strings (called tags); the order does not matter.
|
||||
+
|
||||
+See https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html for
|
||||
+details.
|
||||
+
|
||||
+Tags on an inline namespace are called "implicit tags", all other tags are
|
||||
+"explicit tags".
|
||||
+
|
||||
+Mangling
|
||||
+========
|
||||
+
|
||||
+All tags that are "active" on an <unqualified-name> are emitted after the
|
||||
+<unqualified-name>, before <template-args> or <discriminator>, and are part of
|
||||
+the same <substitution> the <unqualified-name> is.
|
||||
+
|
||||
+They are mangled as:
|
||||
+
|
||||
+ <abi-tags> ::= <abi-tag>* # sort by name
|
||||
+ <abi-tag> ::= B <tag source-name>
|
||||
+
|
||||
+Example:
|
||||
+
|
||||
+ __attribute__((abi_tag("test")))
|
||||
+ void Func();
|
||||
+
|
||||
+ gets mangled as: _Z4FuncB4testv (prettified as `Func[abi:test]()`)
|
||||
+
|
||||
+Active tags
|
||||
+===========
|
||||
+
|
||||
+A namespace does not have any active tags. For types (class / struct / union /
|
||||
+enum), the explicit tags are the active tags.
|
||||
+
|
||||
+For variables and functions, the active tags are the explicit tags plus any
|
||||
+"required tags" which are not in the "available tags" set:
|
||||
+
|
||||
+ derived-tags := (required-tags - available-tags)
|
||||
+ active-tags := explicit-tags + derived-tags
|
||||
+
|
||||
+Required tags for a function
|
||||
+============================
|
||||
+
|
||||
+If a function is used as a local scope for another name, and is part of
|
||||
+another function as local scope, it doesn't have any required tags.
|
||||
+
|
||||
+If a function is used as a local scope for a guard variable name, it doesn't
|
||||
+have any required tags.
|
||||
+
|
||||
+Otherwise the function requires any implicit or explicit tag used in the name
|
||||
+for the return type.
|
||||
+
|
||||
+Example:
|
||||
+ namespace A {
|
||||
+ inline namespace B __attribute__((abi_tag)) {
|
||||
+ struct C { int x; };
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ A::C foo();
|
||||
+
|
||||
+ gets mangled as: _Z3fooB1Bv (prettified as `foo[abi:B]()`)
|
||||
+
|
||||
+Required tags for a variable
|
||||
+============================
|
||||
+
|
||||
+A variable requires any implicit or explicit tag used in its type.
|
||||
+
|
||||
+Available tags
|
||||
+==============
|
||||
+
|
||||
+All tags used in the prefix and in the template arguments for a name are
|
||||
+available. Also, for functions, all tags from the <bare-function-type>
|
||||
+(which might include the return type for template functions) are available.
|
||||
+
|
||||
+For <local-name>s all active tags used in the local part (<function-
|
||||
+encoding>) are available, but not implicit tags which were not active.
|
||||
+
|
||||
+Implicit and explicit tags used in the <unqualified-name> for a function (as
|
||||
+in the type of a cast operator) are NOT available.
|
||||
+
|
||||
+Example: a cast operator to std::string (which is
|
||||
+std::__cxx11::basic_string<...>) will use 'cxx11' as an active tag, as it is
|
||||
+required from the return type `std::string` but not available.
|
||||
diff -Naur cfe-3.8.0.src.orig/include/clang/Basic/AttrDocs.td cfe-3.8.0.src/include/clang/Basic/AttrDocs.td
|
||||
--- cfe-3.8.0.src.orig/include/clang/Basic/AttrDocs.td 2015-12-03 00:58:08.000000000 +0300
|
||||
+++ cfe-3.8.0.src/include/clang/Basic/AttrDocs.td 2016-05-15 00:37:17.722321974 +0300
|
||||
@@ -1859,3 +1859,16 @@
|
||||
|
||||
}];
|
||||
}
|
||||
+
|
||||
+def AbiTagsDocs : Documentation {
|
||||
+ let Content = [{
|
||||
+The ``abi_tag`` attribute can be applied to a function, variable, class or
|
||||
+inline namespace declaration to modify the mangled name of the entity. It gives
|
||||
+the ability to distinguish between different versions of the same entity but
|
||||
+with different ABI versions supported. For example, a newer version of a class
|
||||
+could have a different set of data members and thus have a different size. Using
|
||||
+the ``abi_tag`` attribute, it is possible to have different mangled names for
|
||||
+a global variable of the class type. Therefor, the old code could keep using
|
||||
+the old manged name and the new code will use the new mangled name with tags.
|
||||
+ }];
|
||||
+}
|
||||
diff -Naur cfe-3.8.0.src.orig/include/clang/Basic/Attr.td cfe-3.8.0.src/include/clang/Basic/Attr.td
|
||||
--- cfe-3.8.0.src.orig/include/clang/Basic/Attr.td 2015-12-03 00:58:08.000000000 +0300
|
||||
+++ cfe-3.8.0.src/include/clang/Basic/Attr.td 2016-05-15 00:37:17.721321969 +0300
|
||||
@@ -349,6 +349,14 @@
|
||||
// Attributes begin here
|
||||
//
|
||||
|
||||
+def AbiTag : Attr {
|
||||
+ let Spellings = [GCC<"abi_tag">];
|
||||
+ let Args = [VariadicStringArgument<"Tags">];
|
||||
+ let Subjects = SubjectList<[Struct, Var, Function, Namespace], ErrorDiag,
|
||||
+ "ExpectedStructClassVariableFunctionOrInlineNamespace">;
|
||||
+ let Documentation = [AbiTagsDocs];
|
||||
+}
|
||||
+
|
||||
def AddressSpace : TypeAttr {
|
||||
let Spellings = [GNU<"address_space">];
|
||||
let Args = [IntArgument<"AddressSpace">];
|
||||
diff -Naur cfe-3.8.0.src.orig/include/clang/Basic/DiagnosticSemaKinds.td cfe-3.8.0.src/include/clang/Basic/DiagnosticSemaKinds.td
|
||||
--- cfe-3.8.0.src.orig/include/clang/Basic/DiagnosticSemaKinds.td 2016-01-09 15:53:17.000000000 +0300
|
||||
+++ cfe-3.8.0.src/include/clang/Basic/DiagnosticSemaKinds.td 2016-05-15 00:37:17.725321992 +0300
|
||||
@@ -2434,7 +2434,8 @@
|
||||
"Objective-C instance methods|init methods of interface or class extension declarations|"
|
||||
"variables, functions and classes|Objective-C protocols|"
|
||||
"functions and global variables|structs, unions, and typedefs|structs and typedefs|"
|
||||
- "interface or protocol declarations|kernel functions|non-K&R-style functions}1">,
|
||||
+ "interface or protocol declarations|kernel functions|non-K&R-style functions|"
|
||||
+ "structs, classes, variables, functions, and inline namespaces}1">,
|
||||
InGroup<IgnoredAttributes>;
|
||||
def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>;
|
||||
def warn_type_attribute_wrong_type : Warning<
|
||||
@@ -4144,6 +4145,13 @@
|
||||
def err_redefinition_extern_inline : Error<
|
||||
"redefinition of a 'extern inline' function %0 is not supported in "
|
||||
"%select{C99 mode|C++}1">;
|
||||
+def warn_attr_abi_tag_namespace : Warning<
|
||||
+ "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored">,
|
||||
+ InGroup<IgnoredAttributes>;
|
||||
+def err_abi_tag_on_redeclaration : Error<
|
||||
+ "cannot add 'abi_tag' attribute in a redeclaration">;
|
||||
+def err_new_abi_tag_on_redeclaration : Error<
|
||||
+ "'abi_tag' %0 missing in original declaration">;
|
||||
|
||||
def note_deleted_dtor_no_operator_delete : Note<
|
||||
"virtual destructor requires an unambiguous, accessible 'operator delete'">;
|
||||
diff -Naur cfe-3.8.0.src.orig/include/clang/Sema/AttributeList.h cfe-3.8.0.src/include/clang/Sema/AttributeList.h
|
||||
--- cfe-3.8.0.src.orig/include/clang/Sema/AttributeList.h 2015-12-02 20:07:30.000000000 +0300
|
||||
+++ cfe-3.8.0.src/include/clang/Sema/AttributeList.h 2016-05-15 00:37:17.726321998 +0300
|
||||
@@ -855,7 +855,8 @@
|
||||
ExpectedStructOrTypedef,
|
||||
ExpectedObjectiveCInterfaceOrProtocol,
|
||||
ExpectedKernelFunction,
|
||||
- ExpectedFunctionWithProtoType
|
||||
+ ExpectedFunctionWithProtoType,
|
||||
+ ExpectedStructClassVariableFunctionOrInlineNamespace
|
||||
};
|
||||
|
||||
} // end namespace clang
|
||||
diff -Naur cfe-3.8.0.src.orig/lib/Sema/SemaDeclAttr.cpp cfe-3.8.0.src/lib/Sema/SemaDeclAttr.cpp
|
||||
--- cfe-3.8.0.src.orig/lib/Sema/SemaDeclAttr.cpp 2016-01-13 04:07:35.000000000 +0300
|
||||
+++ cfe-3.8.0.src/lib/Sema/SemaDeclAttr.cpp 2016-05-15 00:37:17.732322032 +0300
|
||||
@@ -4446,6 +4446,42 @@
|
||||
Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex()));
|
||||
}
|
||||
|
||||
+static void handleAbiTagAttr(Sema &S, Decl *D, const AttributeList &Attr) {
|
||||
+ SmallVector<std::string, 4> Tags;
|
||||
+ for (unsigned I = 0, E = Attr.getNumArgs(); I != E; ++I) {
|
||||
+ StringRef Tag;
|
||||
+ if (!S.checkStringLiteralArgumentAttr(Attr, I, Tag))
|
||||
+ return;
|
||||
+ Tags.push_back(Tag);
|
||||
+ }
|
||||
+
|
||||
+ if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {
|
||||
+ if (!NS->isInline()) {
|
||||
+ S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;
|
||||
+ return;
|
||||
+ }
|
||||
+ if (NS->isAnonymousNamespace()) {
|
||||
+ S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;
|
||||
+ return;
|
||||
+ }
|
||||
+ if (Attr.getNumArgs() == 0)
|
||||
+ Tags.push_back(NS->getName());
|
||||
+ } else if (!checkAttributeAtLeastNumArgs(S, Attr, 1))
|
||||
+ return;
|
||||
+
|
||||
+ // Store tags sorted and without duplicates.
|
||||
+ std::sort(Tags.begin(), Tags.end());
|
||||
+ Tags.erase(std::unique(Tags.begin(), Tags.end()), Tags.end());
|
||||
+
|
||||
+ D->addAttr(::new (S.Context)
|
||||
+ AbiTagAttr(Attr.getRange(), S.Context, Tags.data(), Tags.size(),
|
||||
+ Attr.getAttributeSpellingListIndex()));
|
||||
+
|
||||
+ // FIXME: remove this warning as soon as mangled part is ready.
|
||||
+ S.Diag(Attr.getRange().getBegin(), diag::warn_attribute_ignored)
|
||||
+ << Attr.getName();
|
||||
+}
|
||||
+
|
||||
static void handleARMInterruptAttr(Sema &S, Decl *D,
|
||||
const AttributeList &Attr) {
|
||||
// Check the attribute arguments.
|
||||
@@ -5360,6 +5396,9 @@
|
||||
case AttributeList::AT_Thread:
|
||||
handleDeclspecThreadAttr(S, D, Attr);
|
||||
break;
|
||||
+ case AttributeList::AT_AbiTag:
|
||||
+ handleAbiTagAttr(S, D, Attr);
|
||||
+ break;
|
||||
|
||||
// Thread safety attributes:
|
||||
case AttributeList::AT_AssertExclusiveLock:
|
||||
diff -Naur cfe-3.8.0.src.orig/lib/Sema/SemaDecl.cpp cfe-3.8.0.src/lib/Sema/SemaDecl.cpp
|
||||
--- cfe-3.8.0.src.orig/lib/Sema/SemaDecl.cpp 2016-01-12 01:41:53.000000000 +0300
|
||||
+++ cfe-3.8.0.src/lib/Sema/SemaDecl.cpp 2016-05-15 00:37:17.730322021 +0300
|
||||
@@ -2396,6 +2396,24 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ // Re-declaration cannot add abi_tag's.
|
||||
+ if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {
|
||||
+ if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {
|
||||
+ for (const auto &NewTag : NewAbiTagAttr->tags()) {
|
||||
+ if (std::find(OldAbiTagAttr->tags_begin(), OldAbiTagAttr->tags_end(),
|
||||
+ NewTag) == OldAbiTagAttr->tags_end()) {
|
||||
+ Diag(NewAbiTagAttr->getLocation(),
|
||||
+ diag::err_new_abi_tag_on_redeclaration)
|
||||
+ << NewTag;
|
||||
+ Diag(OldAbiTagAttr->getLocation(), diag::note_previous_declaration);
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);
|
||||
+ Diag(Old->getLocation(), diag::note_previous_declaration);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (!Old->hasAttrs())
|
||||
return;
|
||||
|
||||
diff -Naur cfe-3.8.0.src.orig/test/SemaCXX/attr-abi-tag-syntax.cpp cfe-3.8.0.src/test/SemaCXX/attr-abi-tag-syntax.cpp
|
||||
--- cfe-3.8.0.src.orig/test/SemaCXX/attr-abi-tag-syntax.cpp 1970-01-01 03:00:00.000000000 +0300
|
||||
+++ cfe-3.8.0.src/test/SemaCXX/attr-abi-tag-syntax.cpp 2016-05-15 00:37:17.733322038 +0300
|
||||
@@ -0,0 +1,43 @@
|
||||
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
|
||||
+
|
||||
+namespace N1 {
|
||||
+
|
||||
+namespace __attribute__((__abi_tag__)) {}
|
||||
+// expected-warning@-1 {{'abi_tag' attribute on non-inline namespace ignored}}
|
||||
+
|
||||
+namespace N __attribute__((__abi_tag__)) {}
|
||||
+// expected-warning@-1 {{'abi_tag' attribute on non-inline namespace ignored}}
|
||||
+
|
||||
+} // namespace N1
|
||||
+
|
||||
+namespace N2 {
|
||||
+
|
||||
+inline namespace __attribute__((__abi_tag__)) {}
|
||||
+// expected-warning@-1 {{'abi_tag' attribute on anonymous namespace ignored}}
|
||||
+
|
||||
+inline namespace N __attribute__((__abi_tag__)) {}
|
||||
+// FIXME: remove this warning as soon as attribute fully supported.
|
||||
+// expected-warning@-2 {{'__abi_tag__' attribute ignored}}
|
||||
+
|
||||
+} // namespcace N2
|
||||
+
|
||||
+__attribute__((abi_tag("B", "A"))) extern int a1;
|
||||
+// FIXME: remove this warning as soon as attribute fully supported.
|
||||
+// expected-warning@-2 {{'abi_tag' attribute ignored}}
|
||||
+
|
||||
+__attribute__((abi_tag("A", "B"))) extern int a1;
|
||||
+// expected-note@-1 {{previous declaration is here}}
|
||||
+// FIXME: remove this warning as soon as attribute fully supported.
|
||||
+// expected-warning@-3 {{'abi_tag' attribute ignored}}
|
||||
+
|
||||
+__attribute__((abi_tag("A", "C"))) extern int a1;
|
||||
+// expected-error@-1 {{'abi_tag' C missing in original declaration}}
|
||||
+// FIXME: remove this warning as soon as attribute fully supported.
|
||||
+// expected-warning@-3 {{'abi_tag' attribute ignored}}
|
||||
+
|
||||
+extern int a2;
|
||||
+// expected-note@-1 {{previous declaration is here}}
|
||||
+__attribute__((abi_tag("A")))extern int a2;
|
||||
+// expected-error@-1 {{cannot add 'abi_tag' attribute in a redeclaration}}
|
||||
+// FIXME: remove this warning as soon as attribute fully supported.
|
||||
+// expected-warning@-3 {{'abi_tag' attribute ignored}}
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
--- llvm-3.5/tools/clang/lib/Driver/Driver.cpp.gcc49~ 2014-08-22 22:54:39.000000000 +0200
|
||||
+++ llvm-3.5/tools/clang/lib/Driver/Driver.cpp 2014-08-25 22:24:57.688608644 +0200
|
||||
@@ -683,7 +683,7 @@ bool Driver::HandleImmediateArgs(const C
|
||||
@@ -910,7 +910,7 @@
|
||||
// If we want to return a more correct answer some day, then we should
|
||||
// introduce a non-pedantically GCC compatible mode to Clang in which we
|
||||
// provide sensible definitions for -dumpversion, __VERSION__, etc.
|
||||
|
@ -9,9 +9,10 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
--- llvm-3.5/tools/clang/lib/Frontend/InitPreprocessor.cpp.gcc49~ 2014-08-22 22:54:39.000000000 +0200
|
||||
+++ llvm-3.5/tools/clang/lib/Frontend/InitPreprocessor.cpp 2014-08-25 22:24:57.689608632 +0200
|
||||
@@ -462,9 +462,9 @@ static void InitializePredefinedMacros(c
|
||||
@@ -522,9 +522,9 @@
|
||||
#undef TOSTR
|
||||
#undef TOSTR2
|
||||
if (!LangOpts.MSVCCompat) {
|
||||
|
@ -23,7 +24,7 @@
|
|||
Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");
|
||||
Builder.defineMacro("__GNUC__", "4");
|
||||
Builder.defineMacro("__GXX_ABI_VERSION", "1002");
|
||||
@@ -482,9 +482,9 @@ static void InitializePredefinedMacros(c
|
||||
@@ -542,9 +542,9 @@
|
||||
Builder.defineMacro("__PRAGMA_REDEFINE_EXTNAME", "1");
|
||||
|
||||
// As sad as it is, enough software depends on the __VERSION__ for version
|
||||
|
@ -35,6 +36,7 @@
|
|||
Twine(getClangFullCPPVersion()) + "\"");
|
||||
|
||||
// Initialize language-specific preprocessor defines.
|
||||
|
||||
--- llvm-3.5/tools/clang/test/Driver/immediate-options.c.gcc49~ 2014-08-22 22:54:39.000000000 +0200
|
||||
+++ llvm-3.5/tools/clang/test/Driver/immediate-options.c 2014-08-25 22:24:57.690608619 +0200
|
||||
@@ -7,7 +7,7 @@
|
||||
|
@ -46,14 +48,15 @@
|
|||
|
||||
// RUN: %clang -print-search-dirs | FileCheck %s -check-prefix=PRINT-SEARCH-DIRS
|
||||
// PRINT-SEARCH-DIRS: programs: ={{.*}}
|
||||
|
||||
--- llvm-3.5/tools/clang/test/Preprocessor/init.c.gcc49~ 2014-08-25 22:24:57.691608607 +0200
|
||||
+++ llvm-3.5/tools/clang/test/Preprocessor/init.c 2014-08-25 22:25:27.754232772 +0200
|
||||
@@ -5851,7 +5851,7 @@
|
||||
@@ -7025,7 +7025,7 @@
|
||||
// SPARC:#define __UINT_LEAST8_MAX__ 255
|
||||
// SPARC:#define __UINT_LEAST8_TYPE__ unsigned char
|
||||
// SPARC:#define __USER_LABEL_PREFIX__ _
|
||||
-// SPARC:#define __VERSION__ "4.2.1 Compatible
|
||||
+// SPARC:#define __VERSION__ "4.9.1 Compatible
|
||||
// SPARC:#define __USER_LABEL_PREFIX__
|
||||
-// SPARC:#define __VERSION__ "4.2.1 Compatible{{.*}}
|
||||
+// SPARC:#define __VERSION__ "4.9.1 Compatible{{.*}}
|
||||
// SPARC:#define __WCHAR_MAX__ 2147483647
|
||||
// SPARC:#define __WCHAR_TYPE__ int
|
||||
// SPARC:#define __WCHAR_WIDTH__ 32
|
||||
|
|
95
clang-rosa.patch
Normal file
95
clang-rosa.patch
Normal file
|
@ -0,0 +1,95 @@
|
|||
diff -Naur cfe-3.9.0.src.orig/lib/Driver/ToolChains.cpp cfe-3.9.0.src/lib/Driver/ToolChains.cpp
|
||||
--- cfe-3.9.0.src.orig/lib/Driver/ToolChains.cpp 2016-08-18 20:56:48.000000000 +0300
|
||||
+++ cfe-3.9.0.src/lib/Driver/ToolChains.cpp 2016-09-11 16:47:44.240732535 +0300
|
||||
@@ -3744,6 +3744,7 @@
|
||||
UbuntuVivid,
|
||||
UbuntuWily,
|
||||
UbuntuXenial,
|
||||
+ ROSA,
|
||||
UnknownDistro
|
||||
};
|
||||
|
||||
@@ -3761,6 +3762,10 @@
|
||||
return Distro >= UbuntuHardy && Distro <= UbuntuXenial;
|
||||
}
|
||||
|
||||
+static bool IsROSA(enum Distro Distro) {
|
||||
+ return Distro == ROSA;
|
||||
+}
|
||||
+
|
||||
static Distro DetectDistro(const Driver &D, llvm::Triple::ArchType Arch) {
|
||||
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
|
||||
llvm::MemoryBuffer::getFile("/etc/lsb-release");
|
||||
@@ -3769,7 +3774,10 @@
|
||||
SmallVector<StringRef, 16> Lines;
|
||||
Data.split(Lines, "\n");
|
||||
Distro Version = UnknownDistro;
|
||||
- for (StringRef Line : Lines)
|
||||
+ for (StringRef Line : Lines) {
|
||||
+ if (Version == UnknownDistro && Line.startswith("DISTRIB_ID=Rosa"))
|
||||
+ Version = ROSA;
|
||||
+ }
|
||||
if (Version == UnknownDistro && Line.startswith("DISTRIB_CODENAME="))
|
||||
Version = llvm::StringSwitch<Distro>(Line.substr(17))
|
||||
.Case("hardy", UbuntuHardy)
|
||||
@@ -3790,6 +3798,7 @@
|
||||
.Case("wily", UbuntuWily)
|
||||
.Case("xenial", UbuntuXenial)
|
||||
.Default(UnknownDistro);
|
||||
+ }
|
||||
if (Version != UnknownDistro)
|
||||
return Version;
|
||||
}
|
||||
@@ -3950,7 +3959,7 @@
|
||||
return TargetTriple.str();
|
||||
}
|
||||
|
||||
-static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
||||
+static StringRef getOSLibDir(const enum Distro &Distro, const llvm::Triple &Triple, const ArgList &Args) {
|
||||
if (isMipsArch(Triple.getArch())) {
|
||||
// lib32 directory has a special meaning on MIPS targets.
|
||||
// It contains N32 ABI binaries. Use this folder if produce
|
||||
@@ -3966,11 +3975,14 @@
|
||||
// with a 'lib32' library search path being considered. So we only enable
|
||||
// them when we know we may need it.
|
||||
//
|
||||
+ // ROSA does not use lib32: 64-bit libs go to lib64, 32- bit libs go to lib).
|
||||
+ //
|
||||
// FIXME: This is a bit of a hack. We should really unify this code for
|
||||
// reasoning about oslibdir spellings with the lib dir spellings in the
|
||||
// GCCInstallationDetector, but that is a more significant refactoring.
|
||||
- if (Triple.getArch() == llvm::Triple::x86 ||
|
||||
- Triple.getArch() == llvm::Triple::ppc)
|
||||
+ if (!IsROSA(Distro) &&
|
||||
+ (Triple.getArch() == llvm::Triple::x86 ||
|
||||
+ Triple.getArch() == llvm::Triple::ppc))
|
||||
return "lib32";
|
||||
|
||||
if (Triple.getArch() == llvm::Triple::x86_64 &&
|
||||
@@ -4012,7 +4024,7 @@
|
||||
|
||||
Distro Distro = DetectDistro(D, Arch);
|
||||
|
||||
- if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
|
||||
+ if (IsOpenSUSE(Distro) || IsUbuntu(Distro) || IsROSA(Distro)) {
|
||||
ExtraOpts.push_back("-z");
|
||||
ExtraOpts.push_back("relro");
|
||||
}
|
||||
@@ -4032,7 +4044,7 @@
|
||||
// ABI requires a mapping between the GOT and the symbol table.
|
||||
// Android loader does not support .gnu.hash.
|
||||
if (!IsMips && !IsAndroid) {
|
||||
- if (IsRedhat(Distro) || IsOpenSUSE(Distro) ||
|
||||
+ if (IsRedhat(Distro) || IsOpenSUSE(Distro) || IsROSA(Distro) ||
|
||||
(IsUbuntu(Distro) && Distro >= UbuntuMaverick))
|
||||
ExtraOpts.push_back("--hash-style=gnu");
|
||||
|
||||
@@ -4058,7 +4070,7 @@
|
||||
// to the link paths.
|
||||
path_list &Paths = getFilePaths();
|
||||
|
||||
- const std::string OSLibDir = getOSLibDir(Triple, Args);
|
||||
+ const std::string OSLibDir = getOSLibDir(Distro, Triple, Args);
|
||||
const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
|
||||
|
||||
// Add the multilib suffixed paths where they are available.
|
|
@ -1,11 +0,0 @@
|
|||
--- tools/libclang/Makefile.soname~ 2014-08-25 22:21:51.899931322 +0200
|
||||
+++ tools/libclang/Makefile 2014-08-25 22:22:40.725320921 +0200
|
||||
@@ -34,7 +34,7 @@ include $(CLANG_LEVEL)/Makefile
|
||||
|
||||
# Add soname to the library.
|
||||
ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux FreeBSD GNU GNU/kFreeBSD))
|
||||
- LLVMLibsOptions += -Wl,-soname,lib$(LIBRARYNAME)$(SHLIBEXT)
|
||||
+ LLVMLibsOptions += -Wl,-soname,lib$(LIBRARYNAME)-$(LLVMVersion)$(SHLIBEXT)
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_ARCMT),1)
|
46
llvm.spec
46
llvm.spec
|
@ -11,43 +11,31 @@
|
|||
|
||||
%bcond_without clang
|
||||
|
||||
%define major_ver 3.8
|
||||
%define major_ver 3.9
|
||||
%define minor_ver 0
|
||||
|
||||
Summary: Low Level Virtual Machine (LLVM)
|
||||
Name: llvm
|
||||
Version: %{major_ver}.%{minor_ver}
|
||||
Release: 2
|
||||
Release: 1
|
||||
License: NCSA
|
||||
Group: Development/Other
|
||||
Url: http://llvm.org/
|
||||
# There's a branch of LLVM maintained at
|
||||
# git://people.freedesktop.org/~tstellar/llvm
|
||||
# Ir is the working branch of the AMDGPU/R600 backend needed by Mesa (and is otherwise
|
||||
# more or less identical to upstream llvm).
|
||||
# At times it may be necessary to package this branch instead.
|
||||
|
||||
Source0: http://llvm.org/releases/%{version}/llvm-%{version}.src.tar.xz
|
||||
Source1: http://llvm.org/releases/%{version}/cfe-%{version}.src.tar.xz
|
||||
Source2: http://llvm.org/releases/%{version}/clang-tools-extra-%{version}.src.tar.xz
|
||||
Source3: http://llvm.org/releases/%{version}/polly-%{version}.src.tar.xz
|
||||
Source4: http://llvm.org/releases/%{version}/compiler-rt-%{version}.src.tar.xz
|
||||
Source1000: llvm.rpmlintrc
|
||||
# Versionize libclang.so (Anssi 08/2012):
|
||||
Patch0: clang-soname.patch
|
||||
# Adjust search paths to match the OS
|
||||
Patch1: 0000-clang-mandriva.patch
|
||||
|
||||
# Adjust the search paths to match the OS, adjust the default compiler flags
|
||||
# as well.
|
||||
Patch1: clang-rosa.patch
|
||||
# Claim compatibility with gcc 4.9.1 rather than 4.2.1, it's
|
||||
# much much closer in terms of standards supported etc.
|
||||
Patch7: clang-gcc-compat.patch
|
||||
|
||||
# https://llvm.org/bugs/show_bug.cgi?id=23529
|
||||
# These variants of the patches are similar to what ArchLinux uses.
|
||||
Patch100: D17567-PR23529-Sema-part-of-attrbute-abi_tag-support.patch
|
||||
Patch101: D18035-PR23529-Mangler-part-of-attrbute-abi_tag-support.patch
|
||||
|
||||
# Upstream fix for llvm.org/PR27305
|
||||
Patch102: polly-Fix-Always-honor-LLVM_LIBDIR_SUFFIX.patch
|
||||
|
||||
|
||||
BuildRequires: cmake
|
||||
BuildRequires: bison
|
||||
|
@ -118,6 +106,8 @@ for effective implementation, proper tail calls or garbage collection.
|
|||
%{_bindir}/verify-uselistorder
|
||||
%{_bindir}/obj2yaml
|
||||
%{_bindir}/yaml2obj
|
||||
%{_bindir}/find-all-symbols
|
||||
%{_bindir}/sanstats
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
@ -177,10 +167,10 @@ This package contains the development files for LLVM.
|
|||
%{_bindir}/%{name}-config
|
||||
%{_libdir}/libLLVM.so
|
||||
%{_libdir}/libLLVM*.a
|
||||
%{_libdir}/libfindAllSymbols.a
|
||||
%{_libdir}/cmake/%{name}/*
|
||||
%{_includedir}/%{name}
|
||||
%{_includedir}/%{name}-c
|
||||
%dir %{_datadir}/%{name}
|
||||
%{_datadir}/%{name}/cmake
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
@ -286,6 +276,8 @@ as libraries and designed to be loosely-coupled and extensible.
|
|||
%{_libdir}/clang/
|
||||
%{_datadir}/clang/clang-tidy-diff.py
|
||||
%{_datadir}/clang/run-clang-tidy.py
|
||||
%{_datadir}/clang/clang-include-fixer.py
|
||||
%{_datadir}/clang/run-find-all-symbols.py
|
||||
%endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
@ -330,8 +322,10 @@ libclang.
|
|||
%{_includedir}/clang-c
|
||||
%{_libdir}/libclang.so
|
||||
%{_libdir}/libclang*.a
|
||||
%{_libdir}/cmake/clang/ClangConfig.cmake
|
||||
%{_libdir}/cmake/clang/ClangTargets-relwithdebinfo.cmake
|
||||
%{_libdir}/cmake/clang/ClangTargets.cmake
|
||||
%dir %{_datadir}/clang/
|
||||
%{_datadir}/clang/cmake/
|
||||
%endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
@ -373,17 +367,11 @@ mv polly-%{version}.src tools/polly
|
|||
mv clang-tools-extra-%{version}.src tools/clang/tools/extra
|
||||
mv compiler-rt-%{version}.src projects/compiler-rt
|
||||
cd tools/clang
|
||||
%patch0 -p0 -b .soname~
|
||||
%patch1 -p1 -b .mandriva~
|
||||
%patch1 -p1 -b .rosa~
|
||||
cd -
|
||||
%endif
|
||||
%patch7 -p1 -b .gcc49~
|
||||
|
||||
%patch100 -d tools/clang -p1
|
||||
%patch101 -d tools/clang -p0
|
||||
|
||||
%patch102 -d tools/polly -p1
|
||||
|
||||
|
||||
%build
|
||||
# Build with gcc/g++, not clang if it happens to be installed
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
From 76ce9e227be304bcacb94360e2f9a8a8bc81c27a Mon Sep 17 00:00:00 2001
|
||||
From: Michael Kruse <llvm@meinersbur.de>
|
||||
Date: Sat, 9 Apr 2016 14:09:08 +0000
|
||||
Subject: [PATCH] Fix: Always honor LLVM_LIBDIR_SUFFIX.
|
||||
|
||||
Static libraries where installed into "lib${LLVM_LIBDIR_SUFFIX}" while
|
||||
shared ones into "lib". I found no justification for this behaviour.
|
||||
This patch changes both types of libraries to be install into
|
||||
"lib${LLVM_LIBDIR_SUFFIX}". LLVM and clang use the same behaviour.
|
||||
|
||||
This fixes llvm.org/PR27305.
|
||||
|
||||
git-svn-id: https://llvm.org/svn/llvm-project/polly/trunk@265872 91177308-0d34-0410-b5e6-96231b3b80d8
|
||||
---
|
||||
cmake/polly_macros.cmake | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cmake/polly_macros.cmake b/cmake/polly_macros.cmake
|
||||
index 26a3374..3ceeaec 100644
|
||||
--- a/cmake/polly_macros.cmake
|
||||
+++ b/cmake/polly_macros.cmake
|
||||
@@ -45,7 +45,7 @@ macro(add_polly_library name)
|
||||
endif( LLVM_LINK_COMPONENTS )
|
||||
install(TARGETS ${name}
|
||||
EXPORT LLVMExports
|
||||
- LIBRARY DESTINATION lib
|
||||
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
||||
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
endmacro(add_polly_library)
|
||||
--
|
||||
2.7.3
|
||||
|
Loading…
Add table
Reference in a new issue