first commit
[scm/bb/meta-tizen.git] / recipes-tizen / llvm / llvm.inc
1 DESCRIPTION = "The Low Level Virtual Machine"
2 HOMEPAGE = "http://nohomepage.org"
3 SECTION = "Development/Toolchain"
4 LICENSE = "NCSA"
5
6 SRC_URI = ""
7
8 S = "${WORKDIR}/git"
9
10 PROVIDES = ""
11
12 #PROVIDES by libllvm 
13 PROVIDES += "libllvm"
14 RPROVIDES_libllvm += "libllvm"
15
16 #PROVIDES by llvm 
17 PROVIDES += "llvm"
18 RPROVIDES_llvm += "llvm"
19
20 #PROVIDES by clang-analyzer 
21 PROVIDES += "clang-analyzer"
22 RPROVIDES_clang-analyzer += "clang-analyzer"
23
24 #PROVIDES by clang-doc 
25 PROVIDES += "clang-doc"
26 RPROVIDES_clang-doc += "clang-doc"
27
28 #PROVIDES by llvm-devel 
29 PROVIDES += "llvm-devel"
30 RPROVIDES_llvm-devel += "llvm-devel"
31 RPROVIDES_llvm-devel += "llvm-dev"
32 # the PROVIDES rules is ignore "llvm-static = 3.1-0"
33 PROVIDES += "llvm-static"
34 RPROVIDES_llvm-devel += "llvm-static"
35
36 #PROVIDES by clang-devel 
37 PROVIDES += "clang-devel"
38 RPROVIDES_clang-devel += "clang-devel"
39 RPROVIDES_clang-devel += "clang-dev"
40
41 #PROVIDES by clang 
42 PROVIDES += "clang"
43 RPROVIDES_clang += "clang"
44
45 RDEPENDS = ""
46 #RDEPENDS of llvm (${PN})
47 RDEPENDS_${PN} += "libllvm"
48
49 #RDEPENDS of clang-analyzer (clang-analyzer)
50 RDEPENDS_clang-analyzer += "python"
51 RDEPENDS_clang-analyzer += "clang"
52
53 #RDEPENDS of clang-doc (clang-doc)
54 RDEPENDS_clang-doc += "llvm"
55
56 #RDEPENDS of llvm-devel (${PN}-devel)
57 RDEPENDS_${PN}-devel += "llvm"
58 RDEPENDS_${PN}-devel += "libffi-dev"
59 RDEPENDS_${PN}-devel += "update-alternatives"
60 RDEPENDS_${PN}-devel += "libstdc++-dev"
61
62 #RDEPENDS of clang-devel (clang-devel)
63 RDEPENDS_clang-devel += "clang"
64
65 #RDEPENDS of clang (clang)
66 RDEPENDS_clang += "gcc"
67 RDEPENDS_clang += "llvm"
68 RDEPENDS_clang += "libstdc++-dev"
69
70
71 DEPENDS = ""
72 #DEPENDS of llvm 
73 DEPENDS += "flex"
74 DEPENDS += "gcc-cross"
75 DEPENDS += "chrpath"
76 DEPENDS += "zip"
77 DEPENDS += "python-devel"
78 DEPENDS += "bison-native"
79 DEPENDS += "libffi"
80 DEPENDS += "libtool-cross"
81 DEPENDS += "groff"
82 DEPENDS += "binutils"
83
84 do_patch() {
85  #extracte source 1 
86  pushd ${S}
87  unp ${S}/packaging/clang-3.1.src.tar.gz 
88  popd 
89  chmod -Rf a+rX,u+w,g-w,o-w ${S}
90  #setup -q -n llvm-3.1.src -a1
91  cp ${S}/packaging/llvm.manifest .
92  rm -r -f tools/clang
93  mv clang-3.1.src tools/clang
94  
95  
96  
97  
98  # fix ld search path
99  sed -i 's|/lib /usr/lib $lt_ld_extra|/usr/lib $lt_ld_extra|' \
100      ./configure
101  
102  
103  
104 }
105
106 do_configure() {
107 }
108
109 do_compile() {
110  LANG=C
111  export LANG
112  unset DISPLAY
113  CFLAGS="-O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables" ; export CFLAGS ; 
114  CXXFLAGS="${CXXFLAGS:--O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables}" ; export CXXFLAGS ; 
115  FFLAGS="${FFLAGS:--O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -I%_fmoddir}" ; export FFLAGS ; 
116  LD_AS_NEEDED=1; export LD_AS_NEEDED ; 
117  
118  # Build without -ftree-pre as a workaround for clang segfaulting on x86_64.
119  # https://bugzilla.redhat.com/show_bug.cgi?id=791365
120  
121  # Disabling assertions now, rec. by pure and needed for OpenGTL
122  
123    CFLAGS="${CFLAGS:--O2 -fno-tree-pre -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables}" ; export CFLAGS ; 
124    CXXFLAGS="${CXXFLAGS:--O2 -fno-tree-pre -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables}" ; export CXXFLAGS ; 
125    FFLAGS="${FFLAGS:--O2 -fno-tree-pre -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -I%_fmoddir}" ; export FFLAGS ; 
126    autotools_do_configure --build=${TARGET_SYS} --host=${HOST_SYS} \
127          --target=x86_64-tizen-linux \
128          --program-prefix= \
129          --prefix=/usr \
130          --exec-prefix=/usr \
131          --bindir=/usr/bin \
132          --sbindir=/usr/sbin \
133          --sysconfdir=/etc \
134          --datadir=/usr/share \
135          --includedir=/usr/include \
136          --libdir=/usr/lib \
137          --libexecdir=/usr/libexec \
138          --localstatedir=/var \
139          --sharedstatedir=/usr/com \
140          --mandir=/usr/share/man \
141          --infodir=/usr/share/info \
142    --prefix=/usr \
143    --libdir=/usr/lib/llvm \
144    --with-binutils-include=/usr/include \
145    --enable-targets=host \
146    --disable-assertions \
147    --enable-debug-runtime \
148    --enable-jit \
149    --enable-libffi \
150    --enable-shared
151  
152  # FIXME file this
153  # configure does not properly specify libdir
154  sed -i 's|(PROJ_prefix)/lib|(PROJ_prefix)/lib/llvm|g' Makefile.config
155  
156  # FIXME upstream need to fix this
157  # llvm-config.cpp hardcodes lib in it
158  sed -i 's|ActiveLibDir = ActivePrefix + "/lib"|ActiveLibDir = ActivePrefix + "/lib/llvm"|g' tools/llvm-config/llvm-config.cpp
159  
160  make -j16 REQUIRES_RTTI=1 VERBOSE=1  OPTIMIZE_OPTION="-O2 -fno-tree-pre -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables"
161  
162  exit 0
163  # the Koji build server does not seem to have enough RAM
164  # for the default 16 threads
165  
166  make check LIT_ARGS="-v -j4" \
167   
168  
169  # FIXME:
170  # unexpected failures on all platforms with GCC 4.7.0.
171  # capture logs
172  make -C tools/clang/test TESTARGS="-v -j4" \
173       | tee clang-testlog-x86_64.txt
174  
175  
176  
177 }
178
179 do_install() {
180  echo export RPM_BUILD_ROOT=${D}
181  LANG=C
182  export LANG
183  unset DISPLAY
184  rm -rf ${D} 
185  mkdir -p ${D} 
186  
187  make install DESTDIR=${D} \
188       PROJ_docsdir=/moredocs
189  
190  # multilib fixes
191  mv ${D}/usr/bin/llvm-config{,-64}
192  
193  pushd ${D}/usr/include/llvm/Config
194  mv config.h config-64.h
195  cp -p ${S}/packaging/llvm-Config-config.h config.h
196  mv llvm-config.h llvm-config-64.h
197  cp -p ${S}/packaging/llvm-Config-llvm-config.h llvm-config.h
198  popd
199  
200  # Create ld.so.conf.d entry
201  mkdir -p ${D}/etc/ld.so.conf.d
202  cat >> ${D}/etc/ld.so.conf.d/llvm-x86_64.conf << EOF
203  /usr/lib/llvm
204  EOF
205  
206  # Static analyzer not installed by default:
207  # http://clang-analyzer.llvm.org/installation#OtherPlatforms
208  mkdir -p ${D}/usr/lib/clang-analyzer
209  # create launchers
210  for f in scan-{build,view}; do
211    ln -s /usr/lib/clang-analyzer/$f/$f ${D}/usr/bin/$f
212  done
213  
214  (cd tools/clang/tools && cp -pr scan-{build,view} \
215   ${D}/usr/lib/clang-analyzer/)
216  
217  # Move documentation back to build directory
218  # 
219  mv ${D}/moredocs .
220  rm -f moredocs/*.tar.gz
221  rm -f moredocs/ocamldoc/html/*.tar.gz
222  
223  # and separate the apidoc
224  
225  # And prepare Clang documentation
226  #
227  mkdir clang-docs
228  for f in LICENSE.TXT NOTES.txt README.txt; do # TODO.txt; do
229    ln tools/clang/$f clang-docs/
230  done
231  rm -rf tools/clang/docs/{doxygen*,Makefile*,*.graffle,tools}
232  
233  
234  file ${D}//usr/bin/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
235  file ${D}//usr/lib/llvm/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
236  #chrpath -d %{buildroot}/%{_libexecdir}/clang-cc
237  
238  # Get rid of erroneously installed example files.
239  rm ${D}/usr/lib/llvm/*LLVMHello.*
240  
241  # FIXME file this bug
242  sed -i 's,ABS_RUN_DIR/lib",ABS_RUN_DIR/lib/llvm",' \
243    ${D}/usr/bin/llvm-config-64
244  
245  chmod -x ${D}/usr/lib/llvm/*.a
246  
247  # remove documentation makefiles:
248  # they require the build directory to work
249  find examples -name 'Makefile' | xargs -0r rm -f
250  
251  
252  cd $RPM_BUILD_DIR
253  
254  
255    rm -rf ${D}/usr/share/info 
256    rm -rf ${D}/usr/share/doc/packages 
257    rm -rf ${D}/usr/share/doc/llvm 
258    rm -rf ${D}/usr/share/doc/llvm-3.1 
259    rm -rf ${D}/usr/share/gtk-doc 
260    rm -rf ${D}/usr/share/doc 
261    rm -rf ${D}/usr/share/man 
262    find ${D} -regex ".*/man/man./.*.[0-9]" | xargs rm -f -- 
263    find ${D} -regex ".*/man/../man./.*.[0-9]" | xargs rm -f -- 
264    find ${D} -regex ".*/man/man./.*.[0-9]pm" | xargs rm -f --
265  
266  
267  
268 }
269
270 PACKAGES = ""
271 PACKAGES += "libllvm"
272 PACKAGES += "llvm"
273 PACKAGES += "clang-analyzer"
274 PACKAGES += "llvm-devel"
275 PACKAGES += "clang-devel"
276 PACKAGES += "clang"
277
278 libllvm_files = ""
279 libllvm_files += "llvm.manifest"
280 libllvm_files += "/etc/ld.so.conf.d/llvm-x86_64.conf"
281 libllvm_files += "/usr/lib/llvm"
282 libllvm_files += "/usr/lib/llvm/*.so"
283
284 llvm_files = ""
285 llvm_files += "llvm.manifest"
286 llvm_files += "/usr/bin/bugpoint"
287 llvm_files += "/usr/bin/llc"
288 llvm_files += "/usr/bin/lli"
289 llvm_files += "/usr/bin/llvm*"
290 llvm_files += "/usr/bin/macho-dump"
291 llvm_files += "/usr/bin/opt"
292
293 clang-analyzer_files = ""
294 clang-analyzer_files += "llvm.manifest"
295 clang-analyzer_files += "/usr/bin/scan-build"
296 clang-analyzer_files += "/usr/bin/scan-view"
297 clang-analyzer_files += "/usr/lib/clang-analyzer"
298
299 llvm-devel_files = ""
300 llvm-devel_files += "llvm.manifest"
301 llvm-devel_files += "/usr/bin/llvm-config-64"
302 llvm-devel_files += "/usr/include/llvm"
303 llvm-devel_files += "/usr/include/llvm-c"
304 llvm-devel_files += "/usr/lib/llvm/*.a"
305
306 clang-devel_files = ""
307 clang-devel_files += "llvm.manifest"
308 clang-devel_files += "/usr/include/clang"
309 clang-devel_files += "/usr/include/clang-c"
310
311 clang_files = ""
312 clang_files += "llvm.manifest"
313 clang_files += "/usr/bin/clang*"
314 clang_files += "/usr/bin/c-index-test"
315 clang_files += "/usr/lib/llvm/libclang.so"
316 clang_files += "/usr/lib/clang"
317
318 FILES_lib${PN} = "${libllvm_files}"
319 FILES_${PN} = "${llvm_files}"
320 FILES_clang-analyzer = "${clang-analyzer_files}"
321 FILES_${PN}-devel = "${llvm-devel_files}"
322 FILES_clang-devel = "${clang-devel_files}"
323 FILES_clang = "${clang_files}"
324
325 PKG_libllvm= "libllvm"
326 PKG_llvm= "llvm"
327 PKG_clang-analyzer= "clang-analyzer"
328 PKG_llvm-devel= "llvm-devel"
329 PKG_clang-devel= "clang-devel"
330 PKG_clang= "clang"
331
332 require llvm-extraconf.inc