Backed out changeset 7c7118c12864 (bug 1455767) for failures in /python/mozbuild/mozbuild/test/configure/lint.py on a CLOSED TREE

This commit is contained in:
shindli 2018-05-09 12:10:10 +03:00
Родитель a10aa3eb8d
Коммит ede14ab8aa
1 изменённых файлов: 66 добавлений и 31 удалений

Просмотреть файл

@ -1500,43 +1500,59 @@ option('--enable-gold',
imply_option('--enable-linker', 'gold', when='--enable-gold') imply_option('--enable-linker', 'gold', when='--enable-gold')
js_option('--enable-linker', nargs=1,
choices=('bfd', 'gold', 'lld', 'other'),
help='Select the linker',
when=is_linker_option_enabled)
@depends('--enable-linker', c_compiler, developer_options, check_build_environment,
extra_toolchain_flags, when=is_linker_option_enabled)
@checking('for linker', lambda x: x.KIND)
@imports('os') @imports('os')
@imports('shutil') @imports('shutil')
def select_linker(linker, c_compiler, developer_options, build_env, toolchain_flags): def enable_gnu_linker(enable_gold_option, c_compiler, developer_options, build_env,
toolchain_flags, linker_name):
linker = linker[0] if linker else 'other' # Used to check the kind of linker
# Check the kind of linker
version_check = ['-Wl,--version'] version_check = ['-Wl,--version']
cmd_base = c_compiler.wrapper + [c_compiler.compiler] + c_compiler.flags cmd_base = c_compiler.wrapper + [c_compiler.compiler] + c_compiler.flags
# Generate the compiler flag
linker_flag = ["-fuse-ld=" + linker] if linker != "other" else []
cmd = cmd_base + linker_flag + version_check
if toolchain_flags: if toolchain_flags:
cmd += toolchain_flags cmd_base += toolchain_flags
if (linker == 'gold' or developer_options) and linker != 'bfd': def resolve_gold():
# Try to force the usage of gold
targetDir = os.path.join(build_env.topobjdir, 'build', 'unix', 'gold')
gold_detection_arg = '-print-prog-name=ld.gold'
detection_cmd = cmd_base + [gold_detection_arg]
gold = check_cmd_output(*detection_cmd).strip()
if not gold:
return
goldFullPath = find_program(gold)
if goldFullPath is None:
return
if os.path.exists(targetDir):
shutil.rmtree(targetDir)
os.makedirs(targetDir)
os.symlink(goldFullPath, os.path.join(targetDir, 'ld'))
linker = ['-B', targetDir]
cmd = cmd_base + linker + version_check
if 'GNU gold' in check_cmd_output(*cmd).decode('utf-8'): if 'GNU gold' in check_cmd_output(*cmd).decode('utf-8'):
# We have detected gold, will build with -fuse-ld=gold # We have detected gold, will build with the -B workaround
return namespace( return namespace(
KIND='gold', KIND='gold',
LINKER_FLAG=linker_flag, LINKER_FLAG=linker,
) )
else:
# The -B trick didn't work, removing the directory
shutil.rmtree(targetDir)
if (enable_gold_option or developer_options) and linker_name != 'bfd':
result = resolve_gold()
if result:
return result
# gold is only required if --enable-gold is used. # gold is only required if --enable-gold is used.
if linker == 'gold': elif enable_gold_option:
die('Could not find gold') die('Could not find gold')
# Else fallthrough. # Else fallthrough.
cmd = cmd_base + version_check
cmd_output = check_cmd_output(*cmd).decode('utf-8') cmd_output = check_cmd_output(*cmd).decode('utf-8')
# using decode because ld can be localized and python will # using decode because ld can be localized and python will
# have problems with french accent for example # have problems with french accent for example
@ -1552,22 +1568,41 @@ def select_linker(linker, c_compiler, developer_options, build_env, toolchain_fl
KIND='gold' KIND='gold'
) )
if 'LLD' in cmd_output:
return namespace(
KIND='lld',
LINKER_FLAG=linker_flag,
)
elif linker == 'lld':
# We forced the lld linker but could not find the string
# when checking, fail the build
die("Could not use lld as linker")
# For other platforms without gold or the GNU linker # For other platforms without gold or the GNU linker
return namespace( return namespace(
KIND='other' KIND='other'
) )
js_option('--enable-linker', nargs=1,
choices=('bfd', 'gold', 'lld', 'other'),
help='Select the linker',
when=is_linker_option_enabled)
@depends('--enable-linker', c_compiler, developer_options, check_build_environment,
extra_toolchain_flags, when=is_linker_option_enabled)
@checking('for linker', lambda x: x.KIND)
def select_linker(linker, c_compiler, developer_options, build_env, toolchain_flags):
linker = linker[0] if linker else 'other'
if linker in ('gold', 'bfd', 'other'):
return enable_gnu_linker(linker == 'gold', c_compiler, developer_options,
build_env, toolchain_flags, linker)
if linker == 'lld':
version_check = ['-Wl,--version']
cmd_base = c_compiler.wrapper + \
[c_compiler.compiler] + c_compiler.flags
lld = ["-fuse-ld=" + linker]
cmd = cmd_base + lld + version_check
if 'LLD' in check_cmd_output(*cmd).decode('utf-8'):
return namespace(
KIND='lld',
LINKER_FLAG=lld,
)
else:
die("Could not use lld as linker")
set_config('LD_IS_BFD', depends(select_linker.KIND) set_config('LD_IS_BFD', depends(select_linker.KIND)
(lambda x: x == 'bfd' or None)) (lambda x: x == 'bfd' or None))
set_config('LINKER_LDFLAGS', select_linker.LINKER_FLAG) set_config('LINKER_LDFLAGS', select_linker.LINKER_FLAG)