# # Copyright (C) 2007-2014 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk PKG_NAME:=toolchain PKG_RELEASE:=1 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-3.0-with-GCC-exception PKG_FLAGS:=hold essential nonshared include $(INCLUDE_DIR)/package.mk ifneq ($(DUMP),1) LIBGCC_VERSION:=$(GCC_VERSION) else LIBC_VERSION:= LIBGCC_VERSION:= endif define Package/gcc/Default SECTION:=libs CATEGORY:=Base system URL:=http://gcc.gnu.org/ VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE) endef define Package/libgcc $(call Package/gcc/Default) TITLE:=GCC support library endef define Package/libgcc/config menu "Configuration" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libgcc config LIBGCC_ROOT_DIR string prompt "libgcc shared library base directory" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libgcc default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN default "/" if NATIVE_TOOLCHAIN config LIBGCC_FILE_SPEC string prompt "libgcc shared library files (use wildcards)" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libgcc default "./lib/libgcc_s.so.*" endmenu endef define Package/libatomic $(call Package/gcc/Default) DEPENDS:=+libgcc TITLE:=Atomic support library endef define Package/libatomic/config menu "Configuration" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libatomic config LIBATOMIC_ROOT_DIR string prompt "libatomic shared library base directory" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libatomic default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN default "/" if NATIVE_TOOLCHAIN config LIBATOMIC_FILE_SPEC string prompt "libatomic shared library files (use wildcards)" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libatomic default "./lib/libatomic.so.*" endmenu endef define Package/libssp $(call Package/gcc/Default) DEPENDS+=@SSP_SUPPORT TITLE:=GCC support library endef define Package/libssp/config menu "Configuration" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp config LIBSSP_ROOT_DIR string prompt "libssp shared library base directory" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN default "/" if NATIVE_TOOLCHAIN config LIBSSP_FILE_SPEC string prompt "libssp shared library files (use wildcards)" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libssp default "./lib/libssp.so.*" endmenu endef define Package/libstdcpp $(call Package/gcc/Default) NAME:=libstdc++ TITLE:=GNU Standard C++ Library v3 endef define Package/libstdcpp/config menu "Configuration" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp config LIBSTDCPP_ROOT_DIR string prompt "libstdcpp shared library base directory" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN default "/" if NATIVE_TOOLCHAIN config LIBSTDCPP_FILE_SPEC string prompt "libstdc++ shared library files (use wildcards)" depends on EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp default "./lib/libstdc++.so.*" endmenu endef defin
with Types; use Types;

package Mutils is
   --  Return the ceiling log2 of V.
   --  Returns 0 for 0.
   function Clog2 (V : Uns64) return Integer;

   --  Return True IFF V is 0 or a power of 2.
   function Is_Power2 (V : Uns64) return Boolean;
end Mutils;
fi; \ done; \ 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/ for file in libcrypt libdl libm libutil; do \ $(CP) \ $(TOOLCHAIN_DIR)/lib/$$$$file.so.* \ $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so \ $(1)/lib/; \ done $(CP) \ $(PKG_BUILD_DIR)/libuClibc-* \ $(PKG_BUILD_DIR)/libm-* \ $(PKG_BUILD_DIR)/libcrypt-* \ $(1)/lib/ endef LD_MUSL_NAME = $(notdir $(firstword $(wildcard $(TOOLCHAIN_DIR)/lib/libc.so*))) define Package/musl/install $(INSTALL_DIR) $(1)/lib $(1)/usr/bin $(CP) \ $(TOOLCHAIN_DIR)/lib/ld-musl-*.so* \ $(1)/lib/ $(CP) \ $(TOOLCHAIN_DIR)/lib/libc.so* \ $(1)/lib/ $(LN) ../../lib/$(LD_MUSL_NAME) $(1)/usr/bin/ldd endef define Package/libc/install $(call Package/$(LIBC)/install,$1) endef define Package/libc/install_lib $(CP) $(filter-out %/libdl_pic.a %/libpthread_pic.a %/libresolv_pic.a,$(wildcard $(TOOLCHAIN_DIR)/lib/lib*.a)) $(1)/lib/ $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libc_so.a $(1)/lib/libc_pic.a) $(if $(LIBGCC_MAP), \ $(CP) $(LIBGCC_A) $(1)/lib/libgcc_s_pic.a; \ $(CP) $(LIBGCC_MAP) $(1)/lib/libgcc_s_pic.map \ ) endef define Package/libpthread/install $(INSTALL_DIR) $(1)/lib ifneq ($(CONFIG_USE_MUSL),y) $(CP) \ $(TOOLCHAIN_DIR)/lib/libpthread.so.* \ $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so \ $(1)/lib/ endif endef define Package/libthread-db/install $(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 $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libpthread_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libpthread_so.a $(1)/lib/libpthread_pic.a) endef define Package/librt/install $(INSTALL_DIR) $(1)/lib ifneq ($(CONFIG_USE_MUSL),y) $(CP) \ $(TOOLCHAIN_DIR)/lib/librt.so.* \ $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so \ $(1)/lib/ endif endef define Package/ldd/install $(INSTALL_DIR) $(1)/usr/bin/ $(CP) $(TOOLCHAIN_DIR)/bin/ldd $(1)/usr/bin/ endef define Package/ldconfig/install $(INSTALL_DIR) $(1)/sbin/ $(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/ endef else define Package/libgcc/install for file in $(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libgfortran/install for file in $(call qstrip,$(CONFIG_LIBGFORTRAN_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBGFORTRAN_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done endef define Package/libssp/install for file in $(call qstrip,$(CONFIG_LIBSSP_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBSSP_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libstdcpp/install for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libc/install for file in $(call qstrip,$(CONFIG_LIBC_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBC_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libpthread/install for file in $(call qstrip,$(CONFIG_LIBPTHREAD_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBPTHREAD_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libthread-db/install for file in $(call qstrip,$(CONFIG_LIBTHREAD_DB_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBTHREAD_DB_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/librt/install for file in $(call qstrip,$(CONFIG_LIBRT_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBRT_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/libatomic/install for file in $(call qstrip,$(CONFIG_LIBATOMIC_FILE_SPEC)); do \ $(INSTALL_DIR) $(1)/lib ; \ $(CP) $(call qstrip,$(CONFIG_LIBATOMIC_ROOT_DIR))/$$$$file $(1)/lib/ ; \ done ; \ exit 0 endef define Package/ldd/install for file in $(call qstrip,$(CONFIG_LDD_FILE_SPEC)); do \ dir=`dirname $$$$file` ; \ $(INSTALL_DIR) $(1)/$$$$dir ; \ $(CP) $(call qstrip,$(CONFIG_LDD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ done ; \ exit 0 endef define Package/ldconfig/install for file in $(call qstrip,$(CONFIG_LDCONFIG_FILE_SPEC)); do \ dir=`dirname $$$$file` ; \ $(INSTALL_DIR) $(1)/$$$$dir ; \ $(CP) $(call qstrip,$(CONFIG_LDCONFIG_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ done ; \ exit 0 endef endif $(eval $(call BuildPackage,libc)) $(eval $(call BuildPackage,libgcc)) $(eval $(call BuildPackage,libatomic)) $(eval $(call BuildPackage,libssp)) $(eval $(call BuildPackage,libstdcpp)) $(eval $(call BuildPackage,libpthread)) $(eval $(call BuildPackage,libthread-db)) $(eval $(call BuildPackage,librt)) $(eval $(call BuildPackage,libgfortran)) $(eval $(call BuildPackage,ldd)) $(eval $(call BuildPackage,ldconfig))