1# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com> 2# Released under the MIT license (see COPYING.MIT for the terms) 3 4DESCRIPTION = "LLVM based C/C++ compiler Runtime" 5HOMEPAGE = "http://compiler-rt.llvm.org/" 6SECTION = "base" 7 8require clang.inc 9require common-source.inc 10 11inherit cmake pkgconfig python3native 12 13 14LIC_FILES_CHKSUM = "file://compiler-rt/LICENSE.TXT;md5=d846d1d65baf322d4c485d6ee54e877a" 15 16TUNE_CCARGS:remove = "-no-integrated-as" 17 18DEPENDS += "ninja-native virtual/crypt" 19DEPENDS:append:class-native = " clang-native libxcrypt-native" 20DEPENDS:append:class-nativesdk = " clang-native clang-crosssdk-${SDK_ARCH} nativesdk-libxcrypt" 21 22PACKAGECONFIG ??= "" 23PACKAGECONFIG[crt] = "-DCOMPILER_RT_BUILD_CRT:BOOL=ON,-DCOMPILER_RT_BUILD_CRT:BOOL=OFF" 24PACKAGECONFIG[static-libcxx] = "-DSANITIZER_USE_STATIC_CXX_ABI=ON -DSANITIZER_USE_STATIC_LLVM_UNWINDER=ON,," 25 26HF = "" 27HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" 28HF[vardepvalue] = "${HF}" 29 30OECMAKE_TARGET_COMPILE = "compiler-rt" 31OECMAKE_TARGET_INSTALL = "install-compiler-rt install-compiler-rt-headers" 32OECMAKE_SOURCEPATH = "${S}/llvm" 33EXTRA_OECMAKE += "-DCOMPILER_RT_STANDALONE_BUILD=OFF \ 34 -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${HOST_ARCH}${HF}${HOST_VENDOR}-${HOST_OS} \ 35 -DCOMPILER_RT_BUILD_BUILTINS=OFF \ 36 -DSANITIZER_CXX_ABI_LIBNAME=${@bb.utils.contains("RUNTIME", "llvm", "libc++", "libstdc++", d)} \ 37 -DCOMPILER_RT_BUILD_XRAY=ON \ 38 -DCOMPILER_RT_BUILD_SANITIZERS=ON \ 39 -DCOMPILER_RT_BUILD_LIBFUZZER=ON \ 40 -DCOMPILER_RT_BUILD_PROFILE=ON \ 41 -DCOMPILER_RT_BUILD_MEMPROF=ON \ 42 -DLLVM_ENABLE_PROJECTS='compiler-rt' \ 43 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ 44 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ 45 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ 46 -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ 47" 48 49EXTRA_OECMAKE:append:class-nativesdk = "\ 50 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ 51 -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ 52" 53 54EXTRA_OECMAKE:append:libc-musl = " -DLIBCXX_HAS_MUSL_LIBC=ON " 55EXTRA_OECMAKE:append:powerpc = " -DCOMPILER_RT_DEFAULT_TARGET_ARCH=powerpc " 56 57do_install:append () { 58 if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then 59 mkdir -p ${D}${nonarch_libdir} 60 mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang 61 rmdir --ignore-fail-on-non-empty ${D}${libdir} 62 fi 63 # Already shipped with compile-rt Orc support 64 rm -rf ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/libclang_rt.orc-*.a 65 rm -rf ${D}${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/include/orc/ 66} 67 68FILES_SOLIBSDEV = "" 69FILES:${PN} += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/lib*${SOLIBSDEV} \ 70 ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/*.txt \ 71 ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/share/*.txt" 72FILES:${PN}-staticdev += "${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.a" 73FILES:${PN}-dev += "${datadir} ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/*.syms \ 74 ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/include \ 75 ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/clang_rt.crt*.o \ 76 ${nonarch_libdir}/clang/${MAJOR_VER}.${MINOR_VER}.${PATCH_VER}/lib/linux/libclang_rt.asan-preinit*.a \ 77 " 78INSANE_SKIP:${PN} = "dev-so libdir" 79INSANE_SKIP:${PN}-dbg = "libdir" 80 81#PROVIDES:append:class-target = "\ 82# virtual/${TARGET_PREFIX}compilerlibs \ 83# libgcc \ 84# libgcc-initial \ 85# libgcc-dev \ 86# libgcc-initial-dev \ 87# " 88# 89 90RDEPENDS:${PN}-dev += "${PN}-staticdev" 91 92BBCLASSEXTEND = "native nativesdk" 93 94ALLOW_EMPTY:${PN} = "1" 95ALLOW_EMPTY:${PN}-dev = "1" 96 97TOOLCHAIN:forcevariable = "clang" 98SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}" 99 100# riscv and x86_64 Sanitizers work on musl too 101COMPATIBLE_HOST:libc-musl:x86-64 = "(.*)" 102COMPATIBLE_HOST:libc-musl:riscv64 = "(.*)" 103COMPATIBLE_HOST:libc-musl:riscv32 = "(.*)" 104COMPATIBLE_HOST:libc-musl = "null" 105