mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 09:12:08 +02:00
buildman: Add support for building with clang
Add a -O option which allows building with clang. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -1046,6 +1046,16 @@ value for 'altbootcmd', but lost one for ' altbootcmd'.
|
|||||||
|
|
||||||
The -U option uses the u-boot.env files which are produced by a build.
|
The -U option uses the u-boot.env files which are produced by a build.
|
||||||
|
|
||||||
|
|
||||||
|
Building with clang
|
||||||
|
===================
|
||||||
|
|
||||||
|
To build with clang (sandbox only), use the -O option to override the
|
||||||
|
toolchain. For example:
|
||||||
|
|
||||||
|
buildman -O clang-7 --board sandbox
|
||||||
|
|
||||||
|
|
||||||
Other options
|
Other options
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
@@ -229,6 +229,7 @@ class BuilderThread(threading.Thread):
|
|||||||
config_args = ['%s_defconfig' % brd.target]
|
config_args = ['%s_defconfig' % brd.target]
|
||||||
config_out = ''
|
config_out = ''
|
||||||
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
||||||
|
args.extend(self.toolchain.MakeArgs())
|
||||||
|
|
||||||
# If we need to reconfigure, do that now
|
# If we need to reconfigure, do that now
|
||||||
if do_config:
|
if do_config:
|
||||||
|
@@ -74,6 +74,8 @@ def ParseArgs():
|
|||||||
parser.add_option('-o', '--output-dir', type='string',
|
parser.add_option('-o', '--output-dir', type='string',
|
||||||
dest='output_dir', default='..',
|
dest='output_dir', default='..',
|
||||||
help='Directory where all builds happen and buildman has its workspace (default is ../)')
|
help='Directory where all builds happen and buildman has its workspace (default is ../)')
|
||||||
|
parser.add_option('-O', '--override-toolchain', type='string',
|
||||||
|
help="Override host toochain to use for sandbox (e.g. 'clang-7')")
|
||||||
parser.add_option('-Q', '--quick', action='store_true',
|
parser.add_option('-Q', '--quick', action='store_true',
|
||||||
default=False, help='Do a rough build, with limited warning resolution')
|
default=False, help='Do a rough build, with limited warning resolution')
|
||||||
parser.add_option('-p', '--full-path', action='store_true',
|
parser.add_option('-p', '--full-path', action='store_true',
|
||||||
|
@@ -141,7 +141,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
|
|||||||
|
|
||||||
no_toolchains = toolchains is None
|
no_toolchains = toolchains is None
|
||||||
if no_toolchains:
|
if no_toolchains:
|
||||||
toolchains = toolchain.Toolchains()
|
toolchains = toolchain.Toolchains(options.override_toolchain)
|
||||||
|
|
||||||
if options.fetch_arch:
|
if options.fetch_arch:
|
||||||
if options.fetch_arch == 'list':
|
if options.fetch_arch == 'list':
|
||||||
|
@@ -54,9 +54,11 @@ class Toolchain:
|
|||||||
arch: Architecture of toolchain as determined from the first
|
arch: Architecture of toolchain as determined from the first
|
||||||
component of the filename. E.g. arm-linux-gcc becomes arm
|
component of the filename. E.g. arm-linux-gcc becomes arm
|
||||||
priority: Toolchain priority (0=highest, 20=lowest)
|
priority: Toolchain priority (0=highest, 20=lowest)
|
||||||
|
override_toolchain: Toolchain to use for sandbox, overriding the normal
|
||||||
|
one
|
||||||
"""
|
"""
|
||||||
def __init__(self, fname, test, verbose=False, priority=PRIORITY_CALC,
|
def __init__(self, fname, test, verbose=False, priority=PRIORITY_CALC,
|
||||||
arch=None):
|
arch=None, override_toolchain=None):
|
||||||
"""Create a new toolchain object.
|
"""Create a new toolchain object.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -68,6 +70,7 @@ class Toolchain:
|
|||||||
"""
|
"""
|
||||||
self.gcc = fname
|
self.gcc = fname
|
||||||
self.path = os.path.dirname(fname)
|
self.path = os.path.dirname(fname)
|
||||||
|
self.override_toolchain = override_toolchain
|
||||||
|
|
||||||
# Find the CROSS_COMPILE prefix to use for U-Boot. For example,
|
# Find the CROSS_COMPILE prefix to use for U-Boot. For example,
|
||||||
# 'arm-linux-gnueabihf-gcc' turns into 'arm-linux-gnueabihf-'.
|
# 'arm-linux-gnueabihf-gcc' turns into 'arm-linux-gnueabihf-'.
|
||||||
@@ -81,6 +84,8 @@ class Toolchain:
|
|||||||
self.arch = arch
|
self.arch = arch
|
||||||
else:
|
else:
|
||||||
self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
|
self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
|
||||||
|
if self.arch == 'sandbox' and override_toolchain:
|
||||||
|
self.gcc = override_toolchain
|
||||||
|
|
||||||
env = self.MakeEnvironment(False)
|
env = self.MakeEnvironment(False)
|
||||||
|
|
||||||
@@ -150,11 +155,18 @@ class Toolchain:
|
|||||||
Args:
|
Args:
|
||||||
full_path: Return the full path in CROSS_COMPILE and don't set
|
full_path: Return the full path in CROSS_COMPILE and don't set
|
||||||
PATH
|
PATH
|
||||||
|
Returns:
|
||||||
|
Dict containing the environemnt to use. This is based on the current
|
||||||
|
environment, with changes as needed to CROSS_COMPILE, PATH and
|
||||||
|
LC_ALL.
|
||||||
"""
|
"""
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
wrapper = self.GetWrapper()
|
wrapper = self.GetWrapper()
|
||||||
|
|
||||||
if full_path:
|
if self.override_toolchain:
|
||||||
|
# We'll use MakeArgs() to provide this
|
||||||
|
pass
|
||||||
|
elif full_path:
|
||||||
env['CROSS_COMPILE'] = wrapper + os.path.join(self.path, self.cross)
|
env['CROSS_COMPILE'] = wrapper + os.path.join(self.path, self.cross)
|
||||||
else:
|
else:
|
||||||
env['CROSS_COMPILE'] = wrapper + self.cross
|
env['CROSS_COMPILE'] = wrapper + self.cross
|
||||||
@@ -164,6 +176,22 @@ class Toolchain:
|
|||||||
|
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
def MakeArgs(self):
|
||||||
|
"""Create the 'make' arguments for a toolchain
|
||||||
|
|
||||||
|
This is only used when the toolchain is being overridden. Since the
|
||||||
|
U-Boot Makefile sets CC and HOSTCC explicitly we cannot rely on the
|
||||||
|
environment (and MakeEnvironment()) to override these values. This
|
||||||
|
function returns the arguments to accomplish this.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of arguments to pass to 'make'
|
||||||
|
"""
|
||||||
|
if self.override_toolchain:
|
||||||
|
return ['HOSTCC=%s' % self.override_toolchain,
|
||||||
|
'CC=%s' % self.override_toolchain]
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
class Toolchains:
|
class Toolchains:
|
||||||
"""Manage a list of toolchains for building U-Boot
|
"""Manage a list of toolchains for building U-Boot
|
||||||
@@ -180,10 +208,11 @@ class Toolchains:
|
|||||||
paths: List of paths to check for toolchains (may contain wildcards)
|
paths: List of paths to check for toolchains (may contain wildcards)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, override_toolchain=None):
|
||||||
self.toolchains = {}
|
self.toolchains = {}
|
||||||
self.prefixes = {}
|
self.prefixes = {}
|
||||||
self.paths = []
|
self.paths = []
|
||||||
|
self.override_toolchain = override_toolchain
|
||||||
self._make_flags = dict(bsettings.GetItems('make-flags'))
|
self._make_flags = dict(bsettings.GetItems('make-flags'))
|
||||||
|
|
||||||
def GetPathList(self, show_warning=True):
|
def GetPathList(self, show_warning=True):
|
||||||
@@ -234,7 +263,8 @@ class Toolchains:
|
|||||||
priority: Priority to use for this toolchain
|
priority: Priority to use for this toolchain
|
||||||
arch: Toolchain architecture, or None if not known
|
arch: Toolchain architecture, or None if not known
|
||||||
"""
|
"""
|
||||||
toolchain = Toolchain(fname, test, verbose, priority, arch)
|
toolchain = Toolchain(fname, test, verbose, priority, arch,
|
||||||
|
self.override_toolchain)
|
||||||
add_it = toolchain.ok
|
add_it = toolchain.ok
|
||||||
if toolchain.arch in self.toolchains:
|
if toolchain.arch in self.toolchains:
|
||||||
add_it = (toolchain.priority <
|
add_it = (toolchain.priority <
|
||||||
|
Reference in New Issue
Block a user