Bug 1260647 - Unify cross-compilation setup, while moving some of it to moz.configure. r=ted

Gonk, Android, and the generic cross-compilation setup all were using a
different yet similar way to prefix the toolchain. The latter was even
wrong, since the target and target alias usually don't match actual
toolchain prefixes (which don't include the machine part of the target).
This commit is contained in:
Mike Hommey 2016-03-30 14:47:13 +09:00
Родитель 08b4bd78d9
Коммит c12b02c70d
9 изменённых файлов: 57 добавлений и 65 удалений

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

@ -11,4 +11,14 @@ def gonkdir(value):
return value[0] if value else ''
option('--with-gonk-toolchain-prefix', nargs=1,
help='Prefix to gonk toolchain commands')
@depends_if('--with-gonk-toolchain-prefix')
def gonk_toolchain_prefix(value):
return value
imply_option('--with-toolchain-prefix', gonk_toolchain_prefix)
include('common.configure')

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

@ -133,23 +133,7 @@ case "$target" in
AC_MSG_ERROR([not found. Please check your NDK. With the current configuration, it should be in $android_platform])
fi
dnl set up compilers
TOOLCHAIN_PREFIX="$android_toolchain/bin/$android_tool_prefix-"
AS="$android_toolchain"/bin/"$android_tool_prefix"-as
if test -z "$CC"; then
CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc
fi
if test -z "$CXX"; then
CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++
fi
if test -z "$CPP"; then
CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp
fi
LD="$android_toolchain"/bin/"$android_tool_prefix"-ld
AR="$android_toolchain"/bin/"$android_tool_prefix"-ar
RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib
STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip
OBJCOPY="$android_toolchain"/bin/"$android_tool_prefix"-objcopy
CPPFLAGS="-idirafter $android_platform/usr/include $CPPFLAGS"
CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"

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

@ -169,20 +169,33 @@ CC=$_SAVE_CC
CFLAGS=$_SAVE_CFLAGS
LDFLAGS=$_SAVE_LDFLAGS
AC_CHECK_PROGS(CC, "${target_alias}-gcc" "${target}-gcc", :)
dnl AC_CHECK_PROGS manually goes through $PATH, and as such fails to handle
dnl absolute or relative paths. Relative paths wouldn't work anyways, but
dnl absolute paths would. Trick AC_CHECK_PROGS into working in that case by
dnl adding / to PATH. This is temporary until this moves to moz.configure
dnl (soon).
_SAVE_PATH=$PATH
case "${TOOLCHAIN_PREFIX}" in
/*)
PATH="/:$PATH"
;;
esac
AC_CHECK_PROGS(CC, "${TOOLCHAIN_PREFIX}gcc", :)
unset ac_cv_prog_CC
AC_PROG_CC
AC_CHECK_PROGS(CXX, "${target_alias}-g++" "${target}-g++", :)
AC_CHECK_PROGS(CXX, "${TOOLCHAIN_PREFIX}g++", :)
unset ac_cv_prog_CXX
AC_PROG_CXX
AC_CHECK_PROGS(RANLIB, "${target_alias}-ranlib" "${target}-ranlib", :)
AC_CHECK_PROGS(AR, "${target_alias}-ar" "${target}-ar", :)
AC_CHECK_PROGS(AS, "${target_alias}-as" "${target}-as", :)
AC_CHECK_PROGS(LD, "${target_alias}-ld" "${target}-ld", :)
AC_CHECK_PROGS(STRIP, "${target_alias}-strip" "${target}-strip", :)
AC_CHECK_PROGS(WINDRES, "${target_alias}-windres" "${target}-windres", :)
AC_CHECK_PROGS(OTOOL, "${target_alias}-otool" "${target}-otool", :)
AC_CHECK_PROGS(RANLIB, "${TOOLCHAIN_PREFIX}ranlib", :)
AC_CHECK_PROGS(AR, "${TOOLCHAIN_PREFIX}ar", :)
AC_CHECK_PROGS(AS, "${TOOLCHAIN_PREFIX}as", :)
AC_CHECK_PROGS(LD, "${TOOLCHAIN_PREFIX}ld", :)
AC_CHECK_PROGS(STRIP, "${TOOLCHAIN_PREFIX}strip", :)
AC_CHECK_PROGS(WINDRES, "${TOOLCHAIN_PREFIX}windres", :)
AC_CHECK_PROGS(OTOOL, "${TOOLCHAIN_PREFIX}otool", :)
AC_CHECK_PROGS(OBJCOPY, "${TOOLCHAIN_PREFIX}objcopy", :)
PATH=$_SAVE_PATH
])
AC_DEFUN([MOZ_CXX11],

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

@ -25,11 +25,6 @@ export CPP="$topsrcdir/clang/bin/clang $FLAGS -E"
export LLVMCONFIG=$topsrcdir/clang/bin/llvm-config
export LDFLAGS="-Wl,-syslibroot,$CROSS_SYSROOT -Wl,-dead_strip"
export TOOLCHAIN_PREFIX=$CROSS_CCTOOLS_PATH/bin/x86_64-apple-darwin10-
#TODO: bug 1184202 - would be nice if these could be detected with TOOLCHAIN_PREFIX automatically
export AR=${TOOLCHAIN_PREFIX}ar
export RANLIB=${TOOLCHAIN_PREFIX}ranlib
export STRIP=${TOOLCHAIN_PREFIX}strip
export OTOOL=${TOOLCHAIN_PREFIX}otool
export DSYMUTIL=$topsrcdir/clang/bin/llvm-dsymutil
export GENISOIMAGE=$topsrcdir/genisoimage/genisoimage
export DMG_TOOL=$topsrcdir/dmg/dmg

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

@ -289,6 +289,7 @@ def wanted_mozconfig_variables(help):
'PERL',
'RPMBUILD',
'TAR',
'TOOLCHAIN_PREFIX',
'UNZIP',
'USE_FC_FREETYPE',
'WITHOUT_X',
@ -456,6 +457,9 @@ def split_triplet(triplet):
endianness=endianness,
raw_cpu=cpu,
raw_os=os,
# Toolchains, most notably for cross compilation may use cpu-os
# prefixes.
toolchain='%s-%s' % (cpu, os),
)
@ -717,7 +721,8 @@ add_old_configure_assignment('RELEASE_BUILD',
# This is temporary until js/src/configure and configure are merged.
# Use instead of option() in js/moz.configure
# Use instead of option() in js/moz.configure and more generally, for
# options that are shared between configure and js/src/configure.
@template
def js_option(*args, **kwargs):
opt = option(*args, **kwargs)

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

@ -325,7 +325,6 @@ def old_configure_options(*options):
'--with-doc-output-dir',
'--with-float-abi',
'--with-fpu',
'--with-gonk-toolchain-prefix',
'--with-google-api-keyfile',
'--with-google-oauth-api-keyfile',
'--with-intl-api',

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

@ -101,3 +101,22 @@ def using_compiler_wrapper(compiler_wrapper):
return True
set_config('MOZ_USING_COMPILER_WRAPPER', using_compiler_wrapper)
# Cross-compilation related things.
# ==============================================================
js_option('--with-toolchain-prefix', env='TOOLCHAIN_PREFIX', nargs=1,
help='Prefix for the target toolchain')
@depends('--with-toolchain-prefix', target, host, cross_compiling)
def toolchain_prefix(value, target, host, cross_compiling):
if value:
return value[0]
# Special case x86-64 <-> x86 cross compiling until we have the right tests
# in moz.configure land.
if cross_compiling and not all(i.cpu in ('x86_64', 'x86')
for i in (target, host)):
return '%s-' % target.toolchain
return ''
add_old_configure_assignment('TOOLCHAIN_PREFIX', toolchain_prefix)

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

@ -83,11 +83,6 @@ else
fi
AC_SUBST(autoconfmk)
MOZ_ARG_WITH_STRING(gonk-toolchain-prefix,
[ --with-gonk-toolchain-prefix=DIR
prefix to gonk toolchain commands],
gonk_toolchain_prefix=$withval)
if test -n "$gonkdir" ; then
kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"`
dnl Default to ICS
@ -96,17 +91,6 @@ if test -n "$gonkdir" ; then
ANDROID_VERSION="${PLATFORM_SDK_VERSION}"
fi
dnl set up compilers
AS="$gonk_toolchain_prefix"as
CC="$gonk_toolchain_prefix"gcc
CXX="$gonk_toolchain_prefix"g++
CPP="$gonk_toolchain_prefix"cpp
LD="$gonk_toolchain_prefix"ld
AR="$gonk_toolchain_prefix"ar
RANLIB="$gonk_toolchain_prefix"ranlib
STRIP="$gonk_toolchain_prefix"strip
OBJCOPY="$gonk_toolchain_prefix"objcopy
STLPORT_CPPFLAGS="-I$_topsrcdir/build/stlport/stlport -I$gonkdir/ndk/sources/cxx-stl/system/include"
STLPORT_LIBS="-lstlport"

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

@ -96,11 +96,6 @@ DIST="$MOZ_BUILD_ROOT/dist"
MOZ_DEFAULT_COMPILER
MOZ_ARG_WITH_STRING(gonk-toolchain-prefix,
[ --with-gonk-toolchain-prefix=DIR
prefix to gonk toolchain commands],
gonk_toolchain_prefix=$withval)
if test -n "$gonkdir" ; then
dnl export for js/src/configure. We can't pass the option down normally,
dnl because it's a `--enable-project=b2g`-only option.
@ -115,18 +110,6 @@ if test -n "$gonkdir" ; then
ANDROID_VERSION="${PLATFORM_SDK_VERSION}"
fi
dnl set up compilers
TOOLCHAIN_PREFIX="$gonk_toolchain_prefix"
AS="$gonk_toolchain_prefix"as
CC="$gonk_toolchain_prefix"gcc
CXX="$gonk_toolchain_prefix"g++
CPP="$gonk_toolchain_prefix"cpp
LD="$gonk_toolchain_prefix"ld
AR="$gonk_toolchain_prefix"ar
RANLIB="$gonk_toolchain_prefix"ranlib
STRIP="$gonk_toolchain_prefix"strip
OBJCOPY="$gonk_toolchain_prefix"objcopy
if ! test -e "$gonkdir/ndk/sources/cxx-stl/stlport/src/iostream.cpp"; then
AC_MSG_ERROR([Couldn't find path to stlport sources in the gonk tree])
fi