1*4882a593Smuzhiyunrequire gcc-configure-common.inc 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunLICENSE = "NCSA | MIT" 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunLIC_FILES_CHKSUM = "\ 6*4882a593Smuzhiyun file://libsanitizer/LICENSE.TXT;md5=0249c37748936faf5b1efd5789587909 \ 7*4882a593Smuzhiyun" 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunEXTRA_OECONF_PATHS = "\ 10*4882a593Smuzhiyun --with-sysroot=/not/exist \ 11*4882a593Smuzhiyun --with-build-sysroot=${STAGING_DIR_TARGET} \ 12*4882a593Smuzhiyun" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundo_configure () { 15*4882a593Smuzhiyun rm -rf ${B}/${TARGET_SYS}/libsanitizer/ 16*4882a593Smuzhiyun mkdir -p ${B}/${TARGET_SYS}/libsanitizer/ 17*4882a593Smuzhiyun cd ${B}/${TARGET_SYS}/libsanitizer/ 18*4882a593Smuzhiyun chmod a+x ${S}/libsanitizer/configure 19*4882a593Smuzhiyun relpath=${@os.path.relpath("${S}/libsanitizer", "${B}/${TARGET_SYS}/libsanitizer")} 20*4882a593Smuzhiyun $relpath/configure ${CONFIGUREOPTS} ${EXTRA_OECONF} 21*4882a593Smuzhiyun # Easiest way to stop bad RPATHs getting into the library since we have a 22*4882a593Smuzhiyun # broken libtool here 23*4882a593Smuzhiyun sed -i -e 's/hardcode_into_libs=yes/hardcode_into_libs=no/' ${B}/${TARGET_SYS}/libsanitizer/libtool 24*4882a593Smuzhiyun # Link to the sysroot's libstdc++ instead of one gcc thinks it just built 25*4882a593Smuzhiyun sed -i -e '/LIBSTDCXX_RAW_CXX_\(CXXFLAGS\|LDFLAGS\)\s*=/d' ${B}/${TARGET_SYS}/libsanitizer/*/Makefile 26*4882a593Smuzhiyun} 27*4882a593SmuzhiyunEXTRACONFFUNCS += "extract_stashed_builddir" 28*4882a593Smuzhiyundo_configure[depends] += "${COMPILERDEP}" 29*4882a593Smuzhiyun 30*4882a593Smuzhiyundo_compile () { 31*4882a593Smuzhiyun cd ${B}/${TARGET_SYS}/libsanitizer/ 32*4882a593Smuzhiyun oe_runmake MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/ 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyundo_install () { 36*4882a593Smuzhiyun cd ${B}/${TARGET_SYS}/libsanitizer/ 37*4882a593Smuzhiyun oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/ install 38*4882a593Smuzhiyun if [ -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include ]; then 39*4882a593Smuzhiyun install -d ${D}${libdir}/${TARGET_SYS}/${BINV}/include 40*4882a593Smuzhiyun mv ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/* ${D}${libdir}/${TARGET_SYS}/${BINV}/include 41*4882a593Smuzhiyun rmdir --ignore-fail-on-non-empty -p ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include 42*4882a593Smuzhiyun fi 43*4882a593Smuzhiyun if [ -d ${D}${infodir} ]; then 44*4882a593Smuzhiyun rmdir --ignore-fail-on-non-empty -p ${D}${infodir} 45*4882a593Smuzhiyun fi 46*4882a593Smuzhiyun chown -R root:root ${D} 47*4882a593Smuzhiyun} 48*4882a593Smuzhiyun 49*4882a593SmuzhiyunINHIBIT_DEFAULT_DEPS = "1" 50*4882a593SmuzhiyunALLOW_EMPTY:${PN} = "1" 51*4882a593SmuzhiyunDEPENDS = "virtual/crypt gcc-runtime virtual/${TARGET_PREFIX}gcc" 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun# used to fix ../../../../../../../../../work-shared/gcc-8.3.0-r0/gcc-8.3.0/libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized] 54*4882a593SmuzhiyunDEBUG_OPTIMIZATION:append = " -Wno-error" 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunBBCLASSEXTEND = "nativesdk" 57*4882a593Smuzhiyun 58*4882a593SmuzhiyunPACKAGES = "${PN} ${PN}-dbg" 59*4882a593SmuzhiyunPACKAGES += "libasan libubsan liblsan libtsan" 60*4882a593SmuzhiyunPACKAGES += "libasan-dev libubsan-dev liblsan-dev libtsan-dev" 61*4882a593SmuzhiyunPACKAGES += "libasan-staticdev libubsan-staticdev liblsan-staticdev libtsan-staticdev" 62*4882a593Smuzhiyun 63*4882a593SmuzhiyunRDEPENDS:libasan += "libstdc++" 64*4882a593SmuzhiyunRDEPENDS:libubsan += "libstdc++" 65*4882a593SmuzhiyunRDEPENDS:liblsan += "libstdc++" 66*4882a593SmuzhiyunRDEPENDS:libtsan += "libstdc++" 67*4882a593SmuzhiyunRDEPENDS:libasan-dev += "${PN}" 68*4882a593SmuzhiyunRDEPENDS:libubsan-dev += "${PN}" 69*4882a593SmuzhiyunRDEPENDS:liblsan-dev += "${PN}" 70*4882a593SmuzhiyunRDEPENDS:libtsan-dev += "${PN}" 71*4882a593SmuzhiyunRRECOMMENDS:${PN} += "libasan libubsan" 72*4882a593SmuzhiyunRRECOMMENDS:${PN}:append:x86 = " liblsan" 73*4882a593SmuzhiyunRRECOMMENDS:${PN}:append:x86-64 = " liblsan libtsan" 74*4882a593SmuzhiyunRRECOMMENDS:${PN}:append:powerpc64 = " liblsan libtsan" 75*4882a593SmuzhiyunRRECOMMENDS:${PN}:append:aarch64 = " liblsan libtsan" 76*4882a593Smuzhiyun 77*4882a593Smuzhiyundo_package_write_ipk[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata" 78*4882a593Smuzhiyundo_package_write_deb[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata" 79*4882a593Smuzhiyundo_package_write_rpm[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata" 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun# Only x86, powerpc, sparc, s390, arm, and aarch64 are supported 82*4882a593SmuzhiyunCOMPATIBLE_HOST = '(x86_64|i.86|powerpc|sparc|s390|arm|aarch64).*-linux' 83*4882a593Smuzhiyun# musl is currently broken entirely 84*4882a593SmuzhiyunCOMPATIBLE_HOST:libc-musl = 'null' 85*4882a593Smuzhiyun 86*4882a593SmuzhiyunFILES:libasan += "${libdir}/libasan.so.* ${libdir}/libhwasan.so.*" 87*4882a593SmuzhiyunFILES:libasan-dev += "\ 88*4882a593Smuzhiyun ${libdir}/libasan_preinit.o \ 89*4882a593Smuzhiyun ${libdir}/libasan.so \ 90*4882a593Smuzhiyun ${libdir}/libhwasan.so \ 91*4882a593Smuzhiyun ${libdir}/libasan.la \ 92*4882a593Smuzhiyun" 93*4882a593SmuzhiyunFILES:libasan-staticdev += "${libdir}/libasan.a \ 94*4882a593Smuzhiyun ${libdir}/libhwasan.a \ 95*4882a593Smuzhiyun" 96*4882a593Smuzhiyun 97*4882a593SmuzhiyunFILES:libubsan += "${libdir}/libubsan.so.*" 98*4882a593SmuzhiyunFILES:libubsan-dev += "\ 99*4882a593Smuzhiyun ${libdir}/libubsan.so \ 100*4882a593Smuzhiyun ${libdir}/libubsan.la \ 101*4882a593Smuzhiyun" 102*4882a593SmuzhiyunFILES:libubsan-staticdev += "${libdir}/libubsan.a" 103*4882a593Smuzhiyun 104*4882a593SmuzhiyunFILES:liblsan += "${libdir}/liblsan.so.*" 105*4882a593SmuzhiyunFILES:liblsan-dev += "\ 106*4882a593Smuzhiyun ${libdir}/liblsan.so \ 107*4882a593Smuzhiyun ${libdir}/liblsan.la \ 108*4882a593Smuzhiyun ${libdir}/liblsan_preinit.o \ 109*4882a593Smuzhiyun" 110*4882a593SmuzhiyunFILES:liblsan-staticdev += "${libdir}/liblsan.a" 111*4882a593Smuzhiyun 112*4882a593SmuzhiyunFILES:libtsan += "${libdir}/libtsan.so.*" 113*4882a593SmuzhiyunFILES:libtsan-dev += "\ 114*4882a593Smuzhiyun ${libdir}/libtsan.so \ 115*4882a593Smuzhiyun ${libdir}/libtsan.la \ 116*4882a593Smuzhiyun ${libdir}/libtsan_*.o \ 117*4882a593Smuzhiyun" 118*4882a593SmuzhiyunFILES:libtsan-staticdev += "${libdir}/libtsan.a" 119*4882a593Smuzhiyun 120*4882a593SmuzhiyunFILES:${PN} = "${libdir}/*.spec ${libdir}/${TARGET_SYS}/${BINV}/include/sanitizer/*.h" 121