From 8d277912e2312f01c3eb892b7333b78628ca7ad4 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 5 Oct 2012 17:40:54 +0200 Subject: fix glibc 2.16 build --- package/m4/patches/patch-lib_config_hin | 14 ++++++++++++++ package/m4/patches/patch-lib_stdio_in_h | 10 ++++++++++ 2 files changed, 24 insertions(+) create mode 100644 package/m4/patches/patch-lib_config_hin create mode 100644 package/m4/patches/patch-lib_stdio_in_h (limited to 'package') diff --git a/package/m4/patches/patch-lib_config_hin b/package/m4/patches/patch-lib_config_hin new file mode 100644 index 000000000..08932ac77 --- /dev/null +++ b/package/m4/patches/patch-lib_config_hin @@ -0,0 +1,14 @@ +--- m4-1.4.16.orig/lib/config.hin 2011-03-01 17:57:39.000000000 +0100 ++++ m4-1.4.16/lib/config.hin 2012-10-01 22:43:08.000000000 +0200 +@@ -1266,6 +1266,11 @@ + # endif + #endif + ++/* Enable large inode numbers on Mac OS X 10.5. */ ++#ifndef _DARWIN_USE_64_BIT_INODE ++# define _DARWIN_USE_64_BIT_INODE 1 ++#endif ++ + /* Number of bits in a file offset, on hosts where this is settable. */ + #undef _FILE_OFFSET_BITS + diff --git a/package/m4/patches/patch-lib_stdio_in_h b/package/m4/patches/patch-lib_stdio_in_h new file mode 100644 index 000000000..3453282bc --- /dev/null +++ b/package/m4/patches/patch-lib_stdio_in_h @@ -0,0 +1,10 @@ +--- m4-1.4.16.orig/lib/stdio.in.h 2011-03-01 17:39:29.000000000 +0100 ++++ m4-1.4.16/lib/stdio.in.h 2012-10-02 09:26:29.000000000 +0200 +@@ -162,7 +162,6 @@ _GL_WARN_ON_USE (fflush, "fflush is not + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ + #undef gets +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); + + #if @GNULIB_FOPEN@ + # if @REPLACE_FOPEN@ -- cgit v1.2.3 From 0c4255f9860dec3c7f0ecf32454bd93268879278 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 6 Oct 2012 15:10:10 +0200 Subject: static-libgcc for base package dropbear --- package/dropbear/patches/patch-Makefile_in | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'package') diff --git a/package/dropbear/patches/patch-Makefile_in b/package/dropbear/patches/patch-Makefile_in index 0995ed95a..3e6783b64 100644 --- a/package/dropbear/patches/patch-Makefile_in +++ b/package/dropbear/patches/patch-Makefile_in @@ -1,5 +1,5 @@ --- dropbear-2012.55.orig/Makefile.in 2012-02-23 14:47:05.000000000 +0100 -+++ dropbear-2012.55/Makefile.in 2012-06-02 21:00:17.000000000 +0200 ++++ dropbear-2012.55/Makefile.in 2012-10-05 17:24:16.000000000 +0200 @@ -56,7 +56,7 @@ HEADERS=options.h dbutil.h session.h pac loginrec.h atomicio.h x11fwd.h agentfwd.h tcpfwd.h compat.h \ listener.h fake-rfc2553.h @@ -21,7 +21,16 @@ LDFLAGS=@LDFLAGS@ EXEEXT=@EXEEXT@ -@@ -169,7 +168,7 @@ scp: $(SCPOBJS) $(HEADERS) Makefile +@@ -159,7 +158,7 @@ dropbearkey: $(dropbearkeyobjs) + dropbearconvert: $(dropbearconvertobjs) + + dropbear dbclient dropbearkey dropbearconvert: $(HEADERS) $(LIBTOM_DEPS) Makefile +- $(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBS) ++ $(CC) $(LDFLAGS) -static-libgcc -o $@$(EXEEXT) $($@objs) $(LIBS) + + # scp doesn't use the libs so is special. + scp: $(SCPOBJS) $(HEADERS) Makefile +@@ -169,14 +168,14 @@ scp: $(SCPOBJS) $(HEADERS) Makefile # multi-binary compilation. MULTIOBJS= ifeq ($(MULTI),1) @@ -30,3 +39,11 @@ CFLAGS+=$(addprefix -DDBMULTI_, $(PROGRAMS)) -DDROPBEAR_MULTI endif + dropbearmulti: multilink + + multibinary: $(HEADERS) $(MULTIOBJS) $(LIBTOM_DEPS) Makefile +- $(CC) $(LDFLAGS) -o dropbearmulti$(EXEEXT) $(MULTIOBJS) $(LIBS) ++ $(CC) $(LDFLAGS) -static-libgcc -o dropbearmulti$(EXEEXT) $(MULTIOBJS) $(LIBS) + + multilink: multibinary $(addprefix link, $(PROGRAMS)) + -- cgit v1.2.3 From 440dcafbd07915cadeb26806fe6d8835d62f293b Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 7 Oct 2012 19:42:00 +0200 Subject: support for 32/64 x86_64 multilib with eglibc --- mk/image.mk | 5 +++ package/busybox/Makefile | 2 +- package/eglibc/Makefile | 8 ++++ toolchain/eglibc/Makefile | 79 ++++++++++++++++++++++++++++++++++++++- toolchain/gcc/Makefile | 1 - toolchain/kernel-headers/Makefile | 3 ++ toolchain/uClibc/Makefile | 28 -------------- 7 files changed, 95 insertions(+), 31 deletions(-) (limited to 'package') diff --git a/mk/image.mk b/mk/image.mk index 4e1ab94dc..8ce4dbf0b 100644 --- a/mk/image.mk +++ b/mk/image.mk @@ -50,6 +50,11 @@ image-prepare-post: sed -i '/^root:/s!:/bin/sh$$!:${ROOTSH}!' ${TARGET_DIR}/etc/passwd -rm -f ${TARGET_DIR}/bin/sh ln -sf ${BINSH} ${TARGET_DIR}/bin/sh +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) + mv ${TARGET_DIR}/lib/* ${TARGET_DIR}/${ADK_TARGET_LIBC_PATH} + rm -rf ${TARGET_DIR}/lib/ + ln -sf /${ADK_TARGET_LIBC_PATH} ${TARGET_DIR}/lib +endif KERNEL_PKGDIR:=$(LINUX_BUILD_DIR)/kernel-pkg KERNEL_PKG:=$(PACKAGE_DIR)/kernel_$(KERNEL_VERSION)_$(CPU_ARCH).$(PKG_SUFFIX) diff --git a/package/busybox/Makefile b/package/busybox/Makefile index 34b274d96..9fe1ef52a 100644 --- a/package/busybox/Makefile +++ b/package/busybox/Makefile @@ -9,7 +9,7 @@ PKG_RELEASE:= 1 PKG_MD5SUM:= e025414bc6cd79579cc7a32a45d3ae1c PKG_DESCR:= Core utilities for embedded systems PKG_SECTION:= base -#PKG_BUILDDEP:= libtirpc +PKG_BUILDDEP:= libtirpc PKG_URL:= http://www.busybox.net/ PKG_SITES:= http://www.busybox.net/downloads/ diff --git a/package/eglibc/Makefile b/package/eglibc/Makefile index 0ea35d935..40d1a4848 100644 --- a/package/eglibc/Makefile +++ b/package/eglibc/Makefile @@ -67,6 +67,14 @@ endif ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/nscd.conf ${IDIR_EGLIBC}/etc ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/nsswitch.conf ${IDIR_EGLIBC}/etc $(CP) $(STAGING_TARGET_DIR)/usr/bin/getconf $(IDIR_EGLIBC)/usr/bin +ifeq ($(ADK_TARGET_MULTILIB_X86_32),y) + ${INSTALL_DIR} $(IDIR_EGLIBC)/lib32 $(IDIR_EGLIBC)/usr/lib32 + $(CP) $(STAGING_TARGET_DIR_32)/lib/ld* $(IDIR_EGLIBC)/lib32 + -for file in libc libcrypt libdl libm libresolv libutil libnsl libnss_dns libnss_files; do \ + $(CP) $(STAGING_TARGET_DIR_32)/lib/$$file.so* $(IDIR_EGLIBC)/lib32; \ + $(CP) $(STAGING_TARGET_DIR_32)/lib/$$file-$(PKG_VERSION).so $(IDIR_EGLIBC)/lib32; \ + done +endif eglibc-static-install: ${INSTALL_DIR} $(IDIR_EGLIBC_STATIC)/usr/lib diff --git a/toolchain/eglibc/Makefile b/toolchain/eglibc/Makefile index 677711f10..7f369d3ed 100644 --- a/toolchain/eglibc/Makefile +++ b/toolchain/eglibc/Makefile @@ -13,7 +13,6 @@ endif TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \ - --host=$(REAL_GNU_TARGET_NAME) \ --without-cvs \ --disable-profile \ --disable-debug \ @@ -43,9 +42,15 @@ EGLIBC_CONFOPTS+= --without-fp endif EGLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers +EGLIBC_BUILD_DIR_INITIAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers32 EGLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final +EGLIBC_BUILD_DIR_FINAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final32 +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +$(WRKBUILD)/.headers_configure: $(WRKBUILD)/.headers_configure32 +else $(WRKBUILD)/.headers_configure: +endif mkdir -p $(EGLIBC_BUILD_DIR_INITIAL) (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \ ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); @@ -56,6 +61,7 @@ $(WRKBUILD)/.headers_configure: $(WRKBUILD)/libc/configure \ --prefix=$(STAGING_TARGET_DIR)/usr \ --with-headers=$(STAGING_TARGET_DIR)/usr/include \ + --host=$(REAL_GNU_TARGET_NAME) \ ${EGLIBC_CONFOPTS} \ ); touch $@ @@ -70,13 +76,42 @@ $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-64.h touch $@ +$(WRKBUILD)/.headers_configure32: + mkdir -p $(EGLIBC_BUILD_DIR_INITIAL32) + (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \ + ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); + $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ + $(EGLIBC_BUILD_DIR_INITIAL32)/option-groups.config + (cd $(EGLIBC_BUILD_DIR_INITIAL32); \ + ${EGLIBC_ENV} \ + CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ + $(WRKBUILD)/libc/configure \ + --prefix=$(STAGING_TARGET_DIR_32)/usr \ + --with-headers=$(STAGING_TARGET_DIR_32)/usr/include \ + --host=i486-openadk-linux-gnu \ + ${EGLIBC_CONFOPTS} \ + ); + (cd $(EGLIBC_BUILD_DIR_INITIAL32); \ + PATH='${TARGET_PATH}' \ + ${EGLIBC_ENV} \ + CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ + $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \ + ); + touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs.h + touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs-64.h + touch $@ + ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y) EGLIBC_ENV+= libc_cv_ssp=yes else EGLIBC_ENV+= libc_cv_ssp=no endif +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +$(WRKBUILD)/.configured: $(WRKBUILD)/.configured32 +else $(WRKBUILD)/.configured: +endif mkdir -p $(EGLIBC_BUILD_DIR_FINAL) $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ $(EGLIBC_BUILD_DIR_FINAL)/option-groups.config @@ -86,6 +121,7 @@ $(WRKBUILD)/.configured: --prefix=/usr \ --enable-shared \ --enable-stackguard-randomization \ + --host=$(REAL_GNU_TARGET_NAME) \ ${EGLIBC_CONFOPTS} \ ); touch $@ @@ -102,4 +138,45 @@ $(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/ touch $@ +$(WRKBUILD)/.configured32: + mkdir -p $(EGLIBC_BUILD_DIR_FINAL32) + $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ + $(EGLIBC_BUILD_DIR_FINAL32)/option-groups.config + (cd $(EGLIBC_BUILD_DIR_FINAL32); \ + ${EGLIBC_ENV} \ + CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ + $(WRKBUILD)/libc/configure \ + --prefix=/usr \ + --enable-shared \ + --enable-stackguard-randomization \ + --host=i486-openadk-linux-gnu \ + ${EGLIBC_CONFOPTS} \ + ); + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) cross-compiling=yes all + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) install_root=$(STAGING_TARGET_DIR_32) install + mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32 + $(CP) $(STAGING_TARGET_DIR_32)/lib/* $(STAGING_TARGET_DIR_32)/usr/lib/* \ + $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32 + -rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32/libc.so + touch $@ + +$(WRKBUILD)/.configuredx32: + mkdir -p $(EGLIBC_BUILD_DIR_FINALX32) + $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ + $(EGLIBC_BUILD_DIR_FINALX32)/option-groups.config + (cd $(EGLIBC_BUILD_DIR_FINALX32); \ + ${EGLIBC_ENV} \ + CC=${REAL_GNU_TARGET_NAME}-gcc -mx32 \ + $(WRKBUILD)/libc/configure \ + --prefix=/usr \ + --enable-shared \ + --enable-stackguard-randomization \ + --host=x86_64-x32-openadk-linux-gnu \ + ${EGLIBC_CONFOPTS} \ + ); + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) cross-compiling=yes all + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) install_root=$(STAGING_TARGET_DIR_X32) install + touch $@ + + include ${TOPDIR}/mk/toolchain.mk diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index a61d5eaa7..e14a4be7e 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -150,7 +150,6 @@ $(GCC_BUILD_DIR_FINAL)/.configured: ${GCC_CONFOPTS} \ --enable-languages=$(LANGUAGES) \ --with-sysroot='$${prefix}/${STAGING_HOST2TARGET}' \ - --with-slibdir=$(STAGING_TARGET_DIR)/lib \ --enable-shared touch $@ diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile index 4346cb1a6..405119000 100644 --- a/toolchain/kernel-headers/Makefile +++ b/toolchain/kernel-headers/Makefile @@ -10,6 +10,9 @@ $(WRKBUILD)/.headers: $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(STAGING_DIR)/usr \ headers_install + $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=x86 V=1 \ + INSTALL_HDR_PATH=$(STAGING_TARGET_DIR_32)/usr \ + headers_install $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(LINUX_HEADER_DIR) \ headers_install diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile index 48279469e..a59805454 100644 --- a/toolchain/uClibc/Makefile +++ b/toolchain/uClibc/Makefile @@ -83,33 +83,6 @@ endif touch $(WRKBUILD)/.configured touch $@ -ifeq ($(ADK_TARGET_WITH_MULTILIB),y) -$(WRKBUILD)/.compiled: - $(MAKE) ${UCLIBC_MAKEOPTS} -C $(WRKBUILD) \ - PREFIX= \ - DEVEL_PREFIX=/ \ - RUNTIME_PREFIX=/ \ - HOSTCC="$(CC_FOR_BUILD)" \ - CPU_CFLAGS="$(TARGET_CFLAGS)" \ - MULTILIB_DIR=/$(ADK_TARGET_LIBC_PATH) \ - all - touch $@ - -$(WRKBUILD)/.installed: $(WRKBUILD)/.compiled - $(MAKE) -C $(WRKBUILD) \ - PREFIX=$(STAGING_TARGET_DIR) \ - DEVEL_PREFIX=/usr/ \ - DEVEL_PREFIX_LIB=/ \ - RUNTIME_PREFIX=/ \ - CPU_CFLAGS="$(TARGET_CFLAGS)" \ - MULTILIB_DIR=/$(ADK_TARGET_LIBC_PATH) \ - install_dev install_runtime - rm -rf $(STAGING_TARGET_DIR)/$(ADK_TARGET_LIBC_PATH)/libc.so - ln -s libc.so.0 $(STAGING_TARGET_DIR)/$(ADK_TARGET_LIBC_PATH)/libc.so - touch $@ - -else - $(WRKBUILD)/.compiled: $(MAKE) ${UCLIBC_MAKEOPTS} -C $(WRKBUILD) \ PREFIX= \ @@ -141,6 +114,5 @@ $(WRKBUILD)/.installed: $(WRKBUILD)/.install_headers rm -rf $(STAGING_TARGET_DIR)/lib/libc.so ln -s libc.so.0 $(STAGING_TARGET_DIR)/lib/libc.so touch $@ -endif include ${TOPDIR}/mk/toolchain.mk -- cgit v1.2.3 From 14b1dc5940bd35637fd901418fbf6c2fe1974fec Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Mon, 8 Oct 2012 23:12:28 +0200 Subject: finetune multilib support a lot, cleanup eglibc/glibc Makefiles while there --- package/eglibc/Makefile | 68 ++++--------- package/glibc/Makefile | 51 +++++++--- package/libgcc/Makefile | 8 ++ package/librt/Makefile | 4 +- package/libssp/Makefile | 47 +++++++++ target/config/Config.in | 26 ++--- target/x86_64/target.mk | 6 +- toolchain/eglibc/Makefile | 203 ++++++++++++++++++------------------- toolchain/eglibc/Makefile.inc | 26 +++++ toolchain/eglibc/Makefile.multilib | 13 +++ toolchain/glibc/Makefile | 95 ++++++++++++++++- toolchain/glibc/Makefile.multilib | 13 +++ toolchain/kernel-headers/Makefile | 10 +- 13 files changed, 382 insertions(+), 188 deletions(-) create mode 100644 package/libssp/Makefile create mode 100644 toolchain/eglibc/Makefile.multilib create mode 100644 toolchain/glibc/Makefile.multilib (limited to 'package') diff --git a/package/eglibc/Makefile b/package/eglibc/Makefile index 40d1a4848..fe30f490e 100644 --- a/package/eglibc/Makefile +++ b/package/eglibc/Makefile @@ -3,6 +3,7 @@ include $(TOPDIR)/rules.mk include $(TOPDIR)/toolchain/eglibc/Makefile.inc +include $(TOPDIR)/toolchain/eglibc/Makefile.multilib PKG_DESCR:= embedded GNU C library PKG_SECTION:= base @@ -21,60 +22,32 @@ CONFIG_STYLE:= manual BUILD_STYLE:= manual INSTALL_STYLE:= manual -EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \ - --host=$(REAL_GNU_TARGET_NAME) \ - --with-headers=$(STAGING_TARGET_DIR)/usr/include \ - --disable-nls \ - --without-cvs \ - --disable-profile \ - --disable-debug \ - --enable-kernel=2.6.0 \ - --without-gd \ - --with-__thread \ - --with-tls \ - --enable-add-ons - -EGLIBC_ENV:= PATH='${TARGET_PATH}' \ - GCC_HONOUR_COPTS=s \ - BUILD_CC=${CC_FOR_BUILD} \ - CFLAGS="$(TARGET_CFLAGS)" \ - CC=${REAL_GNU_TARGET_NAME}-gcc \ - CXX=${REAL_GNU_TARGET_NAME}-g++ \ - AR=${REAL_GNU_TARGET_NAME}-ar \ - RANLIB=${REAL_GNU_TARGET_NAME}-ranlib \ - libc_cv_forced_unwind=yes \ - libc_cv_c_cleanup=yes \ - libc_cv_gnu99_inline=yes \ - libc_cv_slibdir="/lib" - # compile nothing, eglibc is already build in toolchain directory do-install: -ifeq ($(ADK_LOCALES),y) - ${INSTALL_DIR} $(IDIR_EGLIBC)/usr/bin - $(CP) $(STAGING_TARGET_DIR)/usr/bin/locale $(IDIR_EGLIBC)/usr/bin -endif - ${INSTALL_DIR} $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH) $(IDIR_EGLIBC)/etc \ +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) + for abi in $(TABI); do \ + ${INSTALL_DIR} $(IDIR_EGLIBC)/lib$${abi/*:/} $(IDIR_EGLIBC)/usr/lib$${abi/*:/} ; \ + $(CP) $(STAGING_TARGET_DIR)/lib/ld* $(IDIR_EGLIBC)/lib$${abi/*:/} ; \ + -for file in libc libcrypt libdl libm libresolv libutil libnsl libnss_dns libnss_files; do \ + $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/$$file.so* $(IDIR_EGLIBC)/lib$${abi/*:/}; \ + $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/$$file-$(PKG_VERSION).so $(IDIR_EGLIBC)/lib$${abi/*:/}; \ + done ; \ + done +else + ${INSTALL_DIR} $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH) \ $(IDIR_EGLIBC)/usr/lib $(IDIR_EGLIBC)/usr/bin -ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y) - $(CP) $(STAGING_TARGET_DIR)/lib/libssp.so* $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH) -endif $(CP) $(STAGING_TARGET_DIR)/lib/ld* $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH) -for file in libc libcrypt libdl libm libresolv libutil libnsl libnss_dns libnss_files; do \ $(CP) $(STAGING_TARGET_DIR)/lib/$$file.so* $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH); \ $(CP) $(STAGING_TARGET_DIR)/lib/$$file-$(PKG_VERSION).so $(IDIR_EGLIBC)/$(ADK_TARGET_LIBC_PATH); \ done - ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/gai.conf ${IDIR_EGLIBC}/etc - ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/nscd.conf ${IDIR_EGLIBC}/etc - ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/nsswitch.conf ${IDIR_EGLIBC}/etc $(CP) $(STAGING_TARGET_DIR)/usr/bin/getconf $(IDIR_EGLIBC)/usr/bin -ifeq ($(ADK_TARGET_MULTILIB_X86_32),y) - ${INSTALL_DIR} $(IDIR_EGLIBC)/lib32 $(IDIR_EGLIBC)/usr/lib32 - $(CP) $(STAGING_TARGET_DIR_32)/lib/ld* $(IDIR_EGLIBC)/lib32 - -for file in libc libcrypt libdl libm libresolv libutil libnsl libnss_dns libnss_files; do \ - $(CP) $(STAGING_TARGET_DIR_32)/lib/$$file.so* $(IDIR_EGLIBC)/lib32; \ - $(CP) $(STAGING_TARGET_DIR_32)/lib/$$file-$(PKG_VERSION).so $(IDIR_EGLIBC)/lib32; \ - done +ifeq ($(ADK_LOCALES),y) + $(CP) $(STAGING_TARGET_DIR)/usr/bin/locale $(IDIR_EGLIBC)/usr/bin +endif endif + ${INSTALL_DIR} $(IDIR_EGLIBC)/etc + ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/{gai,nscd,nsswitch}.conf ${IDIR_EGLIBC}/etc eglibc-static-install: ${INSTALL_DIR} $(IDIR_EGLIBC_STATIC)/usr/lib @@ -106,13 +79,14 @@ endif (cd $(WRKBUILD); \ ${EGLIBC_ENV} \ $(TOOLCHAIN_BUILD_DIR)/w-$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE)/$(PKG_NAME)-$(PKG_VERSION)/libc/configure \ + --host=$(REAL_GNU_TARGET_NAME) \ --prefix=$(IDIR_EGLIBC_DEV)/usr \ --with-headers=$(IDIR_EGLIBC_DEV)/usr/include \ ${EGLIBC_CONFOPTS} \ ); - PATH='${TARGET_PATH}' $(MAKE) -C $(WRKBUILD) \ - install-headers install-bootstrap-headers=yes - @touch $(IDIR_EGLIBC_DEV)/usr/include/gnu/stubs.h + PATH='${TARGET_PATH}' $(MAKE) -C $(WRKBUILD) install-headers install-bootstrap-headers=yes + touch $(IDIR_EGLIBC_DEV)/usr/include/gnu/stubs.h + touch $(IDIR_EGLIBC_DEV)/usr/include/gnu/stubs-{32,x32,64}.h @find $(IDIR_EGLIBC_DEV) -name .install -exec rm {} \; @find $(IDIR_EGLIBC_DEV) -name ..install.cmd -exec rm {} \; # conflicts with libiconv diff --git a/package/glibc/Makefile b/package/glibc/Makefile index 9655288a6..355595ffa 100644 --- a/package/glibc/Makefile +++ b/package/glibc/Makefile @@ -3,16 +3,17 @@ include $(TOPDIR)/rules.mk -TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) -TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) +TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) +TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) include $(TOPDIR)/toolchain/glibc/Makefile.inc +include $(TOPDIR)/toolchain/glibc/Makefile.multilib PKG_DESCR:= GNU C library PKG_VER:= 2.16 PKG_SECTION:= base PKG_OPTS:= noremove -PKG_SUBPKGS:= GLIBC GLIBC_DEV +PKG_SUBPKGS:= GLIBC GLIBC_DEV GLIBC_STATIC NO_DISTFILES:= 1 @@ -20,9 +21,10 @@ include $(TOPDIR)/mk/package.mk $(eval $(call PKG_template,GLIBC,glibc,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS})) $(eval $(call PKG_template,GLIBC_DEV,glibc-dev,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS})) +$(eval $(call PKG_template,GLIBC_STATIC,$(PKG_NAME)-static,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS})) -TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) -TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) +#TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) +#TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) XAKE_FLAGS+= GCC_HONOUR_COPTS=s CONFIG_STYLE:= manual @@ -31,24 +33,48 @@ INSTALL_STYLE:= manual # compile nothing, glibc is already build in toolchain directory do-install: - ${INSTALL_DIR} ${IDIR_GLIBC}/$(ADK_TARGET_LIBC_PATH) ${IDIR_GLIBC}/etc - ${CP} ${STAGING_TARGET_DIR}/etc/gai.conf ${IDIR_GLIBC}/etc - ${CP} ${STAGING_TARGET_DIR}/etc/nscd.conf ${IDIR_GLIBC}/etc - ${CP} ${STAGING_TARGET_DIR}/etc/nsswitch.conf ${IDIR_GLIBC}/etc -ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y) - $(CP) $(STAGING_TARGET_DIR)/lib/libssp.so* $(IDIR_GLIBC)/$(ADK_TARGET_LIBC_PATH) -endif +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) + for abi in $(TABI); do \ + ${INSTALL_DIR} $(IDIR_GLIBC)/lib$${abi/*:/} $(IDIR_GLIBC)/usr/lib$${abi/*:/} ; \ + $(CP) $(STAGING_TARGET_DIR)/lib/ld* $(IDIR_GLIBC)/lib$${abi/*:/} ; \ + -for file in libc libcrypt libdl libm libresolv libutil libnsl libnss_dns libnss_files; do \ + $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/$$file.so* $(IDIR_GLIBC)/lib$${abi/*:/}; \ + $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/$$file-$(PKG_VERSION).so $(IDIR_GLIBC)/lib$${abi/*:/}; \ + done ; \ + done +else + ${INSTALL_DIR} ${IDIR_GLIBC}/$(ADK_TARGET_LIBC_PATH) $(CP) $(STAGING_TARGET_DIR)/lib/ld*.so* $(IDIR_GLIBC)/$(ADK_TARGET_LIBC_PATH) for file in libc libcrypt libdl libm libnsl libresolv libutil libnss_compat libnss_dns libnss_files; do \ $(CP) $(STAGING_TARGET_DIR)/lib/$$file.so* $(IDIR_GLIBC)/$(ADK_TARGET_LIBC_PATH); \ $(CP) $(STAGING_TARGET_DIR)/lib/$$file-$(PKG_VER).so $(IDIR_GLIBC)/$(ADK_TARGET_LIBC_PATH); \ done + $(CP) $(STAGING_TARGET_DIR)/usr/bin/getconf $(IDIR_GLIBC)/usr/bin +ifeq ($(ADK_LOCALES),y) + $(CP) $(STAGING_TARGET_DIR)/usr/bin/locale $(IDIR_GLIBC)/usr/bin +endif +endif + ${INSTALL_DIR} ${IDIR_GLIBC}/etc + ${INSTALL_DATA} ${STAGING_TARGET_DIR}/etc/{gai,nscd,nsswitch}.conf ${IDIR_GLIBC}/etc + +glibc-static-install: + ${INSTALL_DIR} $(IDIR_GLIBC_STATIC)/usr/lib + $(CP) $(STAGING_TARGET_DIR)/usr/lib/libc.a $(IDIR_GLIBC_STATIC)/usr/lib glibc-dev-install: echo $(TARGET_CFLAGS) ${INSTALL_DIR} $(IDIR_GLIBC_DEV)/$(ADK_TARGET_LIBC_PATH) $(IDIR_GLIBC_DEV)/usr/lib # install linker script -cp ./files/libc.so.$(CPU_ARCH) $(IDIR_GLIBC_DEV)/usr/lib/libc.so +ifeq ($(ADK_TARGET_ABI_O32),y) + $(SED) "s#@@ELFFORMAT@@#elf32-tradlittlemips#" $(IDIR_GLIBC_DEV)/usr/lib/libc.so +endif +ifeq ($(ADK_TARGET_ABI_N32),y) + $(SED) "s#@@ELFFORMAT@@#elf32-ntradlittlemips#" $(IDIR_GLIBC_DEV)/usr/lib/libc.so +endif +ifeq ($(ADK_TARGET_ABI_N64),y) + $(SED) "s#@@ELFFORMAT@@#elf64-tradlittlemips#" $(IDIR_GLIBC_DEV)/usr/lib/libc.so +endif ${CP} ${STAGING_TARGET_DIR}/usr/lib/crt* ${IDIR_GLIBC_DEV}/usr/lib ${CP} ${STAGING_TARGET_DIR}/usr/lib/libc_nonshared.a ${IDIR_GLIBC_DEV}/usr/lib -for file in libcrypt libdl libm libresolv libutil; do \ @@ -69,6 +95,7 @@ glibc-dev-install: ); $(GLIBC_ENV) $(MAKE) -C $(WRKBUILD) cross-compiling=yes install-headers touch $(IDIR_GLIBC_DEV)/usr/include/gnu/stubs.h + touch $(IDIR_GLIBC_DEV)/usr/include/gnu/stubs-{32,x32,64}.h touch $(IDIR_GLIBC_DEV)/usr/include/bits/stdio_lim.h # WORKAROUND: bits/syscall.h is only installed via install-others target $(CP) $(STAGING_TARGET_DIR)/usr/include/bits/syscall.h \ diff --git a/package/libgcc/Makefile b/package/libgcc/Makefile index bea6792e7..fbe82117f 100644 --- a/package/libgcc/Makefile +++ b/package/libgcc/Makefile @@ -26,5 +26,13 @@ ifeq ($(ADK_NATIVE),) ${INSTALL_DIR} ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH) ${CP} ${STAGING_TARGET_DIR}/lib/libgcc*.so* ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH) endif +ifeq ($(ADK_TARGET_MULTILIB_X86_32),y) + ${INSTALL_DIR} ${IDIR_LIBGCC}/lib32 + ${CP} ${STAGING_TARGET_DIR_32}/lib/libgcc*.so* ${IDIR_LIBGCC}/lib32 +endif +ifeq ($(ADK_TARGET_MULTILIB_X86_X32),y) + ${INSTALL_DIR} ${IDIR_LIBGCC}/libx32 + ${CP} ${STAGING_TARGET_DIR_X32}/lib/libgcc*.so* ${IDIR_LIBGCC}/libx32 +endif include ${TOPDIR}/mk/pkg-bottom.mk diff --git a/package/librt/Makefile b/package/librt/Makefile index e3f9ee052..9695257f8 100644 --- a/package/librt/Makefile +++ b/package/librt/Makefile @@ -40,8 +40,8 @@ INSTALL_STYLE:= manual librt-install: ifeq ($(ADK_NATIVE),) - ${INSTALL_DIR} ${IDIR_LIBR}/$(ADK_TARGET_LIBC_PATH) - ${CP} ${STAGING_TARGET_DIR}/lib/librt*.so* ${IDIR_LIBR}/$(ADK_TARGET_LIBC_PATH) + ${INSTALL_DIR} ${IDIR_LIBRT}/$(ADK_TARGET_LIBC_PATH) + ${CP} ${STAGING_TARGET_DIR}/lib/librt*.so* ${IDIR_LIBRT}/$(ADK_TARGET_LIBC_PATH) endif include ${TOPDIR}/mk/pkg-bottom.mk diff --git a/package/libssp/Makefile b/package/libssp/Makefile new file mode 100644 index 000000000..4f43bb425 --- /dev/null +++ b/package/libssp/Makefile @@ -0,0 +1,47 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include ${TOPDIR}/rules.mk + +ifeq ($(ADK_TARGET_LIB_GLIBC),y) +include ${TOPDIR}/toolchain/glibc/Makefile.inc +endif +ifeq ($(ADK_TARGET_LIB_EGLIBC),y) +include ${TOPDIR}/toolchain/eglibc/Makefile.inc +endif +ifeq ($(ADK_TARGET_LIB_UCLIBC),y) +include ${TOPDIR}/toolchain/uClibc/Makefile.inc +endif +ifeq ($(ADK_NATIVE),y) +PKG_VERSION:= 1.0 +PKG_RELEASE:= 1 +endif + +PKG_NAME:= libssp +PKG_DESCR:= Stack smashing protection library +PKG_SECTION:= libs +PKG_OPTS:= noremove + +NO_DISTFILES:= 1 + +PKG_SUBPKGS:= LIBSSP + +ifeq ($(ADK_STATIC),y) +PKG_OPTS+= libonly +endif + +include ${TOPDIR}/mk/package.mk + +$(eval $(call PKG_template,LIBSSP,libssp,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS})) + +CONFIG_STYLE:= manual +BUILD_STYLE:= manual +INSTALL_STYLE:= manual + +libssp-install: +ifeq ($(ADK_NATIVE),) + ${INSTALL_DIR} ${IDIR_LIBSSP}/$(ADK_TARGET_LIBC_PATH) + ${CP} ${STAGING_TARGET_DIR}/lib/libssp.so* ${IDIR_LIBSSP}/$(ADK_TARGET_LIBC_PATH) +endif + +include ${TOPDIR}/mk/pkg-bottom.mk diff --git a/target/config/Config.in b/target/config/Config.in index 32a254900..db7f09a5d 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -92,14 +92,17 @@ depends on ADK_TARGET_KERNEL64 && ADK_LINUX_X86_64 config ADK_TARGET_ABI_64 boolean "64 Bit ABI" select ADK_64 + select ADK_TARGET_MULTILIB_X86_64 if ADK_TARGET_WITH_MULTILIB config ADK_TARGET_ABI_X32 boolean "x32 ABI (new)" select ADK_x32 + select ADK_TARGET_MULTILIB_X86_X32 if ADK_TARGET_WITH_MULTILIB config ADK_TARGET_ABI_32 boolean "32 Bit ABI" select ADK_32 + select ADK_TARGET_MULTILIB_X86_32 if ADK_TARGET_WITH_MULTILIB endchoice @@ -126,32 +129,17 @@ config ADK_TARGET_WITH_MULTILIB config ADK_TARGET_MULTILIB_X86_64 boolean "64 bit libraries" depends on ADK_LINUX_X86_64 && ADK_TARGET_WITH_MULTILIB - default y + default y if ADK_64 config ADK_TARGET_MULTILIB_X86_32 boolean "32 bit libraries" depends on ADK_LINUX_X86_64 && ADK_TARGET_WITH_MULTILIB + default y if ADK_32 config ADK_TARGET_MULTILIB_X86_X32 boolean "x32 bit libraries" depends on ADK_LINUX_X86_64 && ADK_TARGET_WITH_MULTILIB - -choice -prompt "Default Library (compile all applications with this library)" -config ADK_TARGET_MULTILIB_X86_64_DEF - boolean "64 Bit libraries as default" - depends on ADK_TARGET_MULTILIB_X86_64 - -config ADK_TARGET_MULTILIB_X86_32_DEF - boolean "32 Bit libraries as default" - depends on ADK_TARGET_MULTILIB_X86_32 - -config ADK_TARGET_MULTILIB_X86_X32_DEF - boolean "x32 Bit libraries as default" - depends on ADK_TARGET_MULTILIB_X86_X32 - -endchoice -endmenu + default y if ADK_x32 config ADK_MULTILIB_TARGET string @@ -178,6 +166,8 @@ config ADK_MULTILIB_TARGET && ADK_TARGET_MULTILIB_X86_X32 +endmenu + # submodel support # choice diff --git a/target/x86_64/target.mk b/target/x86_64/target.mk index 53d0acf59..1d5465d7a 100644 --- a/target/x86_64/target.mk +++ b/target/x86_64/target.mk @@ -2,4 +2,8 @@ include $(TOPDIR)/mk/kernel-ver.mk ARCH:= x86 CPU_ARCH:= x86_64 TARGET_OPTIMIZATION:= -O2 -pipe -TARGET_CFLAGS_ARCH:= $(ADK_TARGET_CFLAGS) +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +TARGET_CFLAGS_ARCH:= $(ADK_TARGET_CFLAGS) +else +TARGET_CFLAGS_ARCH:= $(ADK_TARGET_CFLAGS) $(ADK_TARGET_ABI_CFLAGS) +endif diff --git a/toolchain/eglibc/Makefile b/toolchain/eglibc/Makefile index 7f369d3ed..b165d1ba7 100644 --- a/toolchain/eglibc/Makefile +++ b/toolchain/eglibc/Makefile @@ -4,53 +4,55 @@ include $(TOPDIR)/rules.mk include ../rules.mk include Makefile.inc +include Makefile.multilib include ${TOPDIR}/mk/buildhlp.mk ifneq ($(ADK_DEBUG),) TARGET_CFLAGS+= -O2 endif # ssp partially supported -TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) - -EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \ - --without-cvs \ - --disable-profile \ - --disable-debug \ - --enable-kernel=2.6.0 \ - --without-gd \ - --with-__thread \ - --with-tls \ - --enable-add-ons \ - $(NLS) - -EGLIBC_ENV:= PATH='${TARGET_PATH}' \ - BUILD_CC=${CC_FOR_BUILD} \ - CFLAGS="$(TARGET_CFLAGS)" \ - CC=${REAL_GNU_TARGET_NAME}-gcc \ - CXX=${REAL_GNU_TARGET_NAME}-g++ \ - AR=${REAL_GNU_TARGET_NAME}-ar \ - RANLIB=${REAL_GNU_TARGET_NAME}-ranlib \ - libc_cv_cc_with_libunwind=no \ - libc_cv_forced_unwind=yes \ - libc_cv_c_cleanup=yes \ - libc_cv_gnu99_inline=yes \ - libc_cv_initfini_array=yes \ - libc_cv_slibdir="/lib" +TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS)) ifeq ($(ADK_TARGET_NO_FPU),y) EGLIBC_CONFOPTS+= --without-fp endif EGLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers -EGLIBC_BUILD_DIR_INITIAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers32 EGLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final -EGLIBC_BUILD_DIR_FINAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final32 ifeq ($(ADK_TARGET_WITH_MULTILIB),y) -$(WRKBUILD)/.headers_configure: $(WRKBUILD)/.headers_configure32 +$(WRKBUILD)/.headers_configure: + for abi in $(TABI); do \ + mkdir -p $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \ + (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \ + ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); \ + $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ + $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}/option-groups.config; \ + (cd $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \ + ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \ + $(WRKBUILD)/libc/configure \ + --prefix=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr \ + --with-headers=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include \ + --host=$${abi/:*/} \ + ${EGLIBC_CONFOPTS} \ + ); \ + done + touch $@ + +$(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure + for abi in $(TABI); do \ + (cd $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \ + ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \ + $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \ + ); \ + touch $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include/gnu/stubs.h; \ + touch $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include/gnu/stubs-{32,x32,64}.h; \ + done + touch $@ else $(WRKBUILD)/.headers_configure: -endif mkdir -p $(EGLIBC_BUILD_DIR_INITIAL) (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \ ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); @@ -58,6 +60,7 @@ endif $(EGLIBC_BUILD_DIR_INITIAL)/option-groups.config (cd $(EGLIBC_BUILD_DIR_INITIAL); \ ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \ $(WRKBUILD)/libc/configure \ --prefix=$(STAGING_TARGET_DIR)/usr \ --with-headers=$(STAGING_TARGET_DIR)/usr/include \ @@ -68,38 +71,14 @@ endif $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure (cd $(EGLIBC_BUILD_DIR_INITIAL); \ - PATH='${TARGET_PATH}' \ ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \ $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \ ); touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h - touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-64.h - touch $@ - -$(WRKBUILD)/.headers_configure32: - mkdir -p $(EGLIBC_BUILD_DIR_INITIAL32) - (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \ - ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); - $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ - $(EGLIBC_BUILD_DIR_INITIAL32)/option-groups.config - (cd $(EGLIBC_BUILD_DIR_INITIAL32); \ - ${EGLIBC_ENV} \ - CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ - $(WRKBUILD)/libc/configure \ - --prefix=$(STAGING_TARGET_DIR_32)/usr \ - --with-headers=$(STAGING_TARGET_DIR_32)/usr/include \ - --host=i486-openadk-linux-gnu \ - ${EGLIBC_CONFOPTS} \ - ); - (cd $(EGLIBC_BUILD_DIR_INITIAL32); \ - PATH='${TARGET_PATH}' \ - ${EGLIBC_ENV} \ - CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ - $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \ - ); - touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs.h - touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs-64.h + touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h touch $@ +endif ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y) EGLIBC_ENV+= libc_cv_ssp=yes @@ -108,15 +87,70 @@ EGLIBC_ENV+= libc_cv_ssp=no endif ifeq ($(ADK_TARGET_WITH_MULTILIB),y) -$(WRKBUILD)/.configured: $(WRKBUILD)/.configured32 -else $(WRKBUILD)/.configured: + for abi in $(TABI); do \ + mkdir -p $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} ;\ + $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ + $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/}/option-groups.config ;\ + (cd $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/}; \ + ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \ + $(WRKBUILD)/libc/configure \ + --prefix=/usr \ + --enable-shared \ + --enable-stackguard-randomization \ + --host=$${abi/:*/} \ + ${EGLIBC_CONFOPTS} \ + ); \ + done + touch $@ + +$(EGLIBC_BUILD_DIR_FINAL)/libc.so: +$(WRKBUILD)/.compiled: $(WRKBUILD)/.configured + for abi in $(TABI); do \ + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} cross-compiling=yes all ;\ + done + touch $@ + +$(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so + for abi in $(TABI); do \ + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\ + done +ifeq ($(ADK_TARGET_ABI_64),y) + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install +endif +ifeq ($(ADK_TARGET_ABI_32),y) + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-32 install_root=$(STAGING_TARGET_DIR) install +endif +ifeq ($(ADK_TARGET_ABI_X32),y) + ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-x32 install_root=$(STAGING_TARGET_DIR) install endif + touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h + touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h + # for libgcc build we need C library files, 64 bit default + mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2 ; \ + $(CP) $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)-64/usr/lib/* \ + $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/; \ + rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/libc.so ; \ + -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 + ${INSTALL_DIR} ${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 $(EGLIBC_BUILD_DIR_FINAL) $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ $(EGLIBC_BUILD_DIR_FINAL)/option-groups.config (cd $(EGLIBC_BUILD_DIR_FINAL); \ ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \ $(WRKBUILD)/libc/configure \ --prefix=/usr \ --enable-shared \ @@ -128,55 +162,20 @@ endif $(EGLIBC_BUILD_DIR_FINAL)/libc.so: $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) cross-compiling=yes all + ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \ + $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) cross-compiling=yes all touch $@ $(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install + ${EGLIBC_ENV} \ + CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \ + $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install + ${INSTALL_DIR} ${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 $@ - -$(WRKBUILD)/.configured32: - mkdir -p $(EGLIBC_BUILD_DIR_FINAL32) - $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ - $(EGLIBC_BUILD_DIR_FINAL32)/option-groups.config - (cd $(EGLIBC_BUILD_DIR_FINAL32); \ - ${EGLIBC_ENV} \ - CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \ - $(WRKBUILD)/libc/configure \ - --prefix=/usr \ - --enable-shared \ - --enable-stackguard-randomization \ - --host=i486-openadk-linux-gnu \ - ${EGLIBC_CONFOPTS} \ - ); - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) cross-compiling=yes all - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) install_root=$(STAGING_TARGET_DIR_32) install - mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32 - $(CP) $(STAGING_TARGET_DIR_32)/lib/* $(STAGING_TARGET_DIR_32)/usr/lib/* \ - $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32 - -rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32/libc.so - touch $@ - -$(WRKBUILD)/.configuredx32: - mkdir -p $(EGLIBC_BUILD_DIR_FINALX32) - $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \ - $(EGLIBC_BUILD_DIR_FINALX32)/option-groups.config - (cd $(EGLIBC_BUILD_DIR_FINALX32); \ - ${EGLIBC_ENV} \ - CC=${REAL_GNU_TARGET_NAME}-gcc -mx32 \ - $(WRKBUILD)/libc/configure \ - --prefix=/usr \ - --enable-shared \ - --enable-stackguard-randomization \ - --host=x86_64-x32-openadk-linux-gnu \ - ${EGLIBC_CONFOPTS} \ - ); - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) cross-compiling=yes all - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) install_root=$(STAGING_TARGET_DIR_X32) install - touch $@ - +endif include ${TOPDIR}/mk/toolchain.mk diff --git a/toolchain/eglibc/Makefile.inc b/toolchain/eglibc/Makefile.inc index 457969ef6..2541bb5e5 100644 --- a/toolchain/eglibc/Makefile.inc +++ b/toolchain/eglibc/Makefile.inc @@ -6,3 +6,29 @@ PKG_VERSION:= 2.16 PKG_RELEASE:= 1 PKG_MD5SUM:= 97b0956c312e747dcead4c9459ac2aa5 PKG_SITES:= http://openadk.org/distfiles/ +EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \ + --without-cvs \ + --disable-profile \ + --disable-debug \ + --enable-kernel=2.6.0 \ + --without-gd \ + --with-__thread \ + --with-tls \ + --enable-add-ons \ + $(NLS) + +EGLIBC_ENV:= PATH='${TARGET_PATH}' \ + BUILD_CC=${CC_FOR_BUILD} \ + GCC_HONOUR_COPTS=s \ + CFLAGS="$(TARGET_CFLAGS)" \ + CC=${REAL_GNU_TARGET_NAME}-gcc \ + CXX=${REAL_GNU_TARGET_NAME}-g++ \ + AR=${REAL_GNU_TARGET_NAME}-ar \ + RANLIB=${REAL_GNU_TARGET_NAME}-ranlib \ + libc_cv_cc_with_libunwind=no \ + libc_cv_forced_unwind=yes \ + libc_cv_c_cleanup=yes \ + libc_cv_gnu99_inline=yes \ + libc_cv_initfini_array=yes \ + libc_cv_slibdir="/lib" + diff --git a/toolchain/eglibc/Makefile.multilib b/toolchain/eglibc/Makefile.multilib new file mode 100644 index 000000000..08be0a100 --- /dev/null +++ b/toolchain/eglibc/Makefile.multilib @@ -0,0 +1,13 @@ +# multilib support +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +TABI:= +ifeq ($(ADK_TARGET_MULTILIB_X86_X32),y) +TABI+=x86_64-openadk-linux-gnu:x32 +endif +ifeq ($(ADK_TARGET_MULTILIB_X86_32),y) +TABI+=i486-openadk-linux-gnu:32 +endif +ifeq ($(ADK_TARGET_MULTILIB_X86_64),y) +TABI+=x86_64-openadk-linux-gnu:64 +endif +endif diff --git a/toolchain/glibc/Makefile b/toolchain/glibc/Makefile index 65341591b..fbcbc617a 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,67 @@ $(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 $@ +$(GLIBC_BUILD_DIR_FINAL)/libc.so: +$(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: $(GLIBC_BUILD_DIR_FINAL)/libc.so + for abi in $(TABI); do \ + ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\ + done +ifeq ($(ADK_TARGET_ABI_64),y) + ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install +endif +ifeq ($(ADK_TARGET_ABI_32),y) + ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-32 install_root=$(STAGING_TARGET_DIR) install +endif +ifeq ($(ADK_TARGET_ABI_X32),y) + ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-x32 install_root=$(STAGING_TARGET_DIR) install +endif + # for libgcc build we need C library files, 64 bit default + mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2 ; \ + $(CP) $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)-64/usr/lib/* \ + $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/; \ + rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/libc.so ; \ + -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 +154,12 @@ $(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 include ${TOPDIR}/mk/toolchain.mk diff --git a/toolchain/glibc/Makefile.multilib b/toolchain/glibc/Makefile.multilib new file mode 100644 index 000000000..08be0a100 --- /dev/null +++ b/toolchain/glibc/Makefile.multilib @@ -0,0 +1,13 @@ +# multilib support +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +TABI:= +ifeq ($(ADK_TARGET_MULTILIB_X86_X32),y) +TABI+=x86_64-openadk-linux-gnu:x32 +endif +ifeq ($(ADK_TARGET_MULTILIB_X86_32),y) +TABI+=i486-openadk-linux-gnu:32 +endif +ifeq ($(ADK_TARGET_MULTILIB_X86_64),y) +TABI+=x86_64-openadk-linux-gnu:64 +endif +endif diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile index 405119000..e81fa87eb 100644 --- a/toolchain/kernel-headers/Makefile +++ b/toolchain/kernel-headers/Makefile @@ -10,9 +10,17 @@ $(WRKBUILD)/.headers: $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(STAGING_DIR)/usr \ headers_install +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=x86 V=1 \ - INSTALL_HDR_PATH=$(STAGING_TARGET_DIR_32)/usr \ + INSTALL_HDR_PATH=$(STAGING_TARGET_DIR)-32/usr \ headers_install + $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=x86 V=1 \ + INSTALL_HDR_PATH=$(STAGING_TARGET_DIR)-x32/usr \ + headers_install + $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=x86 V=1 \ + INSTALL_HDR_PATH=$(STAGING_TARGET_DIR)-64/usr \ + headers_install +endif $(MAKE) -C $(WRKBUILD) HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(LINUX_HEADER_DIR) \ headers_install -- cgit v1.2.3 From 85d494466fadacdb0b020b6c3aa6bde77e5350ac Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Tue, 9 Oct 2012 00:03:42 +0200 Subject: enable multilib --- package/binutils/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'package') diff --git a/package/binutils/Makefile b/package/binutils/Makefile index 9bd18ce93..43043514c 100644 --- a/package/binutils/Makefile +++ b/package/binutils/Makefile @@ -19,6 +19,12 @@ include ${TOPDIR}/mk/package.mk $(eval $(call PKG_template,BINUTILS,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) $(eval $(call PKG_template,LIBBFD,libbfd,${PKG_VERSION}-${PKG_RELEASE},,${PKGSD_LIBBFD},${PKGSC_LIBBFD})) +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +CONFIGURE_ARGS+= --enable-multilib +else +CONFIGURE_ARGS+= --disable-multilib +endif + TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) TARGET_CFLAGS+= -fPIC ifeq ($(ADK_NATIVE),) -- cgit v1.2.3 From 581c747ae157d8802dc704786eaceb648da79e28 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 10 Oct 2012 10:54:20 +0200 Subject: fix 32 Bit multilib builds --- mk/build.mk | 6 +++--- mk/toolchain.mk | 1 + mk/vars.mk | 3 ++- package/dropbear/Makefile | 1 + rules.mk | 1 + target/config/Config.in | 4 ++++ target/x86_64/target.mk | 4 ---- toolchain/Makefile | 7 +++++++ toolchain/eglibc/Makefile | 34 +++++++++++++++++++--------------- toolchain/eglibc/Makefile.inc | 2 -- toolchain/eglibc/Makefile.multilib | 3 +++ toolchain/glibc/Makefile | 36 +++++++++++++++++++++--------------- toolchain/glibc/Makefile.multilib | 3 +++ 13 files changed, 65 insertions(+), 40 deletions(-) (limited to 'package') diff --git a/mk/build.mk b/mk/build.mk index 0ad4ea788..fa2e21fd5 100644 --- a/mk/build.mk +++ b/mk/build.mk @@ -158,12 +158,12 @@ ifeq ($(ADK_NATIVE),y) else ifeq ($(ADK_TOOLCHAIN),y) ifeq ($(ADK_TOOLCHAIN_ONLY),y) - $(MAKE) -f mk/build.mk toolchain/install tools/install jtools/install package/compile + $(MAKE) -f mk/build.mk toolchain/fixup tools/install jtools/install package/compile else - $(MAKE) -f mk/build.mk toolchain/install tools/install jtools/install package/compile root_clean package/install + $(MAKE) -f mk/build.mk toolchain/fixup tools/install jtools/install package/compile root_clean package/install endif else - $(MAKE) -f mk/build.mk toolchain/install tools/install jtools/install target/config-prepare target/compile package/compile root_clean package/install target/install package_index + $(MAKE) -f mk/build.mk toolchain/fixup tools/install jtools/install target/config-prepare target/compile package/compile root_clean package/install target/install package_index endif endif diff --git a/mk/toolchain.mk b/mk/toolchain.mk index 6a181a444..80860a0f1 100644 --- a/mk/toolchain.mk +++ b/mk/toolchain.mk @@ -2,5 +2,6 @@ prepare: ${WRKDIST}/.prepared $(WRKBUILD)/.headers configure: ${WRKBUILD}/.configured compile: $(WRKBUILD)/.compiled install: $(WRKBUILD)/.installed +fixup: $(WRKBUILD)/.fixup clean: rm -rf $(WRKDIR) diff --git a/mk/vars.mk b/mk/vars.mk index bdfd333ad..6fc2eb192 100644 --- a/mk/vars.mk +++ b/mk/vars.mk @@ -99,7 +99,8 @@ TARGET_CFLAGS:= $(TARGET_CFLAGS_ARCH) -fwrapv -fno-ident -fhonour-copts TARGET_CXXFLAGS:= $(TARGET_CFLAGS_ARCH) -fwrapv -fno-ident TARGET_LDFLAGS:= -L$(STAGING_TARGET_DIR)/lib -L$(STAGING_TARGET_DIR)/usr/lib \ -Wl,-O2 -Wl,-rpath -Wl,/usr/lib \ - -Wl,-rpath-link -Wl,${STAGING_TARGET_DIR}/usr/lib + -Wl,-rpath-link -Wl,${STAGING_TARGET_DIR}/usr/lib \ + $(ADK_TARGET_ABI_LDFLAGS) ifneq ($(ADK_NATIVE),) TARGET_CPPFLAGS:= diff --git a/package/dropbear/Makefile b/package/dropbear/Makefile index 3728ef8da..31d9c68f8 100644 --- a/package/dropbear/Makefile +++ b/package/dropbear/Makefile @@ -24,6 +24,7 @@ include $(TOPDIR)/mk/package.mk $(eval $(call PKG_template,DROPBEAR,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) $(eval $(call PKG_template,DBCONVERT,dropbearconvert,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_DBCONVERT},${PKG_SECTION})) +TARGET_LDFLAGS+= $(ADK_TARGET_ABI_CFLAGS) BUILD_STYLE:= manual INSTALL_STYLE:= manual CONFIGURE_ARGS+= --disable-pam \ diff --git a/rules.mk b/rules.mk index fa303a953..a66762391 100644 --- a/rules.mk +++ b/rules.mk @@ -33,6 +33,7 @@ ADK_TARGET_ENDIAN:= $(strip $(subst ",, $(ADK_TARGET_ENDIAN))) ADK_TARGET_CPU_ARCH:= $(strip $(subst ",, $(ADK_TARGET_CPU_ARCH))) ADK_TARGET_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_CFLAGS))) ADK_TARGET_ABI_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_ABI_CFLAGS))) +ADK_TARGET_ABI_LDFLAGS:= $(strip $(subst ",, $(ADK_TARGET_ABI_LDFLAGS))) ADK_TARGET_KERNEL_LDFLAGS:= $(strip $(subst ",, $(ADK_TARGET_KERNEL_LDFLAGS))) ADK_TARGET_ABI:= $(strip $(subst ",, $(ADK_TARGET_ABI))) ADK_TARGET_IP:= $(strip $(subst ",, $(ADK_TARGET_IP))) diff --git a/target/config/Config.in b/target/config/Config.in index 5dd14a6d1..bfbfb550c 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -475,6 +475,10 @@ config ADK_TARGET_ABI_CFLAGS default "-mx32" if ADK_TARGET_ABI_X32 default "-m64" if ADK_TARGET_ABI_64 +config ADK_TARGET_ABI_LDFLAGS + string + default "-Wl,-m -Wl,elf_i386" if ADK_TARGET_ABI_32 + config ADK_TARGET_KERNEL_LDFLAGS string default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_N32 diff --git a/target/x86_64/target.mk b/target/x86_64/target.mk index 1d5465d7a..7fe893ec7 100644 --- a/target/x86_64/target.mk +++ b/target/x86_64/target.mk @@ -2,8 +2,4 @@ include $(TOPDIR)/mk/kernel-ver.mk ARCH:= x86 CPU_ARCH:= x86_64 TARGET_OPTIMIZATION:= -O2 -pipe -ifeq ($(ADK_TARGET_WITH_MULTILIB),y) -TARGET_CFLAGS_ARCH:= $(ADK_TARGET_CFLAGS) -else TARGET_CFLAGS_ARCH:= $(ADK_TARGET_CFLAGS) $(ADK_TARGET_ABI_CFLAGS) -endif diff --git a/toolchain/Makefile b/toolchain/Makefile index a32648000..fd92b46f7 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -32,11 +32,13 @@ endif DOWNLOAD:=kernel-headers-download $(patsubst %,%-download,$(TARGETS)) TARGETS_INSTALL:=$(patsubst %,%-install,$(TARGETS)) +FIXUP:=$(patsubst %,%-fixup,$(LIBC)) TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS)) install: $(TARGETS_INSTALL) clean: $(TARGETS_CLEAN) download: $(DOWNLOAD) +fixup: $(FIXUP) gcc-prepare: binutils-install gmp-install mpfr-install mpc-install libelf-install ifeq ($(ADK_TARGET_LIB_GLIBC),y) @@ -47,6 +49,7 @@ endif gcc-configure: $(LIBC)-prepare $(LIBC)-compile: gcc-configure gcc-compile: $(LIBC)-install +$(LIBC)-fixup: gcc-install $(STAGING_HOST_DIR): @mkdir -p $(STAGING_HOST_DIR)/lib @@ -102,6 +105,10 @@ $(STAGING_HOST_DIR): $(MAKE_TRACE); \ fi +%-fixup: %-install + $(TRACE) toolchain/$(patsubst %-fixup,%,$@)/fixup + @$(MAKE) -C $(patsubst %-fixup,%,$@) fixup $(MAKE_TRACE) + %-clean: $(TRACE) toolchain/$(patsubst %-clean,%,$@)/clean @$(MAKE) -C $(patsubst %-clean,%,$@) clean $(MAKE_TRACE) diff --git a/toolchain/eglibc/Makefile b/toolchain/eglibc/Makefile index 0b23169cd..9988ef5de 100644 --- a/toolchain/eglibc/Makefile +++ b/toolchain/eglibc/Makefile @@ -105,33 +105,20 @@ $(WRKBUILD)/.configured: done touch $@ -$(EGLIBC_BUILD_DIR_FINAL)/libc.so: $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured for abi in $(TABI); do \ ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} cross-compiling=yes all ;\ done touch $@ -$(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so +$(WRKBUILD)/.installed: $(WRKBUILD)/.compiled for abi in $(TABI); do \ ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\ done -ifeq ($(ADK_TARGET_ABI_64),y) + # default libgcc searching for 64 bit libraries ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install -endif -ifeq ($(ADK_TARGET_ABI_32),y) - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-32 install_root=$(STAGING_TARGET_DIR) install -endif -ifeq ($(ADK_TARGET_ABI_X32),y) - ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-x32 install_root=$(STAGING_TARGET_DIR) install -endif touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h - # for libgcc build we need C library files, 64 bit default - mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2 ; \ - $(CP) $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)-64/usr/lib/* \ - $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/; \ - rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/libc.so ; \ 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/* \ @@ -178,4 +165,21 @@ $(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so touch $@ endif +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +$(WRKBUILD)/.fixup: +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 + touch $@ +endif + include ${TOPDIR}/mk/toolchain.mk diff --git a/toolchain/eglibc/Makefile.inc b/toolchain/eglibc/Makefile.inc index 2541bb5e5..8214e2237 100644 --- a/toolchain/eglibc/Makefile.inc +++ b/toolchain/eglibc/Makefile.inc @@ -16,7 +16,6 @@ EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \ --with-tls \ --enable-add-ons \ $(NLS) - EGLIBC_ENV:= PATH='${TARGET_PATH}' \ BUILD_CC=${CC_FOR_BUILD} \ GCC_HONOUR_COPTS=s \ @@ -31,4 +30,3 @@ EGLIBC_ENV:= PATH='${TARGET_PATH}' \ libc_cv_gnu99_inline=yes \ libc_cv_initfini_array=yes \ libc_cv_slibdir="/lib" - diff --git a/toolchain/eglibc/Makefile.multilib b/toolchain/eglibc/Makefile.multilib index 08be0a100..47cc0ff99 100644 --- a/toolchain/eglibc/Makefile.multilib +++ b/toolchain/eglibc/Makefile.multilib @@ -1,3 +1,6 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + # multilib support ifeq ($(ADK_TARGET_WITH_MULTILIB),y) TABI:= diff --git a/toolchain/glibc/Makefile b/toolchain/glibc/Makefile index d6aeb64b2..0d3eea92d 100644 --- a/toolchain/glibc/Makefile +++ b/toolchain/glibc/Makefile @@ -100,31 +100,20 @@ $(WRKBUILD)/.configured: done touch $@ -$(GLIBC_BUILD_DIR_FINAL)/libc.so: $(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: $(GLIBC_BUILD_DIR_FINAL)/libc.so +$(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 -ifeq ($(ADK_TARGET_ABI_64),y) + # default libgcc searching for 64 bit libraries ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install -endif -ifeq ($(ADK_TARGET_ABI_32),y) - ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-32 install_root=$(STAGING_TARGET_DIR) install -endif -ifeq ($(ADK_TARGET_ABI_X32),y) - ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-x32 install_root=$(STAGING_TARGET_DIR) install -endif - # for libgcc build we need C library files, 64 bit default - mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2 ; \ - $(CP) $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)-64/usr/lib/* \ - $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/; \ - rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/libc.so ; \ + 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/* \ @@ -162,4 +151,21 @@ $(WRKBUILD)/.installed: touch $@ endif +ifeq ($(ADK_TARGET_WITH_MULTILIB),y) +$(WRKBUILD)/.fixup: +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 + touch $@ +endif + include ${TOPDIR}/mk/toolchain.mk diff --git a/toolchain/glibc/Makefile.multilib b/toolchain/glibc/Makefile.multilib index 08be0a100..47cc0ff99 100644 --- a/toolchain/glibc/Makefile.multilib +++ b/toolchain/glibc/Makefile.multilib @@ -1,3 +1,6 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + # multilib support ifeq ($(ADK_TARGET_WITH_MULTILIB),y) TABI:= -- cgit v1.2.3