public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/crossdev:master commit in: /
Date: Sun,  3 Jun 2012 09:03:25 +0000 (UTC)	[thread overview]
Message-ID: <1338443018.15ec45f4528a073d72039b66f239abebf6feb25a.vapier@gentoo> (raw)

commit:     15ec45f4528a073d72039b66f239abebf6feb25a
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sat May 26 05:25:48 2012 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Thu May 31 05:43:38 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/crossdev.git;a=commit;h=15ec45f4

crossdev: split host and target ABIs

The current ABI env var system does not differentiate between the ABI
of the CHOST (where things run) and the ABI of the target (what we're
generating code for).  This makes it difficult to build a toolchain
that runs on ABI=amd64 but targets ABI=x32.

Introduce a TARGET_ABI set of variables that the tools that run on the
CHOST can use to figure out what ABIs it needs to build for the CTARGET.

Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

---
 TODO     |    5 ----
 crossdev |   71 +++++++++++++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 57 insertions(+), 19 deletions(-)

diff --git a/TODO b/TODO
index e850bc5..f5e089b 100644
--- a/TODO
+++ b/TODO
@@ -1,11 +1,6 @@
 - strip package.use.force (i.e. building x86_64 on x86_64 gets forced multilib)
 - filter /usr/CTARGET/ from revdep-rebuild #182601
 
-- HOST_ABI and TARGET_ABI selection; consider:
-	- build a 64bit (amd64) cross-compiler which targets 32bit (x86)
-	- build a 64bit (amd64) cross-compiler which targets x32
-	- ABI variables atm do not differentiate between host
-
 - package.use not getting setup correctly:
 # cat /etc/portage/package.use/cross-x86_64-cros-linux-gnu
 cross-x86_64-cros-linux-gnu/gdb sys-devel gdb

diff --git a/crossdev b/crossdev
index 2b491bc..9a294fe 100755
--- a/crossdev
+++ b/crossdev
@@ -47,6 +47,7 @@ Options:
                                 Note: versions support depend atom syntaxes:
                                  e.g. ">=2.20" "~4.6.1" "=2.13.1-r3"
     ${GOOD}-A, --abis${NORMAL} abis          Specify ABIs to build, first one is the default
+    ${GOOD}--host-abi abi                    Specify the ABI of the compiler itself
     ${GOOD}--env${NORMAL} env                Specify env settings for all packages (see below)
     ${GOOD}--[bdgkl]env${NORMAL} env         Specify env settings for binutils/gdb/gcc/kernel/libc
                                 Note: make sure to quote: 'VAR="some value"\nFOO="cow"'
@@ -457,6 +458,7 @@ HARCH=
 CTARGET=
 MULTILIB_ABIS="default"
 MULTILIB_USE=""
+HOST_ABI="default"
 STAGE=""
 AENV=""
 BCAT="sys-devel"  ; BPKG="binutils"      ; BVER="" BUSE="" BENV="" BOVL=""
@@ -504,6 +506,7 @@ while [[ $# -gt 0 ]] ; do
 	-ol|--ov-libc)     shift; LOVL=$1;;
 	--env)             shift; AENV=$1;;
 	-A|--abis)         shift; MULTILIB_ABIS=$1;;
+	--host-abi)        shift; HOST_ABI=$1;;
 	-S|--stable)       DEFAULT_VER="[stable]";;
 	-C|--clean)        shift; parse_target $1; uninstall;;
 	-s?|--stage?)      STAGE=${1:0-1};;
@@ -606,8 +609,13 @@ for v in MULTILIB_ABIS UCLIBC_CPU USE BVER GVER KVER LVER STAGE CFLAGS LDFLAGS A
 done
 
 # parse multilib settings until profiles are sane
