@ -82,7 +82,12 @@ It looks like one of the followings:
This config option was not found in the config header .
Nothing to do .
- Failed to process . Skip .
- Compiler is missing . Do nothing .
The compiler specified for this architecture was not found
in your PATH environment .
( If - e option is passed , the tool exits immediately . )
- Failed to process .
An error occurred during processing this defconfig . Skipped .
( If - e option is passed , the tool exits immediately on error . )
@ -272,7 +277,7 @@ def log_msg(color_enabled, color, defconfig, msg):
return defconfig [ : - len ( ' _defconfig ' ) ] . ljust ( 37 ) + ' : ' + \
color_text ( color_enabled , color , msg ) + ' \n '
def update_cross_compile ( ) :
def update_cross_compile ( color_enabled ) :
""" Update per-arch CROSS_COMPILE via environment variables
The default CROSS_COMPILE values are available
@ -286,6 +291,9 @@ def update_cross_compile():
export CROSS_COMPILE_ARM = . . .
export CROSS_COMPILE_POWERPC = . . .
Then , this function checks if specified compilers really exist in your
PATH environment .
"""
archs = [ ]
@ -299,8 +307,20 @@ def update_cross_compile():
for arch in archs :
env = ' CROSS_COMPILE_ ' + arch . upper ( )
cross_compile = os . environ . get ( env )
if cross_compile :
CROSS_COMPILE [ arch ] = cross_compile
if not cross_compile :
cross_compile = CROSS_COMPILE . get ( arch , ' ' )
for path in os . environ [ " PATH " ] . split ( os . pathsep ) :
gcc_path = os . path . join ( path , cross_compile + ' gcc ' )
if os . path . isfile ( gcc_path ) and os . access ( gcc_path , os . X_OK ) :
break
else :
print >> sys . stderr , color_text ( color_enabled , COLOR_YELLOW ,
' warning: %s gcc: not found in PATH. %s architecture boards will be skipped '
% ( cross_compile , arch ) )
cross_compile = None
CROSS_COMPILE [ arch ] = cross_compile
def cleanup_one_header ( header_path , patterns , dry_run ) :
""" Clean regex-matched lines away from a file.
@ -387,6 +407,10 @@ class KconfigParser:
Returns :
A string storing the compiler prefix for the architecture .
Return a NULL string for architectures that do not require
compiler prefix ( Sandbox and native build is the case ) .
Return None if the specified compiler is missing in your PATH .
Caller should distinguish ' ' and None .
"""
arch = ' '
cpu = ' '
@ -400,13 +424,14 @@ class KconfigParser:
if m :
cpu = m . group ( 1 )
assert arch , ' Error: arch is not defined in %s ' % defconfig
if not arch :
return None
# fix-up for aarch64
if arch == ' arm ' and cpu == ' armv8 ' :
arch = ' aarch64 '
return CROSS_COMPILE . get ( arch , ' ' )
return CROSS_COMPILE . get ( arch , None )
def parse_one_config ( self , config_attr , defconfig_lines , autoconf_lines ) :
""" Parse .config, defconfig, include/autoconf.mk for one config.
@ -606,21 +631,12 @@ class Slot:
return False
if self . ps . poll ( ) != 0 :
errmsg = ' Failed to process. '
errout = self . ps . stderr . read ( )
if errout . find ( ' gcc: command not found ' ) != - 1 :
errmsg = ' Compiler not found ( '
errmsg + = color_text ( self . options . color , COLOR_YELLOW ,
self . cross_compile )
errmsg + = color_text ( self . options . color , COLOR_LIGHT_RED ,
' ) ' )
print >> sys . stderr , log_msg ( self . options . color ,
COLOR_LIGHT_RED ,
self . defconfig ,
errmsg ) ,
print >> sys . stderr , log_msg ( self . options . color , COLOR_LIGHT_RED ,
self . defconfig , " Failed to process. " ) ,
if self . options . verbose :
print >> sys . stderr , color_text ( self . options . color ,
COLOR_LIGHT_CYAN , errout )
COLOR_LIGHT_CYAN ,
self . ps . stderr . read ( ) )
if self . options . exit_on_error :
sys . exit ( " Exit on error. " )
# If --exit-on-error flag is not set, skip this board and continue.
@ -651,15 +667,24 @@ class Slot:
return True
self . cross_compile = self . parser . get_cross_compile ( )
if self . cross_compile is None :
print >> sys . stderr , log_msg ( self . options . color , COLOR_YELLOW ,
self . defconfig ,
" Compiler is missing. Do nothing. " ) ,
if self . options . exit_on_error :
sys . exit ( " Exit on error. " )
# If --exit-on-error flag is not set, skip this board and continue.
# Record the failed board.
self . failed_boards . append ( self . defconfig )
self . state = STATE_IDLE
return True
cmd = list ( self . make_cmd )
if self . cross_compile :
cmd . append ( ' CROSS_COMPILE= %s ' % self . cross_compile )
cmd . append ( ' KCONFIG_IGNORE_DUPLICATES=1 ' )
cmd . append ( ' include/config/auto.conf ' )
""" This will be screen-scraped, so be sure the expected text will be
returned consistently on every machine by setting LANG = C """
self . ps = subprocess . Popen ( cmd , stdout = self . devnull ,
env = dict ( os . environ , LANG = ' C ' ) ,
stderr = subprocess . PIPE )
self . state = STATE_AUTOCONF
return False
@ -907,7 +932,7 @@ def main():
check_top_directory ( )
update_cross_compile ( )
update_cross_compile ( options . color )
if not options . cleanup_headers_only :
move_config ( config_attrs , options )