xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/gcc/gcc-sanitizers.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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