summaryrefslogtreecommitdiffstats
path: root/recipes/llvm/llvm.inc
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/llvm/llvm.inc')
-rw-r--r--recipes/llvm/llvm.inc226
1 files changed, 0 insertions, 226 deletions
diff --git a/recipes/llvm/llvm.inc b/recipes/llvm/llvm.inc
deleted file mode 100644
index fcd2666..0000000
--- a/recipes/llvm/llvm.inc
+++ /dev/null
@@ -1,226 +0,0 @@
1# LLVM does not provide ABI stability between different versions. For this
2# reason OE makes it possible to build and install different llvm versions
3# at the same time.
4#
5# This is true for the normal recipes as well as the native ones.
6#
7# All regular installation directories are prefixed with 'llvm${LLVM_RELEASE}'
8# e.g. "${STAGING_BINDIR}/llvm2.5" or "${STAGING_INCDIR}/llvm2.5"
9#
10# For your program or library that makes use of llvm you do should not need to
11# modify anything as long as it uses the results of various llvm-config
12# invocations. If you need customizations something is wrong and it needs to be
13# fixed (report bug).
14#
15# However the *recipe* for your program/library *must* declare
16# export WANT_LLVM_RELEASE = "<valid version number>"
17# The version number is picked up by a generic wrapper script which just calls
18# the variant of the specified version.
19
20DESCRIPTION = "The Low Level Virtual Machine"
21HOMEPAGE = "http://llvm.org"
22# 3-clause BSD-like
23LICENSE = "NCSA"
24LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=0ac5f799a2d89477c75b0a378b221855"
25
26DEPENDS = "llvm${LLVM_RELEASE}-native llvm-common"
27DEPENDS_virtclass-native = "llvm-common-native cmake-native"
28
29INC_PR = "r2"
30
31SRC_URI = "http://llvm.org/releases/${PV}/llvm-${PV}.tgz"
32
33S = "${WORKDIR}/llvm-${PV}"
34
35inherit cmake perlnative pythonnative
36
37# Defines the LLVM supported arches. By now we always build either for ${BUILD}
38# (native) or ${TARGET}. In the future it may make sense to enable all backends
39# for the non-native build. The decision which backends are used is made by
40# the 3rd party program or library that uses llvm anyway.
41LLVM_ARCH = "${@get_llvm_arch(d)}"
42
43# This is used for generating the install directory for the llvm libraries,
44# binaries and headers. It makes side by side installation of those possible.
45LLVM_RELEASE = "${PV}"
46
47# llvm *must* be built out of tree
48OECMAKE_SOURCEPATH = ".."
49OECMAKE_BUILDPATH = "build"
50EXTRA_OECMAKE = "\
51 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm${LLVM_RELEASE}/tblgen \
52 -DLLVM_TARGETS_TO_BUILD=${LLVM_ARCH} \
53 -DCMAKE_LINKER:FILEPATH=${LD} \
54 -DCMAKE_AR:FILEPATH=${AR} \
55 -DCMAKE_OBJCOPY:FILEPATH=${OBJCOPY} \
56 -DCMAKE_OBJDUMP:FILEPATH=${OBJDUMP} \
57 -DCMAKE_RANLIB:FILEPATH=${RANLIB} \
58 -DCMAKE_STRIP:FILEPATH=${STRIP} \
59 -DNM_PATH:FILEPATH=${NM} \
60 -DLLVM_ENABLE_PIC:BOOL=ON \
61 -DLLVM_TARGET_ARCH:STRING=${LLVM_ARCH} \
62 -DLLVM_ENABLE_ASSERTIONS:BOOL=ON \
63 -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
64 -DBUILD_SHARED_LIBS:BOOL=ON \
65 -DCMAKE_SKIP_BUILD_RPATH:BOOL=ON \
66"
67# We need to reset this to avoid breakage as we build out of tree
68TOOLCHAIN_OPTIONS = ""
69
70PACKAGES_DYNAMIC = "llvm-*"
71
72# the difference to the non-native build is that we do not need
73# to declare the location of the tblgen executable.
74EXTRA_OECMAKE_virtclass-native = "\
75 -DLLVM_TARGETS_TO_BUILD=${LLVM_ARCH} \
76 -DCMAKE_LINKER:FILEPATH=${LD} \
77 -DCMAKE_AR:FILEPATH=${AR} \
78 -DCMAKE_OBJCOPY:FILEPATH=${OBJCOPY} \
79 -DCMAKE_OBJDUMP:FILEPATH=${OBJDUMP} \
80 -DCMAKE_RANLIB:FILEPATH=${RANLIB} \
81 -DCMAKE_STRIP:FILEPATH=${STRIP} \
82 -DNM_PATH:FILEPATH=${NM} \
83"
84
85PACKAGES_virtclass-native = ""
86
87PACKAGES_DYNAMIC_virtclass-native = ""
88
89python populate_packages_prepend () {
90 libllvm_libdir = bb.data.expand('${libdir}/llvm${LLVM_RELEASE}', d)
91 do_split_packages(d, libllvm_libdir, '^lib(.*)\.so$', 'libllvm-%s', 'Split package for %s', allow_dirs=True)
92}
93
94FILES_${PN} = ""
95ALLOW_EMPTY_${PN} = "1"
96
97FILES_${PN}-dbg += "${libdir}/llvm${LLVM_RELEASE}/.debug ${bindir}/llvm${LLVM_RELEASE}/.debug"
98
99FILES_${PN}-dev = " \
100 ${includedir} \
101 ${bindir}/* \
102 ${libdir}/llvm${LLVM_RELEASE}/LLVMHello.so \
103 ${libdir}/llvm${LLVM_RELEASE}/BugpointPasses.so \
104 ${libdir}/llvm${LLVM_RELEASE}/*.a \
105"
106
107base_do_compile_prepend() {
108 # Avoid *** No rule to make target `native/bin/tblgen', needed by `include/llvm/Intrinsics.gen.tmp'
109 oe_runmake tblgen
110}
111
112do_install() {
113 # Install into a private directory to be able to reorganize the files.
114
115 cd ${OECMAKE_BUILDPATH}
116
117 oe_runmake DESTDIR=${WORKDIR}/llvm-install install
118
119 # Create our custom target directories
120 install -d ${D}${bindir}/llvm${LLVM_RELEASE}
121 install -d ${D}${includedir}/llvm${LLVM_RELEASE}
122 install -d ${D}${libdir}/llvm${LLVM_RELEASE}
123
124 # Move headers into their own directory
125 cp -R ${WORKDIR}/llvm-install/${prefix}/include/llvm \
126 ${D}${includedir}/llvm${LLVM_RELEASE}/
127 cp -R ${WORKDIR}/llvm-install/${prefix}/include/llvm-c \
128 ${D}${includedir}/llvm${LLVM_RELEASE}/
129
130 find ${WORKDIR}/llvm-install/${prefix}/lib -name "*" -maxdepth 1 -exec \
131 install {} ${D}${libdir}/llvm${LLVM_RELEASE} \;
132
133 # I dont know another way out. Binaries are installed into a special subdir
134 find ${WORKDIR}/llvm-install/${prefix}/bin -name "*" -maxdepth 1 -exec \
135 install {} ${D}${bindir}/llvm${LLVM_RELEASE} \;
136
137 # LLVM does not install this by default.
138 install bin/tblgen ${D}${bindir}/llvm${LLVM_RELEASE}
139
140 # we install it here unmodified for native and none native and overwrite it
141 # later for native case
142 install -d ${D}${bindir}
143 install -m 0755 bin/llvm-config ${D}${bindir}
144}
145
146SYSROOT_PREPROCESS_FUNCS_append_class-target = " llvm_sysroot_preprocess"
147
148llvm_sysroot_preprocess() {
149 cd ${OECMAKE_BUILDPATH}
150
151 # Fix the paths in the config script to make it find the binaries and
152 # library files. Doing so allows 3rd party configure scripts working
153 # unmodified.
154 sed -e's!my.*ABS_RUN_DIR =.*!my $ABS_RUN_DIR = "${STAGING_DIR_TARGET}";!' \
155 -e's!my.*INCLUDEDIR =.*!my $INCLUDEDIR = "${STAGING_INCDIR}/llvm${LLVM_RELEASE}";!' \
156 -e's!my.*LIBDIR.*!my $LIBDIR = "${STAGING_LIBDIR}/llvm${LLVM_RELEASE}";!' \
157 -e's!my.*BINDIR.*!my $BINDIR = "${STAGING_BINDIR}/llvm${LLVM_RELEASE}";!' \
158 bin/llvm-config > bin/llvm-config${LLVM_RELEASE}
159
160 install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}
161 install -m 0755 bin/llvm-config${LLVM_RELEASE} ${SYSROOT_DESTDIR}${bindir_crossscripts}
162}
163
164do_install_virtclass-native() {
165 # Install into a private directory to be able to reorganize the files.
166
167 cd ${OECMAKE_BUILDPATH}
168
169 oe_runmake DESTDIR=${WORKDIR}/llvm-install install
170
171 # Create our custom target directories
172 install -d ${D}${bindir}/llvm${LLVM_RELEASE}
173 install -d ${D}${includedir}/llvm${LLVM_RELEASE}
174 install -d ${D}${libdir}/llvm${LLVM_RELEASE}
175
176 # Move headers into their own directory
177 cp -R ${WORKDIR}/llvm-install/${prefix}/include/llvm \
178 ${D}${includedir}/llvm${LLVM_RELEASE}/
179 cp -R ${WORKDIR}/llvm-install/${prefix}/include/llvm-c \
180 ${D}${includedir}/llvm${LLVM_RELEASE}/
181
182 find ${WORKDIR}/llvm-install/${prefix}/lib -name "*" -maxdepth 1 -exec \
183 install {} ${D}${libdir}/llvm${LLVM_RELEASE} \;
184
185 # I dont know another way out. Binaries are installed into a special subdir
186 find ${WORKDIR}/llvm-install/${prefix}/bin -name "*" -maxdepth 1 -exec \
187 install {} ${D}${bindir}/llvm${LLVM_RELEASE} \;
188
189 # LLVM does not install this by default.
190 install bin/tblgen ${D}${bindir}/llvm${LLVM_RELEASE}
191
192 # Fix the paths in the config script to make it find the binaries and
193 # library files. Doing so allows 3rd party configure scripts working
194 # unmodified.
195 sed -e's!my.*ABS_RUN_DIR =.*!my $ABS_RUN_DIR = "${STAGING_DIR_TARGET}";!' \
196 -e's!my.*INCLUDEDIR =.*!my $INCLUDEDIR = "${STAGING_INCDIR}/llvm${LLVM_RELEASE}";!' \
197 -e's!my.*LIBDIR.*!my $LIBDIR = "${STAGING_LIBDIR}/llvm${LLVM_RELEASE}";!' \
198 -e's!my.*BINDIR.*!my $BINDIR = "${STAGING_BINDIR}/llvm${LLVM_RELEASE}";!' \
199 bin/llvm-config > bin/llvm-config${LLVM_RELEASE}
200
201 install -d ${D}${bindir}
202 install -m 0755 bin/llvm-config${LLVM_RELEASE} ${D}${bindir}
203}
204
205
206# Retrieve the target in a way that is compatible to the arch
207# value in llvm (>= 2.5)
208def get_llvm_arch(d):
209 import bb;
210
211 arch = bb.data.getVar('TARGET_ARCH', d, 1)
212 if arch == "x86_64" or arch == "i486" or arch == "i586" or arch == "i686":
213 arch = "X86"
214 elif arch == "arm":
215 arch = "ARM"
216 elif arch == "mipsel" or arch == "mips":
217 arch = "mips"
218 elif arch == "powerpc" or arch == "powerpc64":
219 arch = "PowerPC"
220 else:
221 bb.warn("%s does not support %s yet" % (bb.data.getVar('PN', d, 1), arch) );
222
223 return arch
224
225BBCLASSEXTEND = "native"
226