-eval $(
-	# clean the env
+multilib_env() {
+	local var=$1
+	eval $(
+	# see what target to parse
+	CTARGET=${!var}
+
+	# clean the env in our subshell
 	unset ${!CFLAGS_*} ${!CHOST_*} ${!CTARGET_*} ${!LDFLAGS_*} ${!LIBDIR_*}
 
 	# ask multilib.eclass to tell us how things work
@@ -630,9 +638,14 @@ eval $(
 	${single_abi} && MULTILIB_ABIS=${DEFAULT_ABI}
 
 	# output the desired env
-	for v in ${!CFLAGS_*} ${!CHOST_*} ${!CTARGET_*} ${!LDFLAGS_*} ${!LIBDIR_*} MULTILIB_ABIS DEFAULT_ABI ; do
+	for v in ${!CFLAGS_*} ${!CHOST_*} ${!CTARGET_*} ${!LDFLAGS_*} ${!LIBDIR_*} ; do
 		echo ${v}=\'${!v}\'
 	done
+	# output the variables that are not uniquely named
+	[[ ${var} == "CTARGET" ]] && d='' || d='_'
+	for v in MULTILIB_ABIS DEFAULT_ABI ; do
+		echo ${d}${v}=\'${!v}\'
+	done
 
 	# make sure all ABIs have valid vars
 	def_CFLAGS=
@@ -646,7 +659,14 @@ eval $(
 			echo ${_v}=\'${!d}\'
 		done
 	done
-)
+	)
+}
+# Load settings for the host.
+MULTILIB_ABIS=${HOST_ABI} multilib_env HCHOST
+HOST_ABI=${_MULTILIB_ABIS}
+# Load settings for the target.
+multilib_env CTARGET
+
 DEFAULT_ABI=${MULTILIB_ABIS%% *}
 if [[ -z ${MULTILIB_USE} ]] ; then
 	if [[ $(set -- ${MULTILIB_ABIS}; echo $#) -eq 1 ]] ; then
@@ -791,7 +811,7 @@ set_links() {
 	ln -s "${srcdir}"/${cat}/${pkg} "${d}"
 }
 set_env() {
-	local pkg=$1 env=$2 output
+	local l=$1 pkg=$2 env=$3 output
 	shift ; shift
 
 	# We have to ignore collisions in the build-id tree because it's
@@ -811,16 +831,41 @@ set_env() {
 	$(printf '%b' "${AENV}")
 	EOF
 
+	# We need to differentiate between the host and target ABI just like
+	# we have to handle the difference between CHOST and CTARGET.  For
+	# the headers and library packages, we want the ABI to be the target.
+	# For the compiler tools (as/ld/cc/gdb/etc...), we want the ABI to be
+	# the host.
+	local TARGET_ABI=$(set -- ${MULTILIB_ABIS}; echo $1)
+	case ${l} in
+	K|L)
+		# Target packages.
+		local ABI=${TARGET_ABI}
+		# Use MULTILIB_ABIS & DEFAULT_ABI from env.
+		;;
+	*)
+		# Host packages.
+		cat <<-EOF >> "${output}"
+		TARGET_ABI='${TARGET_ABI}'
+		TARGET_MULTILIB_ABIS='${MULTILIB_ABIS}'
+		TARGET_DEFAULT_ABI='${DEFAULT_ABI}'
+		EOF
+		local ABI=${HOST_ABI}
+		local MULTILIB_ABIS=${ABI}
+		local DEFAULT_ABI=${ABI}
+		;;
+	esac
 	local v
-	local ABI=$(set -- ${MULTILIB_ABIS}; echo $1)
 	for v in ${!CFLAGS_*} ${!CHOST_*} ${!CTARGET_*} ${!LDFLAGS_*} ${!LIBDIR_*} ABI MULTILIB_ABIS DEFAULT_ABI ; do
-		echo "${v}='${!v}'" >> "${output}"
-	done
+		echo "${v}='${!v}'"
+	done >> "${output}"
 
 	output=$(_set_portage_file ${pkg} package.env)
 	echo "cross-${CTARGET}/${pkg} cross-${CTARGET}/${pkg}.conf" >> ${output}
 }
 set_portage() {
+	local l=$1
+	eval set -- \${${l}CAT} \${${l}PKG} \${${l}VER} \"\${${l}ENV}\" \"\${${l}OVL}\"
 	local cat=$1 pkg=$2 ver=$3 env=$4 ovl=$5
 	shift 5
 	local use=$@
@@ -832,7 +877,7 @@ set_portage() {
 	set_use_force ${pkg} -multilib
 	set_use_mask ${pkg} -multilib
 	set_links ${cat} ${pkg} "${ovl}"
-	set_env ${pkg} "${env}"
+	set_env ${l} ${pkg} "${env}"
 }
 set_metadata() {
 	# for people who have eclasses spread over their overlays, generate
@@ -914,11 +959,9 @@ for f in package.{env,keywords,mask,use} env/cross-${CTARGET} profile/package.us
 	rm -f ${f}/cross-${CTARGET}
 done
 
-set_portage ${BCAT} ${BPKG} ${BVER} "${BENV}" "${BOVL}"
-set_portage ${GCAT} ${GPKG} ${GVER} "${GENV}" "${GOVL}"
-set_portage ${KCAT} ${KPKG} ${KVER} "${KENV}" "${KOVL}"
-set_portage ${LCAT} ${LPKG} ${LVER} "${LENV}" "${LOVL}"
-set_portage ${DCAT} ${DPKG} ${DVER} "${DENV}" "${DOVL}"
+for v in B G K L D ; do
+	set_portage ${v}
+done
 set_metadata
 
 # filter out revdep rebuild stuff #182601



             reply	other threads:[~2012-06-03  9:03 UTC|newest]

Thread overview: 240+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-03  9:03 Mike Frysinger [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-02-03 17:14 [gentoo-commits] proj/crossdev:master commit in: / Mike Gilbert
2025-01-12 18:39 Sam James
2025-01-04 15:20 Sam James
2025-01-02 23:26 Sam James
2025-01-02 23:24 Sam James
2025-01-02 23:24 Sam James
2025-01-02 23:24 Sam James
2024-12-25  0:45 Sam James
2024-12-25  0:43 Sam James
2024-12-25  0:42 Sam James
2024-12-25  0:42 Sam James
2024-12-25  0:42 Sam James
2024-12-15 18:29 Sam James
2024-12-14 18:14 Sam James
2024-12-02 21:40 Sam James
2024-12-02 15:27 Sam James
2024-12-02  9:42 Sam James
2024-12-01 23:05 Sam James
2024-11-30 10:18 Sam James
2024-11-30  5:12 Sam James
2024-11-30  2:55 Sam James
2024-11-30  2:08 Sam James
2024-11-30  2:08 Sam James
2024-10-15  7:13 Sam James
2024-10-15  7:13 Sam James
2024-07-02 21:01 James Le Cuirot
2024-06-16 13:47 Luca Barbato
2024-05-07 16:06 Sam James
2024-05-07 13:04 Sam James
2024-05-07 13:01 Sam James
2024-05-04 11:57 Sam James
2024-05-04 11:52 Sam James
2024-05-04 11:52 Sam James
2024-05-04 11:52 Sam James
2024-05-04 11:48 Sam James
2024-05-04 11:48 Sam James
2024-01-26  9:31 Sam James
2024-01-17  4:51 Sam James
2023-09-26 18:30 Sam James
2023-09-23 12:26 Sam James
2023-08-31  1:32 Sam James
2023-08-31  1:15 Sam James
2023-03-21 22:41 Sam James
2023-02-25  1:14 Sam James
2023-02-02 17:40 Sam James
2023-02-02 17:40 Sam James
2023-01-14 17:58 Sam James
2022-12-28 15:17 Sam James
2022-12-28 15:17 Sam James
2022-11-18 17:57 Mike Gilbert
2022-11-18 17:57 Mike Gilbert
2022-07-09  3:45 Sam James
2022-07-09  3:45 Sam James
2022-07-09  3:45 Sam James
2022-05-02 23:19 Sam James
2022-04-24 16:30 Sam James
2022-04-19 20:25 Sam James
2022-03-17 23:42 Sam James
2022-03-06  2:08 Sam James
2022-02-20  2:19 Sam James
2022-02-11 22:53 Andreas K. Hüttel
2022-01-31  2:06 Sam James
2022-01-28 12:30 Mike Frysinger
2021-11-21 13:08 Sam James
2021-10-27 17:20 Mike Frysinger
2021-10-27  9:19 Mike Frysinger
2021-10-27  8:56 Mike Frysinger
2021-10-27  8:55 Mike Frysinger
2021-07-17 23:38 Sergei Trofimovich
2021-06-21 21:23 Sergei Trofimovich
2021-06-21 21:23 Sergei Trofimovich
2021-06-21 21:23 Sergei Trofimovich
2021-06-21 21:23 Sergei Trofimovich
2021-06-08 22:44 Sergei Trofimovich
2021-06-07 20:44 Sergei Trofimovich
2021-01-05 23:25 Sergei Trofimovich
2021-01-05 23:25 Sergei Trofimovich
2021-01-05 23:25 Sergei Trofimovich
2020-12-31 12:23 Sergei Trofimovich
2020-11-29 22:30 Sergei Trofimovich
2020-11-22 20:41 Sergei Trofimovich
2020-11-08 13:26 Sergei Trofimovich
2020-11-08 13:26 Sergei Trofimovich
2020-08-01 19:50 Sergei Trofimovich
2020-03-26 23:52 Sergei Trofimovich
2020-01-31  7:36 Sergei Trofimovich
2020-01-31  7:36 Sergei Trofimovich
2020-01-31  7:36 Sergei Trofimovich
2020-01-30  8:36 Sergei Trofimovich
2020-01-29 23:20 Sergei Trofimovich
2020-01-25 21:17 Sergei Trofimovich
2020-01-25 12:05 Sergei Trofimovich
2020-01-25 12:05 Sergei Trofimovich
2019-12-22 22:32 Sergei Trofimovich
2019-12-22 22:04 Sergei Trofimovich
2019-12-22 22:01 Sergei Trofimovich
2019-10-21 22:54 Sergei Trofimovich
2019-10-21 22:50 Sergei Trofimovich
2019-10-14  7:35 Sergei Trofimovich
2019-09-08 11:16 Sergei Trofimovich
2019-09-01 19:02 Sergei Trofimovich
2019-09-01 16:14 Sergei Trofimovich
2019-08-25  9:38 Sergei Trofimovich
2019-06-08 18:20 Sergei Trofimovich
2019-03-18 22:54 Sergei Trofimovich
2018-10-18 22:26 Sergei Trofimovich
2018-10-17 21:45 Sergei Trofimovich
2018-09-27 23:44 Jason Donenfeld
2018-09-18 22:44 Sergei Trofimovich
2018-08-18 15:42 Sergei Trofimovich
2018-07-24 23:44 Sergei Trofimovich
2018-05-08 21:40 Sergei Trofimovich
2018-04-10  7:15 Sergei Trofimovich
2018-04-09 20:46 Sergei Trofimovich
2018-04-07 15:57 Sergei Trofimovich
2018-04-07 11:21 Sergei Trofimovich
2018-04-07 10:56 Sergei Trofimovich
2018-04-07  7:27 Sergei Trofimovich
2018-04-05 22:16 Sergei Trofimovich
2018-03-02 22:32 Sergei Trofimovich
2018-02-03  9:39 Sergei Trofimovich
2018-01-20 12:37 Sergei Trofimovich
2018-01-07 20:15 Sergei Trofimovich
2018-01-05 23:27 Sergei Trofimovich
2017-12-30 21:21 Sergei Trofimovich
2017-12-30 17:41 Sergei Trofimovich
2017-12-30 17:41 Sergei Trofimovich
2017-12-30 14:52 Sergei Trofimovich
2017-12-30 14:46 Sergei Trofimovich
2017-12-29 20:44 Sergei Trofimovich
2017-12-28 17:47 Sergei Trofimovich
2017-12-27 18:10 Sergei Trofimovich
2017-12-12 21:35 Steve Arnold
2017-11-23 18:18 Steve Arnold
2017-11-21 23:01 Sergei Trofimovich
2017-11-21 22:13 Sergei Trofimovich
2017-11-19 23:03 Sergei Trofimovich
2017-10-24 17:38 Steve Arnold
2017-10-14 23:46 Steve Arnold
2017-10-14 23:46 Steve Arnold
2017-10-14 23:46 Steve Arnold
2017-10-13 17:56 Steve Arnold
2017-10-13 16:31 Steve Arnold
2017-10-13 16:31 Steve Arnold
2017-10-13 16:31 Steve Arnold
2017-10-13 16:31 Steve Arnold
2016-06-02 15:56 Mike Frysinger
2016-06-02 15:56 Mike Frysinger
2016-06-02 15:56 Mike Frysinger
2016-06-02 15:56 Mike Frysinger
2016-01-16  6:38 Mike Frysinger
2015-10-16  3:19 Mike Frysinger
2015-08-13  2:45 Mike Frysinger
2015-06-02 17:01 Mike Frysinger
2015-05-30  4:46 Mike Frysinger
2015-05-23  5:35 Mike Frysinger
2015-04-18 22:58 Mike Frysinger
2014-10-31  1:56 Mike Frysinger
2014-10-31  1:56 Mike Frysinger
2014-10-31  0:52 Mike Frysinger
2014-09-17 21:41 Mike Frysinger
2014-01-18 18:42 Mike Frysinger
2013-11-07 20:32 Mike Frysinger
2013-11-07 20:28 Mike Frysinger
2013-10-12 20:15 Mike Frysinger
2013-10-11 19:05 Mike Frysinger
2013-10-11 18:48 Mike Frysinger
2013-09-30  0:21 Mike Frysinger
2013-06-28  5:42 Mike Frysinger
2013-06-28  5:14 Mike Frysinger
2013-04-20  2:50 Mike Frysinger
2013-03-28 16:20 Mike Frysinger
2013-03-28 16:20 Mike Frysinger
2013-02-18 20:11 Mike Frysinger
2012-12-25 21:44 Mike Frysinger
2012-11-18  7:56 Mike Frysinger
2012-11-11  9:10 Mike Frysinger
2012-11-05  8:37 Mike Frysinger
2012-10-02  3:23 Mike Frysinger
2012-09-13  5:13 Mike Frysinger
2012-09-13  5:05 Mike Frysinger
2012-08-30 18:16 Mike Frysinger
2012-08-20 21:36 Mike Frysinger
2012-08-17 21:20 Mike Frysinger
2012-07-31 16:19 Mike Frysinger
2012-07-30  3:01 Mike Frysinger
2012-06-09  5:23 Mike Frysinger
2012-06-09  5:23 Mike Frysinger
2012-06-03  9:03 Mike Frysinger
2012-06-03  9:03 Mike Frysinger
2012-06-03  9:03 Mike Frysinger
2012-05-30 15:28 Mike Frysinger
2012-05-30 15:28 Mike Frysinger
2012-05-30 15:28 Mike Frysinger
2012-05-30 15:28 Mike Frysinger
2012-03-07 18:31 Mike Frysinger
2012-03-05 23:15 Mike Frysinger
2012-03-05 23:15 Mike Frysinger
2012-03-05 23:15 Mike Frysinger
2012-03-01 18:43 Mike Frysinger
2012-03-01 18:43 Mike Frysinger
2012-03-01 18:43 Mike Frysinger
2012-03-01 18:43 Mike Frysinger
2012-02-29 17:18 Mike Frysinger
2012-02-29 16:22 Mike Frysinger
2012-02-29 16:22 Mike Frysinger
2012-02-29 16:22 Mike Frysinger
2012-02-27 22:50 Mike Frysinger
2012-02-27 22:47 Mike Frysinger
2012-02-24 22:23 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2012-02-14 20:24 Mike Frysinger
2011-12-21 21:06 Mike Frysinger
2011-12-21 21:06 Mike Frysinger
2011-12-13 19:06 Mike Frysinger
2011-12-06 21:50 Mike Frysinger
2011-11-18 20:44 Mike Frysinger
2011-10-31  3:30 Mike Frysinger
2011-10-18 17:36 Mike Frysinger
2011-10-11 22:22 Mike Frysinger
2011-08-25 15:50 Mike Frysinger
2011-08-19 18:05 Mike Frysinger
2011-08-19 18:05 Mike Frysinger
2011-08-18 20:06 Mike Frysinger
2011-08-18 20:06 Mike Frysinger
2011-08-18 20:06 Mike Frysinger
2011-08-15 22:25 Mike Frysinger
2011-08-12 18:59 Mike Frysinger
2011-07-05  6:44 Mike Frysinger
2011-03-27  6:07 Mike Frysinger
2011-03-11  4:22 Mike Frysinger
2011-03-11  4:22 Mike Frysinger
2011-03-11  4:22 Mike Frysinger
2011-02-14  3:08 Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1338443018.15ec45f4528a073d72039b66f239abebf6feb25a.vapier@gentoo \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox