зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 390c5748d868 (bug 1892198) for causing Bug 1892493. CLOSED TREE
This commit is contained in:
Родитель
b9af4e8715
Коммит
f1d454ad58
|
@ -14,25 +14,32 @@ dnl ========================================================
|
|||
AC_CACHE_CHECK(what kind of list files are supported by the linker,
|
||||
moz_cv_expand_libs_list_style,
|
||||
[echo "int main() {return 0;}" > conftest.${ac_ext}
|
||||
if AC_TRY_COMMAND(${CC-cc} -o conftest.${OBJ_SUFFIX} -c $CFLAGS $CPPFLAGS conftest.${ac_ext} 1>&5) && test -s conftest.${OBJ_SUFFIX}; then
|
||||
dnl Because BFD ld doesn't work with LTO + linker scripts, we
|
||||
dnl must pass the LTO CFLAGS to the compile command, and the LTO
|
||||
dnl LDFLAGS to all subsequent link commands.
|
||||
dnl https://sourceware.org/bugzilla/show_bug.cgi?id=23600
|
||||
if AC_TRY_COMMAND(${CC-cc} -o conftest.${OBJ_SUFFIX} -c $MOZ_LTO_CFLAGS $CFLAGS $CPPFLAGS conftest.${ac_ext} 1>&5) && test -s conftest.${OBJ_SUFFIX}; then
|
||||
echo "INPUT(conftest.${OBJ_SUFFIX})" > conftest.list
|
||||
if test "$CC_TYPE" = "clang-cl"; then
|
||||
link="$LINKER -OUT:conftest${ac_exeext}"
|
||||
else
|
||||
link="${CC-cc} -o conftest${ac_exeext}"
|
||||
fi
|
||||
echo "conftest.${OBJ_SUFFIX}" > conftest.list
|
||||
if AC_TRY_COMMAND($link $LDFLAGS [-Wl,@conftest.list] $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=linkerlist
|
||||
|
||||
dnl -filelist is for the OS X linker. We need to try -filelist first
|
||||
dnl because clang understands @file, but may pass an oversized argument
|
||||
dnl list to the linker depending on the contents of @file.
|
||||
elif AC_TRY_COMMAND($link $LDFLAGS [-Wl,-filelist,conftest.list] $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=filelist
|
||||
elif AC_TRY_COMMAND($link $LDFLAGS [@conftest.list] $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=list
|
||||
if AC_TRY_COMMAND($link $MOZ_LTO_LDFLAGS $LDFLAGS conftest.list $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=linkerscript
|
||||
else
|
||||
AC_ERROR([Couldn't find one that works])
|
||||
echo "conftest.${OBJ_SUFFIX}" > conftest.list
|
||||
dnl -filelist is for the OS X linker. We need to try -filelist
|
||||
dnl first because clang understands @file, but may pass an
|
||||
dnl oversized argument list to the linker depending on the
|
||||
dnl contents of @file.
|
||||
if AC_TRY_COMMAND($link $MOZ_LTO_LDFLAGS $LDFLAGS [-Wl,-filelist,conftest.list] $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=filelist
|
||||
elif AC_TRY_COMMAND($link $MOZ_LTO_LDFLAGS $LDFLAGS @conftest.list $LIBS 1>&5) && test -s conftest${ac_exeext}; then
|
||||
moz_cv_expand_libs_list_style=list
|
||||
else
|
||||
AC_ERROR([Couldn't find one that works])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
dnl We really don't expect to get here, but just in case
|
||||
|
|
|
@ -325,13 +325,15 @@ class CommonBackend(BuildBackend):
|
|||
list_style = "list"
|
||||
list_file_path = mozpath.join(objdir, name)
|
||||
objs = [os.path.relpath(o, objdir) for o in objs]
|
||||
content = "\n".join(objs)
|
||||
if list_style == "filelist":
|
||||
if list_style == "linkerscript":
|
||||
ref = list_file_path
|
||||
content = "\n".join('INPUT("%s")' % o for o in objs)
|
||||
elif list_style == "filelist":
|
||||
ref = "-Wl,-filelist," + list_file_path
|
||||
elif list_style == "linkerlist":
|
||||
ref = "-Wl,@" + list_file_path
|
||||
content = "\n".join(objs)
|
||||
elif list_style == "list":
|
||||
ref = "@" + list_file_path
|
||||
content = "\n".join(objs)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
|
|
@ -18,7 +18,16 @@ from mozbuild.preprocessor import Preprocessor
|
|||
|
||||
def main(output, input_file):
|
||||
with open(input_file) as fh:
|
||||
objs = [l.strip() for l in fh.readlines()]
|
||||
if buildconfig.substs["EXPAND_LIBS_LIST_STYLE"] == "linkerscript":
|
||||
|
||||
def cleanup(line):
|
||||
assert line.startswith('INPUT("')
|
||||
assert line.endswith('")')
|
||||
return line[len('INPUT("') : -len('")')]
|
||||
|
||||
objs = [cleanup(l.strip()) for l in fh.readlines()]
|
||||
else:
|
||||
objs = [l.strip() for l in fh.readlines()]
|
||||
|
||||
pp = Preprocessor()
|
||||
pp.out = StringIO()
|
||||
|
|
Загрузка…
Ссылка в новой задаче