[Buildroot] [PATCH v6 1/4] package/clang: new package
Valentin Korenblit
valentin.korenblit at smile.fr
Mon Apr 30 07:20:44 UTC 2018
Hi Thomas,
On 28/04/2018 14:51, Thomas Petazzoni wrote:
> Hello Valentin,
>
> On Wed, 11 Apr 2018 18:14:49 +0200, Valentin Korenblit wrote:
>> This patch provides Clang tools and libraries for the host and libclang
>> for the target.
>>
>> host-clang is needed to build libclc, which is also provided in a follup patch.
>>
>> We need libclang for the target because it is used by most of OpenCL implementations.
>>
>> A later patch in this series will enable Clover, the OpenCl implementation part
>> of Mesa3D, which requires libclang.
>>
>> clang-tblgen must be copied to HOST_DIR as it is not installed by default but is needed
>> for cross-compilation: http://lists.llvm.org/pipermail/cfe-dev/2015-June/043318.html
>>
>> Signed-off-by: Valentin Korenblit <valentin.korenblit at smile.fr>
>> ---
>> DEVELOPERS | 1 +
>> package/Config.in | 1 +
>> package/clang/Config.in | 22 +++++++++++++++
>> package/clang/clang.hash | 3 ++
>> package/clang/clang.mk | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
>> 5 files changed, 99 insertions(+)
>> create mode 100644 package/clang/Config.in
>> create mode 100644 package/clang/clang.hash
>> create mode 100644 package/clang/clang.mk
> I've applied to master, after doing the following changes:
>
> [Thomas:
> - Add Config.in comment about BR2_TOOLCHAIN_HAS_GCC_BUG_64735
> - Minor reformatting/rewrapping of comments in .mk file]
>
> However, I've noticed that a lot of stuff gets installed in the target,
> which doesn't seem very useful (see below). At least the heders
> in /usr/lib/clang don't see very useful. There's a bunch of Python
> script and Javascript files as well. Do you think some of these could
> be removed, perhaps through post-install target hooks ?
I'll check this today, I think the binaries and scripts shouldn't be necessary,
but I am not completely sure about the includes when using OpenCL. I will test what
happens at runtime.
>
> `-- usr
> |-- bin
> | |-- c-index-test
> | |-- git-clang-format
> | |-- scan-build
> | `-- scan-view
> |-- lib
> | |-- LLVMHello.so
> | |-- clang
> | | `-- 5.0.1
> | | `-- include
> | | |-- __clang_cuda_builtin_vars.h
> | | |-- __clang_cuda_cmath.h
> | | |-- __clang_cuda_complex_builtins.h
> | | |-- __clang_cuda_intrinsics.h
> | | |-- __clang_cuda_math_forward_declares.h
> | | |-- __clang_cuda_runtime_wrapper.h
> | | |-- __stddef_max_align_t.h
> | | |-- __wmmintrin_aes.h
> | | |-- __wmmintrin_pclmul.h
> | | |-- adxintrin.h
> | | |-- altivec.h
> | | |-- ammintrin.h
> | | |-- arm_acle.h
> | | |-- arm_neon.h
> | | |-- armintr.h
> | | |-- avx2intrin.h
> | | |-- avx512bwintrin.h
> | | |-- avx512cdintrin.h
> | | |-- avx512dqintrin.h
> | | |-- avx512erintrin.h
> | | |-- avx512fintrin.h
> | | |-- avx512ifmaintrin.h
> | | |-- avx512ifmavlintrin.h
> | | |-- avx512pfintrin.h
> | | |-- avx512vbmiintrin.h
> | | |-- avx512vbmivlintrin.h
> | | |-- avx512vlbwintrin.h
> | | |-- avx512vlcdintrin.h
> | | |-- avx512vldqintrin.h
> | | |-- avx512vlintrin.h
> | | |-- avx512vpopcntdqintrin.h
> | | |-- avxintrin.h
> | | |-- bmi2intrin.h
> | | |-- bmiintrin.h
> | | |-- clflushoptintrin.h
> | | |-- clzerointrin.h
> | | |-- cpuid.h
> | | |-- cuda_wrappers
> | | | |-- algorithm
> | | | |-- complex
> | | | `-- new
> | | |-- emmintrin.h
> | | |-- f16cintrin.h
> | | |-- float.h
> | | |-- fma4intrin.h
> | | |-- fmaintrin.h
> | | |-- fxsrintrin.h
> | | |-- htmintrin.h
> | | |-- htmxlintrin.h
> | | |-- ia32intrin.h
> | | |-- immintrin.h
> | | |-- intrin.h
> | | |-- inttypes.h
> | | |-- iso646.h
> | | |-- limits.h
> | | |-- lwpintrin.h
> | | |-- lzcntintrin.h
> | | |-- mm3dnow.h
> | | |-- mm_malloc.h
> | | |-- mmintrin.h
> | | |-- module.modulemap
> | | |-- msa.h
> | | |-- mwaitxintrin.h
> | | |-- nmmintrin.h
> | | |-- opencl-c.h
> | | |-- pkuintrin.h
> | | |-- pmmintrin.h
> | | |-- popcntintrin.h
> | | |-- prfchwintrin.h
> | | |-- rdseedintrin.h
> | | |-- rtmintrin.h
> | | |-- s390intrin.h
> | | |-- shaintrin.h
> | | |-- smmintrin.h
> | | |-- stdalign.h
> | | |-- stdarg.h
> | | |-- stdatomic.h
> | | |-- stdbool.h
> | | |-- stddef.h
> | | |-- stdint.h
> | | |-- stdnoreturn.h
> | | |-- tbmintrin.h
> | | |-- tgmath.h
> | | |-- tmmintrin.h
> | | |-- unwind.h
> | | |-- vadefs.h
> | | |-- varargs.h
> | | |-- vecintrin.h
> | | |-- wmmintrin.h
> | | |-- x86intrin.h
> | | |-- xmmintrin.h
> | | |-- xopintrin.h
> | | |-- xsavecintrin.h
> | | |-- xsaveintrin.h
> | | |-- xsaveoptintrin.h
> | | |-- xsavesintrin.h
> | | `-- xtestintrin.h
> | |-- libLLVM-5.0.1.so -> libLLVM-5.0.so
> | |-- libLLVM-5.0.so
> | |-- libLLVM.so -> libLLVM-5.0.so
> | |-- libLTO.so -> libLTO.so.5
> | |-- libLTO.so.5 -> libLTO.so.5.0.1
> | |-- libLTO.so.5.0.1
> | |-- libclang.so -> libclang.so.5
> | |-- libclang.so.5 -> libclang.so.5.0
> | |-- libclang.so.5.0
> | |-- libstdc++.so.6 -> libstdc++.so.6.0.22
> | |-- libstdc++.so.6.0.22
> | |-- libstdc++.so.6.0.22-gdb.py
> | `-- os-release
> |-- lib64 -> lib
> |-- libexec
> | |-- c++-analyzer
> | `-- ccc-analyzer
> |-- sbin
> `-- share
> |-- clang
> | |-- bash-autocomplete.sh
> | |-- clang-format-bbedit.applescript
> | |-- clang-format-diff.py
> | |-- clang-format-sublime.py
> | |-- clang-format.el
> | |-- clang-format.py
> | |-- clang-rename.el
> | `-- clang-rename.py
> |-- opt-viewer
> | |-- opt-diff.py
> | |-- opt-stats.py
> | |-- opt-viewer.py
> | |-- optpmap.py
> | |-- optrecord.py
> | `-- style.css
> |-- scan-build
> | |-- scanview.css
> | `-- sorttable.js
> `-- scan-view
> |-- FileRadar.scpt
> |-- GetRadarVersion.scpt
> |-- Reporter.py
> |-- ScanView.py
> |-- bugcatcher.ico
> `-- startfile.py
>
> Also, I must say I was impressed by the size of the libLLVM and
> libclang libraries. libLLVM is 23MB, while libclang is 22MB. What seems
> weird however is that libclang is not linked against libLLVM:
>
> $ readelf -d libclang.so.5.0
>
> Dynamic section at offset 0x15ebbd0 contains 31 entries:
> Tag Type Name/Value
> 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
> 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
> 0x0000000000000001 (NEEDED) Shared library: [libc.so.0]
> 0x0000000000000001 (NEEDED) Shared library: [ld64-uClibc.so.1]
> 0x000000000000000e (SONAME) Library soname: [libclang.so.5]
> 0x000000000000001d (RUNPATH) Library runpath: []
>
> Is libclang statically linked against libLLVM, causing a huge
> duplication of code size ?
>
> Looking at the build output of libclang, it indeed seems like it uses
> the .a libraries from LLVM, and not the dynamic library. So the LLVM
> code is present twice: once in libLLVM.so, and a second time in
> libclang.so. This isn't nice at all. Could you look into this ?
Yes, I've just checked with nm that functions are duplicated. I'll try to
fix this.
> I've pasted the command line used by the clang package to produce its
> libclang.so library at http://code.bulix.org/li1n6r-325499?raw. You can
> see it uses the LLVM .a files directly.
>
> My defconfig was:
>
> BR2_x86_64=y
> BR2_x86_core2=y
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
> BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-x86-64-core2-full-2018.02-891-g046c5e2.tar.bz2"
> BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
> BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_16=y
> BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
> # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
> BR2_TOOLCHAIN_EXTERNAL_CXX=y
> BR2_INIT_NONE=y
> BR2_SYSTEM_BIN_SH_NONE=y
> # BR2_PACKAGE_BUSYBOX is not set
> BR2_PACKAGE_CLANG=y
> # BR2_TARGET_ROOTFS_TAR is not set
>
> Thanks!
>
> Thomas
Best regards,
Valentin
More information about the buildroot
mailing list