cros_setup_toolchains: cleanups
BUG=chromium-os:23032
TEST=run it, have it setup toolchains
Change-Id: I57136a7c4de6fad8b141b0e67ab49d2ef02472b0
Reviewed-on: https://gerrit.chromium.org/gerrit/18828
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Zdenek Behan <zbehan@chromium.org>
Reviewed-by: Zdenek Behan <zbehan@chromium.org>
Tested-by: Zdenek Behan <zbehan@chromium.org>
diff --git a/scripts/cros_setup_toolchains.py b/scripts/cros_setup_toolchains.py
index fcbec81..6fcb35d 100644
--- a/scripts/cros_setup_toolchains.py
+++ b/scripts/cros_setup_toolchains.py
@@ -29,10 +29,6 @@
PACKAGE_STABLE = '[stable]'
PACKAGE_NONE = '[none]'
SRC_ROOT = os.path.realpath(constants.SOURCE_ROOT)
-# NOTE: gdb is only built using --ex-gdb through crossdev.
-CROSSDEV_PACKAGES = ['gcc', 'libc', 'binutils', 'kernel']
-TOOLCHAIN_PACKAGES = CROSSDEV_PACKAGES + ['gdb']
-
CHROMIUMOS_OVERLAY = '/usr/local/portage/chromiumos'
STABLE_OVERLAY = '/usr/local/portage/stable'
@@ -47,10 +43,6 @@
'binutils' : '2.21-r4',
}
TARGET_VERSION_MAP = {
- 'arm-none-eabi' : {
- 'kernel' : PACKAGE_NONE,
- 'gdb' : PACKAGE_NONE,
- },
'host' : {
'binutils' : '2.21.1',
'gdb' : PACKAGE_NONE,
@@ -95,7 +87,7 @@
# Start from copy of the global defaults.
result = copy.copy(DEFAULT_TARGET_VERSION_MAP)
- for pkg in TOOLCHAIN_PACKAGES:
+ for pkg in GetTargetPackages(target):
# prefer any specific overrides
if pkg in TARGET_VERSION_MAP.get(target, {}):
result[pkg] = TARGET_VERSION_MAP[target][pkg]
@@ -116,8 +108,7 @@
val = getattr(VAR_CACHE, CACHE_ATTR, None)
if val is None:
- val = cros_build_lib.RunCommand(['portageq', 'envvar', 'CHOST'],
- print_cmd=False, redirect_stdout=True).output
+ val = portage.settings['CHOST']
setattr(VAR_CACHE, CACHE_ATTR, val)
return val
@@ -142,6 +133,13 @@
return val[target]
+def GetTargetPackages(target):
+ """Returns a list of packages for a given target."""
+ conf = GetCrossdevConf(target)
+ # Undesired packages are denoted by empty ${pkg}_pn variable.
+ return [x for x in conf['crosspkgs'].strip("'").split() if conf[x+'_pn']]
+
+
# Portage helper functions:
def GetPortagePackage(target, package):
"""Returns a package name for the given target."""
@@ -164,11 +162,6 @@
return GetCrossdevConf(target)['arch']
-def GetHostTarget():
- """Returns a string for the host target tuple."""
- return portage.settings['CHOST']
-
-
def IsPackageDisabled(target, package):
"""Returns if the given package is not used for the target."""
return GetDesiredPackageVersions(target, package) == [PACKAGE_NONE]
@@ -190,13 +183,11 @@
with open(config) as config_file:
lines = config_file.read().splitlines()
for line in lines:
- # Remove empty lines and commented lines.
- if line and not line.startswith('#'):
- targets.add(line)
+ line = line.split('#', 1)[0]
+ targets.update(line.split())
# Remove the host target as that is not a cross-target. Replace with 'host'.
- targets.remove(GetHostTarget())
- targets.add('host')
+ targets.discard(GetHostTuple())
return targets
@@ -294,7 +285,7 @@
"""
# Check if packages for the given target all have a proper version.
try:
- for package in TOOLCHAIN_PACKAGES:
+ for package in GetTargetPackages(target):
# Do we even want this package && is it initialized?
if not IsPackageDisabled(target, package) and \
not GetInstalledPackageVersions(target, package):
@@ -360,7 +351,7 @@
keyword = GetPortageKeyword(target)
with open(maskfile, 'w') as f:
- for pkg in TOOLCHAIN_PACKAGES:
+ for pkg in GetTargetPackages(target):
if IsPackageDisabled(target, pkg):
continue
f.write('%s %s ~%s\n' %
@@ -391,15 +382,10 @@
cmd.extend(['--overlays', '%s %s' % (CHROMIUMOS_OVERLAY, STABLE_OVERLAY)])
cmd.extend(['--ov-output', CROSSDEV_OVERLAY])
- # HACK(zbehan): arm-none-eabi uses newlib which doesn't like headers-only.
- if target == 'arm-none-eabi':
- cmd.append('--without-headers')
-
- if not IsPackageDisabled(target, 'gdb'):
- cmd.append('--ex-gdb')
-
- for pkg in CROSSDEV_PACKAGES:
- if IsPackageDisabled(target, pkg):
+ for pkg in GetTargetPackages(target):
+ if pkg == 'gdb':
+ # Gdb does not have selectable versions.
+ cmd.append('--ex-gdb')
continue
# The first of the desired versions is the "primary" one.
version = GetDesiredPackageVersions(target, pkg)[0]
@@ -428,7 +414,7 @@
RemovePackageMask(target)
CreatePackageKeywords(target)
packagemasks = {}
- for package in TOOLCHAIN_PACKAGES:
+ for package in GetTargetPackages(target):
# Portage name for the package
if IsPackageDisabled(target, package):
continue
@@ -470,7 +456,7 @@
"""Unmerges old packages that are assumed unnecessary."""
unmergemap = {}
for target in targets:
- for package in TOOLCHAIN_PACKAGES:
+ for package in GetTargetPackages(target):
if IsPackageDisabled(target, package):
continue
pkg = GetPortagePackage(target, package)
@@ -512,7 +498,7 @@
if target == 'host':
# *-config is the only tool treating host identically (by tuple).
- target = GetHostTarget()
+ target = GetHostTuple()
# And finally, attach target to it.
desired = '%s-%s' % (target, desired)