summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/clang/llvm-project-source.inc
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/clang/llvm-project-source.inc')
-rw-r--r--meta/recipes-devtools/clang/llvm-project-source.inc98
1 files changed, 98 insertions, 0 deletions
diff --git a/meta/recipes-devtools/clang/llvm-project-source.inc b/meta/recipes-devtools/clang/llvm-project-source.inc
new file mode 100644
index 0000000000..13e54efbc2
--- /dev/null
+++ b/meta/recipes-devtools/clang/llvm-project-source.inc
@@ -0,0 +1,98 @@
1deltask do_configure
2deltask do_compile
3deltask do_install
4deltask do_populate_sysroot
5deltask do_populate_lic
6RM_WORK_EXCLUDE += "${PN}"
7
8inherit nopackages
9
10PN = "llvm-project-source-${PV}"
11WORKDIR = "${TMPDIR}/work-shared/llvm-project-source-${PV}-${PR}"
12SSTATE_SWSPEC = "sstate:llvm-project-source::${PV}:${PR}::${SSTATE_VERSION}:"
13
14STAMP = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-${PR}"
15STAMPCLEAN = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-*"
16
17INHIBIT_DEFAULT_DEPS = "1"
18DEPENDS = ""
19PACKAGES = ""
20TARGET_ARCH = "allarch"
21TARGET_AS_ARCH = "none"
22TARGET_CC_ARCH = "none"
23TARGET_LD_ARCH = "none"
24TARGET_OS = "linux"
25baselib = "lib"
26PACKAGE_ARCH = "all"
27
28B = "${WORKDIR}/build"
29
30# space separated list of additional distro vendor values we want to support e.g.
31# "yoe webos" or "-yoe -webos" '-' is optional
32CLANG_EXTRA_OE_VENDORS ?= "${TARGET_VENDOR} ${SDK_VENDOR}"
33# Extra OE DISTRO that want to support as build host. space separated list of additional distro.
34# ":" separated the ID in "/etc/os-release" and the triple for finding gcc on this OE DISTRO.
35# eg: "poky:poky wrlinux:wrs"
36CLANG_EXTRA_OE_DISTRO ?= "poky:poky"
37# Match with MULTILIB_GLOBAL_VARIANTS
38ML_VARIANTS = "lib32 lib64 libx32"
39
40python do_preconfigure() {
41 import subprocess
42 case = ""
43 triple = ""
44 vendors = d.getVar('CLANG_EXTRA_OE_VENDORS')
45 multilib_variants = (d.getVar("ML_VARIANTS") or "").split()
46 vendors_to_add = []
47 for vendor in vendors.split():
48 # convert -yoe into yoe
49 vendor = vendor.lstrip('-')
50 # generate possible multilib vendor names for yoe
51 # such as yoemllib32
52 vendors_to_add.extend([vendor + 'ml' + variant for variant in multilib_variants])
53 # skip oe since already part of the cpp file
54 if vendor != "oe":
55 vendors_to_add.append(vendor)
56
57 for vendor_to_add in vendors_to_add:
58 case += '\\n .Case("' + vendor_to_add + '", Triple::OpenEmbedded)'
59 triple += ' "x86_64-' + vendor_to_add + '-linux",'
60
61 bb.note("Adding support following TARGET_VENDOR values")
62 bb.note(str(vendors_to_add))
63 bb.note("in llvm/lib/TargetParser/Triple.cpp and ${S}/clang/lib/Driver/ToolChains/Gnu.cpp")
64 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Gnu.cpp" % (triple))
65 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
66 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_CASES#%s#g' -i ${S}/llvm/lib/TargetParser/Triple.cpp" % (case))
67 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
68
69 case = ""
70 triple = ""
71 name = ""
72 check = ""
73 oe_names = ""
74 distros = d.getVar('CLANG_EXTRA_OE_DISTRO')
75 for distro in distros.split():
76 distro_id = distro.split(":")[0].replace('-','_')
77 distro_triple = distro.split(":")[1]
78 case += '\\n .Case("' + distro_id + '", Distro::' + distro_id.upper() + ')'
79 triple += '\\n if (Distro.Is' + distro_id.upper() + '())\\n return "x86_64-' + distro_triple + '-linux",'
80 name += '\\n '+ distro_id.upper() + ','
81 check += '\\nbool Is' + distro_id.upper() + '() const { return DistroVal == ' + distro_id.upper() + '; }'
82 oe_names += distro_id.upper() + ' ||'
83
84 check += '\\nbool IsOpenEmbedded() const { return DistroVal == ' + oe_names[0:-3] + '; }'
85
86 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_NAME#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (name))
87 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
88 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CHECK#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (check))
89 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
90 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Linux.cpp" % (triple))
91 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
92 cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CASES#%s#g' -i ${S}/clang/lib/Driver/Distro.cpp" % (case))
93 subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
94}
95
96do_patch[vardepsexclude] += "MULTILIBS MULTILIB_VARIANTS"
97addtask do_preconfigure after do_patch
98do_create_spdx[depends] += "${PN}:do_preconfigure"