toolchain: reproducible libstdcpp
[openwrt/openwrt.git] / package / libs / toolchain / Makefile
index ce0acd19b2d224718b84a389e712fe3c8342772c..f9f8ac956bebb640effe6400a81c4366d7ff9d52 100644 (file)
@@ -7,7 +7,7 @@
 
 include $(TOPDIR)/rules.mk
 PKG_NAME:=toolchain
-PKG_RELEASE:=1
+PKG_RELEASE:=4
 
 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 PKG_LICENSE:=GPL-3.0-with-GCC-exception
@@ -33,6 +33,7 @@ endef
 define Package/libgcc
 $(call Package/gcc/Default)
   TITLE:=GCC support library
+  ABI_VERSION:=1
 endef
 
 define Package/libgcc/config
@@ -59,6 +60,7 @@ define Package/libatomic
 $(call Package/gcc/Default)
   DEPENDS:=+libgcc
   TITLE:=Atomic support library
+  ABI_VERSION:=1
 endef
 
 define Package/libatomic/config
@@ -81,55 +83,145 @@ define Package/libatomic/config
        endmenu
 endef
 
-define Package/libssp
+define Package/libstdcpp
 $(call Package/gcc/Default)
-  DEPENDS+=@SSP_SUPPORT
-  TITLE:=GCC support library
+  NAME:=libstdc++
+  TITLE:=GNU Standard C++ Library v3
+  ABI_VERSION:=6
 endef
 
-define Package/libssp/config
+define Package/libstdcpp/config
        menu "Configuration"
-               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp
+       depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
 
-       config LIBSSP_ROOT_DIR
+       config LIBSTDCPP_ROOT_DIR
                string
-               prompt "libssp shared library base directory"
-               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp
+               prompt "libstdcpp shared library base directory"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
                default TOOLCHAIN_ROOT  if !NATIVE_TOOLCHAIN
                default "/"  if NATIVE_TOOLCHAIN
 
-       config LIBSSP_FILE_SPEC
+       config LIBSTDCPP_FILE_SPEC
                string
-               prompt "libssp shared library files (use wildcards)"
-               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp
-               default "./lib/libssp.so.*"
+               prompt "libstdc++ shared library files (use wildcards)"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
+               default "./lib/libstdc++.so.*"
 
        endmenu
 endef
 
 
-define Package/libstdcpp
+define Package/libasan
 $(call Package/gcc/Default)
-  NAME:=libstdc++
-  TITLE:=GNU Standard C++ Library v3
+  NAME:=libasan
+  TITLE:=Runtime library for AddressSanitizer in GCC
+  DEPENDS:=@USE_GLIBC +librt +libstdcpp @!mips64 @!mips64el @!arc
+  ABI_VERSION:=5
 endef
 
-define Package/libstdcpp/config
+define Package/libasan/config
        menu "Configuration"
-       depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
+       depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
 
-       config LIBSTDCPP_ROOT_DIR
+       config LIBASAN_ROOT_DIR
                string
-               prompt "libstdcpp shared library base directory"
-               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
+               prompt "libasan shared library base directory"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
                default TOOLCHAIN_ROOT  if !NATIVE_TOOLCHAIN
                default "/"  if NATIVE_TOOLCHAIN
 
-       config LIBSTDCPP_FILE_SPEC
+       config LIBASAN_FILE_SPEC
                string
