xref: /OK3568_Linux_fs/yocto/meta-clang/recipes-devtools/clang/clang_git.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
2*4882a593Smuzhiyun# Released under the MIT license (see COPYING.MIT for the terms)
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunDESCRIPTION = "LLVM based C/C++ compiler"
5*4882a593SmuzhiyunHOMEPAGE = "http://clang.llvm.org/"
6*4882a593SmuzhiyunSECTION = "devel"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyunrequire clang.inc
9*4882a593Smuzhiyunrequire common-source.inc
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunINHIBIT_DEFAULT_DEPS = "1"
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunBUILD_CC:class-nativesdk = "clang"
14*4882a593SmuzhiyunBUILD_CXX:class-nativesdk = "clang++"
15*4882a593SmuzhiyunBUILD_AR:class-nativesdk = "llvm-ar"
16*4882a593SmuzhiyunBUILD_RANLIB:class-nativesdk = "llvm-ranlib"
17*4882a593SmuzhiyunBUILD_NM:class-nativesdk = "llvm-nm"
18*4882a593SmuzhiyunLDFLAGS:remove:class-nativesdk = "-fuse-ld=lld"
19*4882a593Smuzhiyun
20*4882a593Smuzhiyuninherit cmake cmake-native pkgconfig python3native
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunOECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
23*4882a593Smuzhiyun
24*4882a593Smuzhiyundef get_clang_experimental_arch(bb, d, arch_var):
25*4882a593Smuzhiyun    import re
26*4882a593Smuzhiyun    a = d.getVar(arch_var, True)
27*4882a593Smuzhiyun    return ""
28*4882a593Smuzhiyun
29*4882a593Smuzhiyundef get_clang_arch(bb, d, arch_var):
30*4882a593Smuzhiyun    import re
31*4882a593Smuzhiyun    a = d.getVar(arch_var, True)
32*4882a593Smuzhiyun    if   re.match('(i.86|athlon|x86.64)$', a):         return 'X86'
33*4882a593Smuzhiyun    elif re.match('arm$', a):                          return 'ARM'
34*4882a593Smuzhiyun    elif re.match('armeb$', a):                        return 'ARM'
35*4882a593Smuzhiyun    elif re.match('aarch64$', a):                      return 'AArch64'
36*4882a593Smuzhiyun    elif re.match('aarch64_be$', a):                   return 'AArch64'
37*4882a593Smuzhiyun    elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
38*4882a593Smuzhiyun    elif re.match('riscv32$', a):                      return 'riscv32'
39*4882a593Smuzhiyun    elif re.match('riscv64$', a):                      return 'riscv64'
40*4882a593Smuzhiyun    elif re.match('p(pc|owerpc)(|64)', a):             return 'PowerPC'
41*4882a593Smuzhiyun    else:
42*4882a593Smuzhiyun        bb.note("'%s' is not a primary llvm architecture" % a)
43*4882a593Smuzhiyun    return ""
44*4882a593Smuzhiyun
45*4882a593Smuzhiyundef get_clang_host_arch(bb, d):
46*4882a593Smuzhiyun    return get_clang_arch(bb, d, 'HOST_ARCH')
47*4882a593Smuzhiyun
48*4882a593Smuzhiyundef get_clang_target_arch(bb, d):
49*4882a593Smuzhiyun    return get_clang_arch(bb, d, 'TARGET_ARCH')
50*4882a593Smuzhiyun
51*4882a593Smuzhiyundef get_clang_experimental_target_arch(bb, d):
52*4882a593Smuzhiyun    return get_clang_experimental_arch(bb, d, 'TARGET_ARCH')
53*4882a593Smuzhiyun
54*4882a593SmuzhiyunPACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs lldb-wchar \
55*4882a593Smuzhiyun                   ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)} \
56*4882a593Smuzhiyun                   ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)} \
57*4882a593Smuzhiyun                   rtti eh libedit terminfo \
58*4882a593Smuzhiyun                   "
59*4882a593SmuzhiyunPACKAGECONFIG:class-native = "rtti eh libedit shared-libs ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)}"
60*4882a593SmuzhiyunPACKAGECONFIG:class-nativesdk = "rtti eh libedit shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)} ${@bb.utils.contains('RUNTIME', 'llvm', 'compiler-rt libcplusplus unwindlib libomp', '', d)}"
61*4882a593Smuzhiyun
62*4882a593SmuzhiyunPACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
63*4882a593SmuzhiyunPACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
64*4882a593SmuzhiyunPACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
65*4882a593SmuzhiyunPACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
66*4882a593SmuzhiyunPACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
67*4882a593SmuzhiyunPACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
68*4882a593SmuzhiyunPACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
69*4882a593SmuzhiyunPACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON -DCOMPILER_RT_TERMINFO_LIB=ON,-DLLVM_ENABLE_TERMINFO=OFF -DCOMPILER_RT_TERMINFO_LIB=OFF,ncurses,"
70*4882a593SmuzhiyunPACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
71*4882a593SmuzhiyunPACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0,"
72*4882a593SmuzhiyunPACKAGECONFIG[lldb-lua] = "-DLLDB_ENABLE_LUA=ON,-DLLDB_ENABLE_LUA=OFF,lua"
73*4882a593SmuzhiyunPACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
74*4882a593SmuzhiyunPACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,,"
75*4882a593SmuzhiyunPACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
76*4882a593SmuzhiyunPACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,,"
77*4882a593SmuzhiyunPACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF -DLLDB_ENABLE_LIBEDIT=OFF,libedit libedit-native"
78*4882a593Smuzhiyun
79*4882a593SmuzhiyunOECMAKE_SOURCEPATH = "${S}/llvm"
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunOECMAKE_TARGET_COMPILE = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2', 'all', d)}"
82*4882a593SmuzhiyunOECMAKE_TARGET_INSTALL = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2-install', 'install', d)}"
83*4882a593SmuzhiyunBINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins/NATIVE', '', d)}"
84*4882a593Smuzhiyun
85*4882a593SmuzhiyunPASSTHROUGH = "\
86*4882a593SmuzhiyunCLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\
87*4882a593SmuzhiyunLLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\
88*4882a593SmuzhiyunLLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\
89*4882a593SmuzhiyunLLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\
90*4882a593SmuzhiyunCMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_BINUTILS_INCDIR;\
91*4882a593SmuzhiyunLLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;PYTHON_EXECUTABLE;\
92*4882a593SmuzhiyunPYTHON_LIBRARY;PYTHON_INCLUDE_DIR;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;LLDB_EDITLINE_USE_WCHAR;\
93*4882a593SmuzhiyunLLVM_ENABLE_LIBEDIT;LLDB_ENABLE_LIBEDIT;LLDB_PYTHON_RELATIVE_PATH;LLDB_PYTHON_EXE_RELATIVE_PATH;\
94*4882a593SmuzhiyunLLDB_PYTHON_EXT_SUFFIX;CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\
95*4882a593SmuzhiyunCLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_UNWINDLIB;\
96*4882a593SmuzhiyunCLANG_DEFAULT_OPENMP_RUNTIME;\
97*4882a593Smuzhiyun"
98*4882a593Smuzhiyun#
99*4882a593Smuzhiyun# Default to build all OE-Core supported target arches (user overridable).
100*4882a593Smuzhiyun# Gennerally setting LLVM_TARGETS_TO_BUILD = "" in local.conf is ok in most simple situations
101*4882a593Smuzhiyun# where only one target architecture is needed along with just one build arch (usually X86)
102*4882a593Smuzhiyun#
103*4882a593SmuzhiyunLLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86"
104*4882a593Smuzhiyun
105*4882a593SmuzhiyunLLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
106*4882a593SmuzhiyunLLVM_EXPERIMENTAL_TARGETS_TO_BUILD:append = ";${@get_clang_experimental_target_arch(bb, d)}"
107*4882a593Smuzhiyun
108*4882a593SmuzhiyunHF = ""
109*4882a593SmuzhiyunHF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
110*4882a593SmuzhiyunHF[vardepvalue] = "${HF}"
111*4882a593Smuzhiyun
112*4882a593SmuzhiyunLLVM_PROJECTS ?= "clang;clang-tools-extra;lld${LLDB}"
113*4882a593SmuzhiyunLLDB ?= ";lldb"
114*4882a593Smuzhiyun# LLDB support for RISCV/Mips32 does not work yet
115*4882a593SmuzhiyunLLDB:riscv32 = ""
116*4882a593SmuzhiyunLLDB:riscv64 = ""
117*4882a593SmuzhiyunLLDB:mips = ""
118*4882a593SmuzhiyunLLDB:mipsel = ""
119*4882a593SmuzhiyunLLDB:powerpc = ""
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun# linux hosts (.so) on Windows .pyd
122*4882a593SmuzhiyunSOLIBSDEV:mingw32 = ".pyd"
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun#CMAKE_VERBOSE = "VERBOSE=1"
125*4882a593Smuzhiyun
126*4882a593SmuzhiyunEXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
127*4882a593Smuzhiyun                  -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
128*4882a593Smuzhiyun                  -DLLVM_ENABLE_PIC=ON \
129*4882a593Smuzhiyun                  -DCLANG_DEFAULT_PIE_ON_LINUX=ON \
130*4882a593Smuzhiyun                  -DLLVM_BINDINGS_LIST='' \
131*4882a593Smuzhiyun                  -DLLVM_ENABLE_FFI=ON \
132*4882a593Smuzhiyun                  -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
133*4882a593Smuzhiyun                  -DLLVM_OPTIMIZED_TABLEGEN=ON \
134*4882a593Smuzhiyun                  -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
135*4882a593Smuzhiyun                  -DCMAKE_SYSTEM_NAME=Linux \
136*4882a593Smuzhiyun                  -DCMAKE_BUILD_TYPE=Release \
137*4882a593Smuzhiyun                  -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
138*4882a593Smuzhiyun                  -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
139*4882a593Smuzhiyun                  -DBUILD_SHARED_LIBS=OFF \
140*4882a593Smuzhiyun                  -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
141*4882a593Smuzhiyun                  -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
142*4882a593Smuzhiyun                  -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
143*4882a593Smuzhiyun                  -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
144*4882a593Smuzhiyun                  -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
145*4882a593Smuzhiyun"
146*4882a593Smuzhiyun
147*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-native = "\
148*4882a593Smuzhiyun                  -DPYTHON_EXECUTABLE='${PYTHON}' \
149*4882a593Smuzhiyun"
150*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-nativesdk = "\
151*4882a593Smuzhiyun                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
152*4882a593Smuzhiyun                  -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
153*4882a593Smuzhiyun                                                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON} \
154*4882a593Smuzhiyun                                                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
155*4882a593Smuzhiyun                                                  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
156*4882a593Smuzhiyun                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
157*4882a593Smuzhiyun                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
158*4882a593Smuzhiyun                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
159*4882a593Smuzhiyun                  -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
160*4882a593Smuzhiyun                  -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
161*4882a593Smuzhiyun                  -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
162*4882a593Smuzhiyun                  -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
163*4882a593Smuzhiyun                  -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
164*4882a593Smuzhiyun                  -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
165*4882a593Smuzhiyun                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON} \
166*4882a593Smuzhiyun                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
167*4882a593Smuzhiyun                  -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
168*4882a593Smuzhiyun                  -DPYTHON_EXECUTABLE='${PYTHON}' \
169*4882a593Smuzhiyun"
170*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-target = "\
171*4882a593Smuzhiyun                  -DCMAKE_CROSSCOMPILING:BOOL=ON \
172*4882a593Smuzhiyun                  -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
173*4882a593Smuzhiyun                                                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
174*4882a593Smuzhiyun                                                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON}' \
175*4882a593Smuzhiyun                  -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
176*4882a593Smuzhiyun                  -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
177*4882a593Smuzhiyun                  -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
178*4882a593Smuzhiyun                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
179*4882a593Smuzhiyun                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
180*4882a593Smuzhiyun                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
181*4882a593Smuzhiyun                  -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
182*4882a593Smuzhiyun                  -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \
183*4882a593Smuzhiyun                  -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
184*4882a593Smuzhiyun                  -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
185*4882a593Smuzhiyun                  -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
186*4882a593Smuzhiyun                  -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON} \
187*4882a593Smuzhiyun                  -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
188*4882a593Smuzhiyun                  -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
189*4882a593Smuzhiyun                  -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
190*4882a593Smuzhiyun                  -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
191*4882a593Smuzhiyun                  -DPYTHON_EXECUTABLE='${PYTHON}' \
192*4882a593Smuzhiyun"
193*4882a593Smuzhiyun
194*4882a593SmuzhiyunDEPENDS = "binutils zlib libffi libxml2 libxml2-native ninja-native swig-native"
195*4882a593SmuzhiyunDEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk nativesdk-python3"
196*4882a593SmuzhiyunDEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 compiler-rt libcxx"
197*4882a593Smuzhiyun
198*4882a593SmuzhiyunRRECOMMENDS:${PN} = "binutils"
199*4882a593SmuzhiyunRRECOMMENDS:${PN}:append:class-target = " libcxx-dev"
200*4882a593Smuzhiyun
201*4882a593Smuzhiyundo_install:append() {
202*4882a593Smuzhiyun    rm -rf ${D}${libdir}/python*/site-packages/six.py
203*4882a593Smuzhiyun}
204*4882a593Smuzhiyun
205*4882a593Smuzhiyundo_install:append:class-target () {
206*4882a593Smuzhiyun    # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH
207*4882a593Smuzhiyun    sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
208*4882a593Smuzhiyun
209*4882a593Smuzhiyun    # Insert function to populate Import Variables
210*4882a593Smuzhiyun    sed -i "4i\
211*4882a593Smuzhiyunif(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\
212*4882a593Smuzhiyun  execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\
213*4882a593Smuzhiyunelse()\n\
214*4882a593Smuzhiyun  set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\
215*4882a593Smuzhiyunendif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun    if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
218*4882a593Smuzhiyun        mkdir -p ${D}${nonarch_libdir}
219*4882a593Smuzhiyun        mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
220*4882a593Smuzhiyun        ln -rs ${D}${nonarch_libdir}/clang ${D}${libdir}/clang
221*4882a593Smuzhiyun        rmdir --ignore-fail-on-non-empty ${D}${libdir}
222*4882a593Smuzhiyun    fi
223*4882a593Smuzhiyun    for t in clang clang++ llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
224*4882a593Smuzhiyun        llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
225*4882a593Smuzhiyun        ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
226*4882a593Smuzhiyun    done
227*4882a593Smuzhiyun}
228*4882a593Smuzhiyun
229*4882a593Smuzhiyundo_install:append:class-native () {
230*4882a593Smuzhiyun    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
231*4882a593Smuzhiyun    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
232*4882a593Smuzhiyun    for f in `find ${D}${bindir} -executable -type f -not -type l`; do
233*4882a593Smuzhiyun        test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
234*4882a593Smuzhiyun        echo "stripped $f"
235*4882a593Smuzhiyun    done
236*4882a593Smuzhiyun    ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
237*4882a593Smuzhiyun    ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
238*4882a593Smuzhiyun    ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
239*4882a593Smuzhiyun}
240*4882a593Smuzhiyun
241*4882a593Smuzhiyundo_install:append:class-nativesdk () {
242*4882a593Smuzhiyun    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
243*4882a593Smuzhiyun    install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
244*4882a593Smuzhiyun    for f in `find ${D}${bindir} -executable -type f -not -type l`; do
245*4882a593Smuzhiyun        test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
246*4882a593Smuzhiyun    done
247*4882a593Smuzhiyun    ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
248*4882a593Smuzhiyun    ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
249*4882a593Smuzhiyun    ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
250*4882a593Smuzhiyun    rm -rf ${D}${datadir}/llvm/cmake
251*4882a593Smuzhiyun    rm -rf ${D}${datadir}/llvm
252*4882a593Smuzhiyun}
253*4882a593Smuzhiyun
254*4882a593SmuzhiyunPACKAGES =+ "${PN}-libllvm ${PN}-lldb-python libclang lldb lldb-server liblldb"
255*4882a593Smuzhiyun
256*4882a593SmuzhiyunPROVIDES += "llvm llvm${PV}"
257*4882a593SmuzhiyunPROVIDES:append:class-native = " llvm-native"
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk"
260*4882a593Smuzhiyun
261*4882a593SmuzhiyunRDEPENDS:lldb += "${PN}-lldb-python"
262*4882a593Smuzhiyun
263*4882a593SmuzhiyunFILES:${PN}-lldb-python = "${libdir}/python*/site-packages/lldb/*"
264*4882a593Smuzhiyun
265*4882a593SmuzhiyunFILES:${PN} += "\
266*4882a593Smuzhiyun  ${libdir}/BugpointPasses.so \
267*4882a593Smuzhiyun  ${libdir}/LLVMHello.so \
268*4882a593Smuzhiyun  ${libdir}/LLVMgold.so \
269*4882a593Smuzhiyun  ${libdir}/*Plugin.so \
270*4882a593Smuzhiyun  ${libdir}/${BPN} \
271*4882a593Smuzhiyun  ${nonarch_libdir}/${BPN}/*/include/ \
272*4882a593Smuzhiyun  ${datadir}/scan-* \
273*4882a593Smuzhiyun  ${nonarch_libdir}/libscanbuild \
274*4882a593Smuzhiyun  ${datadir}/opt-viewer/ \
275*4882a593Smuzhiyun"
276*4882a593Smuzhiyun
277*4882a593SmuzhiyunFILES:lldb = "\
278*4882a593Smuzhiyun  ${bindir}/lldb \
279*4882a593Smuzhiyun"
280*4882a593Smuzhiyun
281*4882a593SmuzhiyunFILES:lldb-server = "\
282*4882a593Smuzhiyun  ${bindir}/lldb-server \
283*4882a593Smuzhiyun"
284*4882a593Smuzhiyun
285*4882a593SmuzhiyunFILES:liblldb = "\
286*4882a593Smuzhiyun  ${libdir}/liblldbIntelFeatures.so* \
287*4882a593Smuzhiyun  ${libdir}/liblldb.so* \
288*4882a593Smuzhiyun"
289*4882a593Smuzhiyun
290*4882a593SmuzhiyunFILES:${PN}-libllvm =+ "\
291*4882a593Smuzhiyun  ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}.so \
292*4882a593Smuzhiyun  ${libdir}/libLLVM-${MAJOR_VER}.so \
293*4882a593Smuzhiyun  ${libdir}/libLLVM-${MAJOR_VER}git.so \
294*4882a593Smuzhiyun  ${libdir}/libLLVM-${MAJOR_VER}.${MINOR_VER}git.so \
295*4882a593Smuzhiyun"
296*4882a593Smuzhiyun
297*4882a593SmuzhiyunFILES:libclang = "\
298*4882a593Smuzhiyun  ${libdir}/libclang.so.${MAJOR_VER} \
299*4882a593Smuzhiyun"
300*4882a593Smuzhiyun
301*4882a593SmuzhiyunFILES:${PN}-dev += "\
302*4882a593Smuzhiyun  ${datadir}/llvm/cmake \
303*4882a593Smuzhiyun  ${libdir}/cmake \
304*4882a593Smuzhiyun  ${nonarch_libdir}/libear \
305*4882a593Smuzhiyun  ${nonarch_libdir}/${BPN}/*.la \
306*4882a593Smuzhiyun"
307*4882a593Smuzhiyun
308*4882a593SmuzhiyunFILES:${PN}-staticdev += "${nonarch_libdir}/${BPN}/*.a"
309*4882a593Smuzhiyun
310*4882a593SmuzhiyunFILES:${PN}-staticdev:remove = "${libdir}/${BPN}/*.a"
311*4882a593SmuzhiyunFILES:${PN}-dev:remove = "${libdir}/${BPN}/*.la"
312*4882a593SmuzhiyunFILES:${PN}:remove = "${libdir}/${BPN}/*"
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun
315*4882a593SmuzhiyunINSANE_SKIP:${PN} += "already-stripped"
316*4882a593Smuzhiyun#INSANE_SKIP:${PN}-dev += "dev-elf"
317*4882a593SmuzhiyunINSANE_SKIP:${PN}-lldb-python += "dev-so dev-deps"
318*4882a593SmuzhiyunINSANE_SKIP:liblldb = "dev-so"
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
321*4882a593SmuzhiyunSSTATE_SCAN_FILES:remove = "*-config"
322*4882a593Smuzhiyun
323*4882a593SmuzhiyunTOOLCHAIN = "clang"
324*4882a593SmuzhiyunTOOLCHAIN:class-native = "gcc"
325*4882a593SmuzhiyunTOOLCHAIN:class-nativesdk = "clang"
326*4882a593SmuzhiyunCOMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm = "-rtlib=libgcc --unwindlib=libgcc"
327*4882a593SmuzhiyunLIBCPLUSPLUS:class-nativesdk:toolchain-clang:runtime-llvm = "-stdlib=libstdc++"
328*4882a593Smuzhiyun
329*4882a593SmuzhiyunSYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"
330*4882a593Smuzhiyun
331*4882a593SmuzhiyunSYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
332*4882a593Smuzhiyun
333*4882a593Smuzhiyunclang_sysroot_preprocess() {
334*4882a593Smuzhiyun	install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
335*4882a593Smuzhiyun	install -m 0755 ${S}/../llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
336*4882a593Smuzhiyun	ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
337*4882a593Smuzhiyun	# LLDTargets.cmake references the lld executable(!) that some modules/plugins link to
338*4882a593Smuzhiyun	install -d ${SYSROOT_DESTDIR}${bindir}
339*4882a593Smuzhiyun	install -m 755 ${D}${bindir}/lld ${SYSROOT_DESTDIR}${bindir}/
340*4882a593Smuzhiyun}
341