From e567f8f273712aaa9ac4cdebac2984470441155b Mon Sep 17 00:00:00 2001 From: Marty Rosenberg Date: Thu, 15 Nov 2012 10:24:07 -0500 Subject: [PATCH] Add in support for running a cross-shell directly in qemu (bug 807936, r=ted) --- js/src/build/qemu-wrap | 24 ++++++++++++++++++++++++ js/src/configure.in | 15 +++++++++++++++ js/src/jsapi-tests/Makefile.in | 4 ++++ js/src/shell/Makefile.in | 4 ++++ 4 files changed, 47 insertions(+) create mode 100755 js/src/build/qemu-wrap diff --git a/js/src/build/qemu-wrap b/js/src/build/qemu-wrap new file mode 100755 index 00000000000..e33938955d9 --- /dev/null +++ b/js/src/build/qemu-wrap @@ -0,0 +1,24 @@ +#!/bin/bash +# this script creates a wrapper shell script for an executable. The idea is the actual executable cannot be +# executed natively (it was cross compiled), but we want to run tests natively. Running this script +# as part of the compilation process will move the non-native executable to a new location, and replace it +# with a script that will run it under qemu. +while [[ -n $1 ]]; do + case $1 in + --qemu) QEMU="$2"; shift 2;; + --libdir) LIBDIR="$2"; shift 2;; + --ld) LD="$2"; shift 2;; + *) exe="$1"; shift;; + esac +done +if [[ -z $LIBDIR ]]; then + echo "You need to specify a directory for the cross libraries when you configure the shell" + echo "You can do this with --with-cross-lib=" + exit 1 +fi +LD=${LD:-$LIBDIR/ld-linux.so.3} +mv $exe $exe.target +# Just hardcode the path to the executable. It'll be pretty obvious if it is doing the wrong thing. + +echo $'#!/bin/bash\n' $QEMU -E LD_LIBRARY_PATH="${LIBDIR}" "$LD" "$(readlink -f "$exe.target")" '"$@"' >"$exe" +chmod +x $exe \ No newline at end of file diff --git a/js/src/configure.in b/js/src/configure.in index 8773f36352a..a379941cf73 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -4136,6 +4136,21 @@ if test "$MOZ_DEBUG" -o "$NS_TRACE_MALLOC"; then MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS= fi +dnl ======================================================== +dnl = +dnl = Options for generating the shell as a script +dnl = +dnl ======================================================== + +MOZ_ARG_WITH_STRING(qemu-exe, +[ --with-qemu-exe=path Use path as an arm emulator on host platforms], + QEMU_EXE=$withval) +AC_SUBST(QEMU_EXE) +MOZ_ARG_WITH_STRING(cross-lib, +[ --with-cross-lib=dir Use dir as the location for arm libraries], + CROSS_LIB=$withval, + CROSS_LIB=/usr/$target) +AC_SUBST(CROSS_LIB) dnl ======================================================== dnl = dnl = Maintainer debug option (no --enable equivalent) diff --git a/js/src/jsapi-tests/Makefile.in b/js/src/jsapi-tests/Makefile.in index ddb0c147679..dc61e359855 100644 --- a/js/src/jsapi-tests/Makefile.in +++ b/js/src/jsapi-tests/Makefile.in @@ -85,6 +85,10 @@ LIBS = $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(NSPR_LIBS) $(MOZ_ZLI LOCAL_INCLUDES += -I$(topsrcdir) -I.. +ifdef QEMU_EXE +MOZ_POST_PROGRAM_COMMAND = $(topsrcdir)/build/qemu-wrap --qemu $(QEMU_EXE) --libdir $(CROSS_LIB) +endif + include $(topsrcdir)/config/rules.mk check:: diff --git a/js/src/shell/Makefile.in b/js/src/shell/Makefile.in index 90a277939e4..ff278570d27 100644 --- a/js/src/shell/Makefile.in +++ b/js/src/shell/Makefile.in @@ -36,6 +36,10 @@ DARWIN_EXE_LDFLAGS += -pagezero_size 10000 -image_base 100000000 endif endif +ifdef QEMU_EXE +MOZ_POST_PROGRAM_COMMAND = $(topsrcdir)/build/qemu-wrap --qemu $(QEMU_EXE) --libdir $(CROSS_LIB) +endif + include $(topsrcdir)/config/rules.mk ifdef MOZ_SHARK