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