-               prompt "libstdc++ shared library files (use wildcards)"
-               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
-               default "./lib/libstdc++.so.*"
+               prompt "libasan shared library files (use wildcards)"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
+               default "./lib/libasan.so.*"
+
+       endmenu
+endef
+
+
+define Package/libtsan
+$(call Package/gcc/Default)
+  NAME:=libtsan
+  TITLE:=Runtime library for ThreadSanitizer in GCC
+  DEPENDS:=@USE_GLIBC +librt +libstdcpp @!mips @!mipsel @!mips64 @!mips64el @!arc
+  ABI_VERSION:=0
+endef
+
+define Package/libtsan/config
+       menu "Configuration"
+       depends on EXTERNAL_TOOLCHAIN && PACKAGE_libtsan
+
+       config LIBTSAN_ROOT_DIR
+               string
+               prompt "libtsan shared library base directory"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libtsan
+               default TOOLCHAIN_ROOT  if !NATIVE_TOOLCHAIN
+               default "/"  if NATIVE_TOOLCHAIN
+
+       config LIBTSAN_FILE_SPEC
+               string
+               prompt "libtsan shared library files (use wildcards)"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libtsan
+               default "./lib/libtsan.so.*"
+
+       endmenu
+endef
+
+
+define Package/liblsan
+$(call Package/gcc/Default)
+  NAME:=liblsan
+  TITLE:=Runtime library for LeakSanitizer in GCC
+  DEPENDS:=@USE_GLIBC +librt +libstdcpp @!mips @!mipsel @!mips64 @!mips64el @!arc
+  ABI_VERSION:=0
+endef
+
+define Package/liblsan/config
+       menu "Configuration"
+       depends on EXTERNAL_TOOLCHAIN && PACKAGE_liblsan
+
+       config LIBLSAN_ROOT_DIR
+               string
+               prompt "liblsan shared library base directory"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_liblsan
+               default TOOLCHAIN_ROOT  if !NATIVE_TOOLCHAIN
+               default "/"  if NATIVE_TOOLCHAIN
+
+       config LIBLSAN_FILE_SPEC
+               string
+               prompt "liblsan shared library files (use wildcards)"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_liblsan
+               default "./lib/liblsan.so.*"
+
+       endmenu
+endef
+
+
+define Package/libubsan
+$(call Package/gcc/Default)
+  NAME:=libubsan
+  TITLE:=Runtime library for UndefinedBehaviorSanitizer in GCC
+  DEPENDS:=@USE_GLIBC +librt +libstdcpp @!mips64 @!mips64el @!arc
+  ABI_VERSION:=1
+endef
+
+define Package/libubsan/config
+       menu "Configuration"
+       depends on EXTERNAL_TOOLCHAIN && PACKAGE_libubsan
+
+       config LIBUBSAN_ROOT_DIR
+               string
+               prompt "libubsan shared library base directory"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libubsan
+               default TOOLCHAIN_ROOT  if !NATIVE_TOOLCHAIN
+               default "/"  if NATIVE_TOOLCHAIN
+
+       config LIBUBSAN_FILE_SPEC
+               string
+               prompt "libubsan shared library files (use wildcards)"
+               depends on EXTERNAL_TOOLCHAIN && PACKAGE_libubsan
+               default "./lib/libubsan.so.*"
 
        endmenu
 endef
@@ -366,11 +458,6 @@ LIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a))
 LIBGCC_MAP=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map))
 LIBGCC_SO=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*))
 
-define Build/Compile/uClibc
-       $(CP) \
-               $(TOOLCHAIN_DIR)/lib/libuClibc-*.so \
-               $(PKG_BUILD_DIR)/
-endef
 ifneq ($(LIBGCC_SO),)
     define Build/Compile/libgcc
        $(CP) $(LIBGCC_SO) $(PKG_BUILD_DIR)/
@@ -400,14 +487,30 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
        $(CP) $(TOOLCHAIN_DIR)/lib/libgfortran.so.* $(1)/usr/lib/
   endef
 
-  define Package/libssp/install
-       $(INSTALL_DIR) $(1)/lib
-       $(CP) $(TOOLCHAIN_DIR)/lib/libssp.so.* $(1)/lib/
-  endef
-
   define Package/libstdcpp/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(TOOLCHAIN_DIR)/lib/libstdc++.so.* $(1)/usr/lib/
