xref: /OK3568_Linux_fs/yocto/meta-clang/recipes-devtools/clang/libcxx_git.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
2*4882a593Smuzhiyun# Released under the MIT license (see COPYING.MIT for the terms)
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunDESCRIPTION = "libc++ is a new implementation of the C++ standard library, targeting C++11"
5*4882a593SmuzhiyunHOMEPAGE = "http://libcxx.llvm.org/"
6*4882a593SmuzhiyunSECTION = "base"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyunrequire clang.inc
9*4882a593Smuzhiyunrequire common-source.inc
10*4882a593Smuzhiyun
11*4882a593Smuzhiyuninherit cmake cmake-native python3native
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunPACKAGECONFIG ??= "compiler-rt exceptions ${@bb.utils.contains("RUNTIME", "llvm", "unwind unwind-shared", "", d)}"
14*4882a593SmuzhiyunPACKAGECONFIG:append:armv5 = " no-atomics"
15*4882a593SmuzhiyunPACKAGECONFIG:remove:class-native = "compiler-rt"
16*4882a593SmuzhiyunPACKAGECONFIG[unwind] = "-DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON,-DLIBCXXABI_USE_LLVM_UNWINDER=OFF,,"
17*4882a593SmuzhiyunPACKAGECONFIG[exceptions] = "-DLIBCXXABI_ENABLE_EXCEPTIONS=ON -DDLIBCXX_ENABLE_EXCEPTIONS=ON,-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF -DLIBCXX_ENABLE_EXCEPTIONS=OFF -DCMAKE_REQUIRED_FLAGS='-fno-exceptions',"
18*4882a593SmuzhiyunPACKAGECONFIG[no-atomics] = "-D_LIBCXXABI_HAS_ATOMIC_BUILTINS=OFF -DCMAKE_SHARED_LINKER_FLAGS='-latomic',,"
19*4882a593SmuzhiyunPACKAGECONFIG[compiler-rt] = "-DLIBCXX_USE_COMPILER_RT=ON -DLIBCXXABI_USE_COMPILER_RT=ON -DLIBUNWIND_USE_COMPILER_RT=ON,,compiler-rt"
20*4882a593SmuzhiyunPACKAGECONFIG[unwind-shared] = "-DLIBUNWIND_ENABLE_SHARED=ON,-DLIBUNWIND_ENABLE_SHARED=OFF,,"
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunDEPENDS += "ninja-native"
23*4882a593SmuzhiyunDEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} virtual/${MLPREFIX}libc virtual/${TARGET_PREFIX}compilerlibs"
24*4882a593SmuzhiyunDEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_ARCH} nativesdk-compiler-rt"
25*4882a593SmuzhiyunDEPENDS:append:class-native = " clang-native"
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunLIBCPLUSPLUS = ""
28*4882a593SmuzhiyunCOMPILER_RT ?= "-rtlib=compiler-rt"
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun# Trick clang.bbclass into not creating circular dependencies
31*4882a593SmuzhiyunUNWINDLIB:class-nativesdk = "--unwindlib=libgcc"
32*4882a593SmuzhiyunCOMPILER_RT:class-nativesdk = "-rtlib=libgcc --unwindlib=libgcc"
33*4882a593SmuzhiyunLIBCPLUSPLUS:class-nativesdk = "-stdlib=libstdc++"
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunCC:append:toolchain-clang:class-native = " -unwindlib=libgcc -rtlib=libgcc"
36*4882a593SmuzhiyunCC:append:toolchain-clang:class-nativesdk = " -unwindlib=libgcc -rtlib=libgcc"
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunCXXFLAGS += "-stdlib=libstdc++"
39*4882a593SmuzhiyunLDFLAGS += "-unwindlib=libgcc -stdlib=libstdc++"
40*4882a593SmuzhiyunBUILD_CXXFLAGS += "-stdlib=libstdc++"
41*4882a593SmuzhiyunBUILD_LDFLAGS += "-unwindlib=libgcc -rtlib=libgcc -stdlib=libstdc++"
42*4882a593SmuzhiyunBUILD_CPPFLAGS:remove = "-stdlib=libc++"
43*4882a593SmuzhiyunBUILD_LDFLAGS:remove = "-stdlib=libc++ -lc++abi"
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunINHIBIT_DEFAULT_DEPS = "1"
46*4882a593Smuzhiyun
47*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://libcxx/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \
48*4882a593Smuzhiyun                    file://libcxxabi/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \
49*4882a593Smuzhiyun                    file://libunwind/LICENSE.TXT;md5=f66970035d12f196030658b11725e1a1 \
50*4882a593Smuzhiyun"
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunOECMAKE_TARGET_COMPILE = "cxxabi cxx"
53*4882a593SmuzhiyunOECMAKE_TARGET_INSTALL = "install-cxx install-cxxabi ${@bb.utils.contains("RUNTIME", "llvm", "install-unwind", "", d)}"
54*4882a593Smuzhiyun
55*4882a593SmuzhiyunOECMAKE_SOURCEPATH = "${S}/llvm"
56*4882a593SmuzhiyunEXTRA_OECMAKE += "\
57*4882a593Smuzhiyun                  -DCMAKE_CROSSCOMPILING=ON \
58*4882a593Smuzhiyun                  -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
59*4882a593Smuzhiyun                  -DLLVM_ENABLE_RTTI=ON \
60*4882a593Smuzhiyun                  -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON \
61*4882a593Smuzhiyun                  -DLIBCXXABI_INCLUDE_TESTS=OFF \
62*4882a593Smuzhiyun                  -DLIBCXXABI_ENABLE_SHARED=ON \
63*4882a593Smuzhiyun                  -DLIBCXXABI_LIBCXX_INCLUDES=${S}/libcxx/include \
64*4882a593Smuzhiyun                  -DLIBCXX_CXX_ABI=libcxxabi \
65*4882a593Smuzhiyun                  -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${S}/libcxxabi/include \
66*4882a593Smuzhiyun                  -DLIBCXX_CXX_ABI_LIBRARY_PATH=${B}/lib${LLVM_LIBDIR_SUFFIX} \
67*4882a593Smuzhiyun                  -DLLVM_ENABLE_PROJECTS='libcxx;libcxxabi;libunwind' \
68*4882a593Smuzhiyun                  -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
69*4882a593Smuzhiyun                  -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
70*4882a593Smuzhiyun"
71*4882a593Smuzhiyun
72*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-target = " \
73*4882a593Smuzhiyun                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \
74*4882a593Smuzhiyun                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \
75*4882a593Smuzhiyun                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
76*4882a593Smuzhiyun                  -DLLVM_DEFAULT_TARGET_TRIPLE=${HOST_SYS} \
77*4882a593Smuzhiyun"
78*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-native = " -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF \
79*4882a593Smuzhiyun"
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunEXTRA_OECMAKE:append:class-nativesdk = " -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF \
82*4882a593Smuzhiyun                  -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${AR} \
83*4882a593Smuzhiyun                  -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${NM} \
84*4882a593Smuzhiyun                  -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
85*4882a593Smuzhiyun                  -DLLVM_DEFAULT_TARGET_TRIPLE=${HOST_SYS} \
86*4882a593Smuzhiyun"
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunEXTRA_OECMAKE:append:libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON "
89*4882a593Smuzhiyun
90*4882a593SmuzhiyunCXXFLAGS:append:armv5 = " -mfpu=vfp2"
91*4882a593Smuzhiyun
92*4882a593SmuzhiyunALLOW_EMPTY:${PN} = "1"
93*4882a593Smuzhiyun
94*4882a593SmuzhiyunPROVIDES:append:runtime-llvm = " libunwind"
95*4882a593Smuzhiyun
96*4882a593Smuzhiyundo_install:append() {
97*4882a593Smuzhiyun    if ${@bb.utils.contains("RUNTIME", "llvm", "true", "false", d)}
98*4882a593Smuzhiyun    then
99*4882a593Smuzhiyun        for f in libunwind.h __libunwind_config.h unwind.h unwind_itanium.h unwind_arm_ehabi.h
100*4882a593Smuzhiyun        do
101*4882a593Smuzhiyun            install -Dm 0644 ${S}/libunwind/include/$f ${D}${includedir}/$f
102*4882a593Smuzhiyun        done
103*4882a593Smuzhiyun        install -d ${D}${libdir}/pkgconfig
104*4882a593Smuzhiyun        sed -e 's,@LIBDIR@,${libdir},g;s,@VERSION@,${PV},g' ${S}/../libunwind.pc.in > ${D}${libdir}/pkgconfig/libunwind.pc
105*4882a593Smuzhiyun    fi
106*4882a593Smuzhiyun}
107*4882a593Smuzhiyun
108*4882a593SmuzhiyunPACKAGES:append:runtime-llvm = " libunwind"
109*4882a593SmuzhiyunFILES:libunwind:runtime-llvm = "${libdir}/libunwind.so.*"
110*4882a593Smuzhiyun
111*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk"
112*4882a593SmuzhiyunTOOLCHAIN:forcevariable = "clang"
113