summaryrefslogtreecommitdiff
path: root/toolchain/glibc/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/glibc/Makefile')
-rw-r--r--toolchain/glibc/Makefile101
1 files changed, 96 insertions, 5 deletions
diff --git a/toolchain/glibc/Makefile b/toolchain/glibc/Makefile
index 65341591b..16791824e 100644
--- a/toolchain/glibc/Makefile
+++ b/toolchain/glibc/Makefile
@@ -15,6 +15,7 @@ TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS))
#TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS))
include Makefile.inc
+include Makefile.multilib
include ${TOPDIR}/mk/buildhlp.mk
ifeq ($(ADK_TARGET_NO_FPU),y)
@@ -29,6 +30,36 @@ endif
GLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers
GLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final
+ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
+$(WRKBUILD)/.headers_configure:
+ for abi in $(TABI); do \
+ mkdir -p $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
+ (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
+ ln -sf ../../w-glibc-ports-$(PKG_VERSION)-1/glibc-ports-$(PKG_VERSION)/ ports); \
+ (cd $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
+ ${GLIBC_ENV} \
+ CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
+ $(WRKBUILD)/libc/configure \
+ --prefix=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr \
+ --with-sysroot=$(STAGING_TARGET_DIR)-$${abi/*:/} \
+ --host=$${abi/:*/} \
+ ${GLIBC_CONFOPTS} \
+ ); \
+ done
+ touch $@
+
+$(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
+ for abi in $(TABI); do \
+ (cd $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
+ ${GLIBC_ENV} \
+ CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
+ $(MAKE) ${GLIBC_MAKEOPTS} install-headers \
+ ); \
+ done
+ touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
+ touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
+ touch $@
+else
$(WRKBUILD)/.headers_configure:
mkdir -p $(GLIBC_BUILD_DIR_INITIAL)
(cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
@@ -45,12 +76,56 @@ $(WRKBUILD)/.headers_configure:
$(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
(cd $(GLIBC_BUILD_DIR_INITIAL); \
${GLIBC_ENV} \
- $(MAKE) ${GLIBC_MAKEOPTS} \
- install-headers \
+ $(MAKE) ${GLIBC_MAKEOPTS} install-headers \
);
touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
+ touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
+ touch $@
+endif
+
+ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
+$(WRKBUILD)/.configured:
+ for abi in $(TABI); do \
+ mkdir -p $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} ;\
+ (cd $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/}; \
+ ${GLIBC_ENV} \
+ CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
+ $(WRKBUILD)/libc/configure \
+ --prefix=/usr \
+ --enable-shared \
+ --enable-stackguard-randomization \
+ --host=$${abi/:*/} \
+ ${GLIBC_CONFOPTS} \
+ ); \
+ done
+ touch $@
+
+$(WRKBUILD)/.compiled: $(WRKBUILD)/.configured
+ for abi in $(TABI); do \
+ ${GLIBC_ENV} $(MAKE) ${GLIBC_MAKEOPTS} -C $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} all ;\
+ done
touch $@
+$(WRKBUILD)/.installed: $(WRKBUILD)/.compiled
+ for abi in $(TABI); do \
+ ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\
+ done
+ # default libgcc searching for 64 bit libraries
+ ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install
+ touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
+ touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
+ for abi in $(TABI); do \
+ mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
+ $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/* $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/lib/* \
+ $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
+ rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/}/libc.so ; \
+ done
+ mkdir -p ${STAGING_TARGET_DIR}/etc
+ ${INSTALL_DATA} ${WRKBUILD}/libc/posix/gai.conf ${STAGING_TARGET_DIR}/etc/
+ ${INSTALL_DATA} ${WRKBUILD}/libc/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc/
+ ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/
+ touch $@
+else
$(WRKBUILD)/.configured:
mkdir -p $(GLIBC_BUILD_DIR_FINAL)
(cd $(GLIBC_BUILD_DIR_FINAL); \
@@ -68,13 +143,29 @@ $(WRKBUILD)/.compiled:
touch $@
$(WRKBUILD)/.installed:
- ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL) \
- install_root=$(STAGING_TARGET_DIR) install
+ ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install
mkdir -p ${STAGING_TARGET_DIR}/etc
${INSTALL_DATA} ${WRKBUILD}/posix/gai.conf ${STAGING_TARGET_DIR}/etc
${INSTALL_DATA} ${WRKBUILD}/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc
${INSTALL_DATA} ${WRKBUILD}/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc
- touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
+ touch $@
+endif
+
+$(WRKBUILD)/.fixup:
+ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
+ifeq ($(ADK_TARGET_ABI_64),y)
+ ${CP} $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)/lib
+ ${CP} $(STAGING_TARGET_DIR)-64/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
+endif
+ifeq ($(ADK_TARGET_ABI_32),y)
+ ${CP} $(STAGING_TARGET_DIR)-32/lib/* $(STAGING_TARGET_DIR)/lib
+ ${CP} $(STAGING_TARGET_DIR)-32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
+endif
+ifeq ($(ADK_TARGET_ABI_X32),y)
+ ${CP} $(STAGING_TARGET_DIR)-x32/lib/* $(STAGING_TARGET_DIR)/lib
+ ${CP} $(STAGING_TARGET_DIR)-x32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
+endif
+endif
touch $@
include ${TOPDIR}/mk/toolchain.mk