gcc-sanitizers.inc 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. require gcc-configure-common.inc
  2. LICENSE = "NCSA | MIT"
  3. LIC_FILES_CHKSUM = "\
  4. file://libsanitizer/LICENSE.TXT;md5=0249c37748936faf5b1efd5789587909 \
  5. "
  6. EXTRA_OECONF_PATHS = "\
  7. --with-sysroot=/not/exist \
  8. --with-build-sysroot=${STAGING_DIR_TARGET} \
  9. "
  10. do_configure () {
  11. rm -rf ${B}/${TARGET_SYS}/libsanitizer/
  12. mkdir -p ${B}/${TARGET_SYS}/libsanitizer/
  13. cd ${B}/${TARGET_SYS}/libsanitizer/
  14. chmod a+x ${S}/libsanitizer/configure
  15. relpath=${@os.path.relpath("${S}/libsanitizer", "${B}/${TARGET_SYS}/libsanitizer")}
  16. $relpath/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
  17. # Easiest way to stop bad RPATHs getting into the library since we have a
  18. # broken libtool here
  19. sed -i -e 's/hardcode_into_libs=yes/hardcode_into_libs=no/' ${B}/${TARGET_SYS}/libsanitizer/libtool
  20. # Link to the sysroot's libstdc++ instead of one gcc thinks it just built
  21. sed -i -e '/LIBSTDCXX_RAW_CXX_\(CXXFLAGS\|LDFLAGS\)\s*=/d' ${B}/${TARGET_SYS}/libsanitizer/*/Makefile
  22. }
  23. EXTRACONFFUNCS += "extract_stashed_builddir"
  24. do_configure[depends] += "${COMPILERDEP}"
  25. do_compile () {
  26. cd ${B}/${TARGET_SYS}/libsanitizer/
  27. oe_runmake MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/
  28. }
  29. do_install () {
  30. cd ${B}/${TARGET_SYS}/libsanitizer/
  31. oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/ install
  32. if [ -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include ]; then
  33. install -d ${D}${libdir}/${TARGET_SYS}/${BINV}/include
  34. mv ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/* ${D}${libdir}/${TARGET_SYS}/${BINV}/include
  35. rmdir --ignore-fail-on-non-empty -p ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include
  36. fi
  37. if [ -d ${D}${infodir} ]; then
  38. rmdir --ignore-fail-on-non-empty -p ${D}${infodir}
  39. fi
  40. chown -R root:root ${D}
  41. }
  42. INHIBIT_DEFAULT_DEPS = "1"
  43. ALLOW_EMPTY:${PN} = "1"
  44. DEPENDS = "virtual/crypt gcc-runtime virtual/${TARGET_PREFIX}gcc"
  45. # 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]
  46. DEBUG_OPTIMIZATION:append = " -Wno-error"
  47. BBCLASSEXTEND = "nativesdk"
  48. PACKAGES = "${PN} ${PN}-dbg"
  49. PACKAGES += "libasan libubsan liblsan libtsan"
  50. PACKAGES += "libasan-dev libubsan-dev liblsan-dev libtsan-dev"
  51. PACKAGES += "libasan-staticdev libubsan-staticdev liblsan-staticdev libtsan-staticdev"
  52. RDEPENDS:libasan += "libstdc++"
  53. RDEPENDS:libubsan += "libstdc++"
  54. RDEPENDS:liblsan += "libstdc++"
  55. RDEPENDS:libtsan += "libstdc++"
  56. RDEPENDS:libasan-dev += "${PN}"
  57. RDEPENDS:libubsan-dev += "${PN}"
  58. RDEPENDS:liblsan-dev += "${PN}"
  59. RDEPENDS:libtsan-dev += "${PN}"
  60. RRECOMMENDS:${PN} += "libasan libubsan"
  61. RRECOMMENDS:${PN}:append:x86 = " liblsan"
  62. RRECOMMENDS:${PN}:append:x86-64 = " liblsan libtsan"
  63. RRECOMMENDS:${PN}:append:powerpc64 = " liblsan libtsan"
  64. RRECOMMENDS:${PN}:append:aarch64 = " liblsan libtsan"
  65. do_package_write_ipk[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
  66. do_package_write_deb[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
  67. do_package_write_rpm[depends] += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs:do_packagedata"
  68. # Only x86, powerpc, sparc, s390, arm, and aarch64 are supported
  69. COMPATIBLE_HOST = '(x86_64|i.86|powerpc|sparc|s390|arm|aarch64).*-linux'
  70. # musl is currently broken entirely
  71. COMPATIBLE_HOST:libc-musl = 'null'
  72. FILES:libasan += "${libdir}/libasan.so.* ${libdir}/libhwasan.so.*"
  73. FILES:libasan-dev += "\
  74. ${libdir}/libasan_preinit.o \
  75. ${libdir}/libasan.so \
  76. ${libdir}/libhwasan.so \
  77. ${libdir}/libasan.la \
  78. "
  79. FILES:libasan-staticdev += "${libdir}/libasan.a \
  80. ${libdir}/libhwasan.a \
  81. "
  82. FILES:libubsan += "${libdir}/libubsan.so.*"
  83. FILES:libubsan-dev += "\
  84. ${libdir}/libubsan.so \
  85. ${libdir}/libubsan.la \
  86. "
  87. FILES:libubsan-staticdev += "${libdir}/libubsan.a"
  88. FILES:liblsan += "${libdir}/liblsan.so.*"
  89. FILES:liblsan-dev += "\
  90. ${libdir}/liblsan.so \
  91. ${libdir}/liblsan.la \
  92. ${libdir}/liblsan_preinit.o \
  93. "
  94. FILES:liblsan-staticdev += "${libdir}/liblsan.a"
  95. FILES:libtsan += "${libdir}/libtsan.so.*"
  96. FILES:libtsan-dev += "\
  97. ${libdir}/libtsan.so \
  98. ${libdir}/libtsan.la \
  99. ${libdir}/libtsan_*.o \
  100. "
  101. FILES:libtsan-staticdev += "${libdir}/libtsan.a"
  102. FILES:${PN} = "${libdir}/*.spec ${libdir}/${TARGET_SYS}/${BINV}/include/sanitizer/*.h"