+       rm -rf $(1)/usr/lib/*-gdb.py
+  endef
+
+  define Package/libasan/install
+       $(INSTALL_DIR) $(1)/lib
+       $(CP) $(TOOLCHAIN_DIR)/lib/libasan.so.* $(1)/lib/
+  endef
+
+  define Package/libtsan/install
+       $(INSTALL_DIR) $(1)/lib
+       $(CP) $(TOOLCHAIN_DIR)/lib/libtsan.so.* $(1)/lib/
+  endef
+
+  define Package/liblsan/install
+       $(INSTALL_DIR) $(1)/lib
+       $(CP) $(TOOLCHAIN_DIR)/lib/liblsan.so.* $(1)/lib/
+  endef
+
+  define Package/libubsan/install
+       $(INSTALL_DIR) $(1)/lib
+       $(CP) $(TOOLCHAIN_DIR)/lib/libubsan.so.* $(1)/lib/
   endef
 
   define Package/glibc/install
@@ -417,10 +520,9 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
        $(INSTALL_DIR) $(1)/lib
        $(CP) \
                $(TOOLCHAIN_DIR)/lib/ld*.so.* \
-               $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_SO_VERSION).so \
                $(1)/lib/
        for file in libanl libc libcidn libcrypt libdl libm libnsl libnss_dns libnss_files libresolv libutil; do \
-               for file in $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so; do \
+               for file in $(TOOLCHAIN_DIR)/lib/$$$$file.so.*; do \
                        if [ -e "$$$$file" ]; then \
                                $(CP) $$$$file $(1)/lib/; \
                        fi; \
@@ -428,21 +530,6 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
        done
   endef
 
-  define Package/uClibc/install
-       $(INSTALL_DIR) $(1)/lib
-       $(CP) \
-               $(TOOLCHAIN_DIR)/lib/ld*-uClibc.so.* \
-               $(TOOLCHAIN_DIR)/lib/ld*-uClibc-$(LIBC_SO_VERSION).so \
-               $(1)/lib/
-       $(CP) \
-               $(TOOLCHAIN_DIR)/lib/libc.so.* \
-               $(TOOLCHAIN_DIR)/lib/libuClibc-$(LIBC_SO_VERSION).so \
-               $(1)/lib/
-       $(CP) \
-               $(PKG_BUILD_DIR)/libuClibc-* \
-               $(1)/lib/
-  endef
-
   LD_MUSL_NAME = $(notdir $(firstword $(wildcard $(TOOLCHAIN_DIR)/lib/libc.so*)))
 
   define Package/musl/install
@@ -471,10 +558,9 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
 
   define Package/libpthread/install
        $(INSTALL_DIR) $(1)/lib
-  ifneq ($(CONFIG_USE_MUSL)$(CONFIG_USE_UCLIBC),y)
+  ifneq ($(CONFIG_USE_MUSL),y)
        $(CP) \
                $(TOOLCHAIN_DIR)/lib/libpthread.so.* \
-               $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so \
                $(1)/lib/
   endif
   endef
@@ -483,11 +569,6 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
        $(INSTALL_DIR) $(1)/lib
        $(CP) \
                $(TOOLCHAIN_DIR)/lib/libthread_db.so.* $(1)/lib
-  ifeq ($(CONFIG_USE_UCLIBC),y)
-       $(CP) \
-               $(TOOLCHAIN_DIR)/lib/libthread_db-$(LIBC_SO_VERSION).so \
-               $(1)/lib/
-  endif
   endef
 
   define Package/libpthread/install_lib
@@ -496,10 +577,9 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
 
   define Package/librt/install
        $(INSTALL_DIR) $(1)/lib
-  ifneq ($(CONFIG_USE_MUSL)$(CONFIG_USE_UCLIBC),y)
+  ifneq ($(CONFIG_USE_MUSL),y)
        $(CP) \
                $(TOOLCHAIN_DIR)/lib/librt.so.* \
-               $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so \
                $(1)/lib/
   endif
   endef
@@ -507,6 +587,7 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
   define Package/ldd/install
        $(INSTALL_DIR) $(1)/usr/bin/
        $(CP) $(TOOLCHAIN_DIR)/bin/ldd $(1)/usr/bin/
+       sed -i 's,^#!.*,#!/bin/sh,' $(1)/usr/bin/ldd
   endef
 
   define Package/ldconfig/install
@@ -531,18 +612,42 @@ else
        done
   endef
 
-  define Package/libssp/install
-       for file in $(call qstrip,$(CONFIG_LIBSSP_FILE_SPEC)); do \
+  define Package/libstdcpp/install
+       for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \
                $(INSTALL_DIR) $(1)/lib ; \
-               $(CP) $(call qstrip,$(CONFIG_LIBSSP_ROOT_DIR))/$$$$file $(1)/lib/ ; \
+               $(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/lib/ ; \
        done ; \
        exit 0
   endef
 
-  define Package/libstdcpp/install
-       for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \
+  define Package/libasan/install
+       for file in $(call qstrip,$(CONFIG_LIBASAN_FILE_SPEC)); do \
                $(INSTALL_DIR) $(1)/lib ; \
-               $(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/lib/ ; \
+               $(CP) $(call qstrip,$(CONFIG_LIBASAN_ROOT_DIR))/$$$$file $(1)/lib/ ; \
+       done ; \
+       exit 0
+  endef
+
+  define Package/libtsan/install
+       for file in $(call qstrip,$(CONFIG_LIBTSAN_FILE_SPEC)); do \
+               $(INSTALL_DIR) $(1)/lib ; \
+               $(CP) $(call qstrip,$(CONFIG_LIBTSAN_ROOT_DIR))/$$$$file $(1)/lib/ ; \
+       done ; \
+       exit 0
+  endef
+
+  define Package/liblsan/install
+       for file in $(call qstrip,$(CONFIG_LIBLSAN_FILE_SPEC)); do \
+               $(INSTALL_DIR) $(1)/lib ; \
+               $(CP) $(call qstrip,$(CONFIG_LIBLSAN_ROOT_DIR))/$$$$file $(1)/lib/ ; \
+       done ; \
+       exit 0
+  endef
+
+  define Package/libubsan/install
+       for file in $(call qstrip,$(CONFIG_LIBUBSAN_FILE_SPEC)); do \
+               $(INSTALL_DIR) $(1)/lib ; \
+               $(CP) $(call qstrip,$(CONFIG_LIBUBSAN_ROOT_DIR))/$$$$file $(1)/lib/ ; \
        done ; \
        exit 0
   endef
@@ -618,8 +723,11 @@ endif
 $(eval $(call BuildPackage,libc))
 $(eval $(call BuildPackage,libgcc))
 $(eval $(call BuildPackage,libatomic))
-$(eval $(call BuildPackage,libssp))
 $(eval $(call BuildPackage,libstdcpp))
+$(eval $(call BuildPackage,libasan))
+$(eval $(call BuildPackage,libtsan))
+$(eval $(call BuildPackage,liblsan))
+$(eval $(call BuildPackage,libubsan))
 $(eval $(call BuildPackage,libpthread))
 $(eval $(call BuildPackage,libthread-db))
 $(eval $(call BuildPackage,librt))