mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-30 02:28:54 +00:00
f01472b308
Issue #1361
222 lines
5.8 KiB
Diff
222 lines
5.8 KiB
Diff
diff --git a/buildrump.sh b/buildrump.sh
|
|
index 9cc5457..620dbf1 100755
|
|
--- a/buildrump.sh
|
|
+++ b/buildrump.sh
|
|
@@ -191,8 +191,8 @@ probear ()
|
|
{
|
|
|
|
# Check for GNU/BSD ar
|
|
- if ! ${AR} -V 2>/dev/null | egrep '(GNU|BSD) ar' > /dev/null ; then
|
|
- die Need GNU or BSD ar "(`type ${AR}`)"
|
|
+ if ! ${TOOLS_AR} -V 2>/dev/null | egrep '(GNU|BSD) ar' > /dev/null ; then
|
|
+ die Need GNU or BSD ar "(`type ${TOOLS_AR}`)"
|
|
fi
|
|
}
|
|
|
|
@@ -223,7 +223,7 @@ doesitbuild ()
|
|
|
|
warnflags="-Wmissing-prototypes -Wstrict-prototypes -Wimplicit -Werror"
|
|
printf "${theprog}" \
|
|
- | ${CC} ${warnflags} ${EXTRA_LDFLAGS} ${EXTRA_CFLAGS} \
|
|
+ | ${TOOLS_CC} ${warnflags} ${EXTRA_LDFLAGS} ${EXTRA_CFLAGS} -x c - -o /dev/null $* \
|
|
-x c - -o /dev/null $* > /dev/null 2>&1
|
|
}
|
|
|
|
@@ -242,13 +242,7 @@ checkcheckout ()
|
|
|
|
checkcompiler ()
|
|
{
|
|
-
|
|
- if ! ${KERNONLY}; then
|
|
- doesitbuild 'int main(void) {return 0;}\n' \
|
|
- ${EXTRA_RUMPUSER} ${EXTRA_RUMPCOMMON}
|
|
- [ $? -eq 0 ] || ${TITANMODE} || \
|
|
- die 'Probe cannot build a binary'
|
|
- fi
|
|
+ return
|
|
}
|
|
|
|
probe_rumpuserbits ()
|
|
@@ -548,7 +542,8 @@ makemake ()
|
|
stage=$2
|
|
cmd=$3
|
|
|
|
- env CFLAGS= HOST_LDFLAGS=-L${OBJDIR} ./build.sh \
|
|
+ env CC=${BUILD_CC} AR=${BUILD_AR} NM=${BUILD_NM} OBJCOPY=${BUILD_OBJCOPY} \
|
|
+ CFLAGS= BUILD_LDFLAGS=-L${OBJDIR} ./build.sh \
|
|
-m ${MACHINE} -u \
|
|
-D ${stage} -w ${wrapper} \
|
|
-T ${BRTOOLDIR} -j ${JNUM} \
|
|
@@ -708,10 +703,27 @@ evaltoolchain ()
|
|
rm -f ${OBJDIR}/canrun
|
|
fi
|
|
|
|
+ # check for crossbuild with tools running on host
|
|
+ : ${BUILD_CC:=}
|
|
+ [ ${BUILD_CC} ] && HYBRIDBUILD=true
|
|
+
|
|
+ if ${HYBRIDBUILD}; then
|
|
+ : ${TOOLS_CC:=${BUILD_CC}}
|
|
+ : ${TOOLS_AR:=${BUILD_AR}}
|
|
+ : ${TOOLS_NM:=${BUILD_NM}}
|
|
+ : ${TOOLS_OBJCOPY:=${BUILD_OBJCOPY}}
|
|
+ else
|
|
+ : ${TOOLS_CC:=${CC}}
|
|
+ : ${TOOLS_AR:=${AR}}
|
|
+ : ${TOOLS_NM:=${NM}}
|
|
+ : ${TOOLS_OBJCOPY:=${OBJCOPY}}
|
|
+ fi
|
|
+
|
|
+
|
|
# Check for variant of compiler.
|
|
# XXX: why can't all cc's that are gcc actually tell me
|
|
# that they're gcc with cc --version?!?
|
|
- ccver=$(${CC} --version)
|
|
+ ccver=$(${TOOLS_CC} --version)
|
|
if echo ${ccver} | grep -q 'Free Software Foundation'; then
|
|
CC_FLAVOR=gcc
|
|
elif echo ${ccver} | grep -q clang; then
|
|
@@ -721,33 +733,21 @@ evaltoolchain ()
|
|
CC_FLAVOR=pcc
|
|
PCC='-V HAVE_PCC=1'
|
|
else
|
|
- die Unsupported \${CC} "(`type ${CC}`)"
|
|
+ die Unsupported \${TOOLS_CC} "(`type ${TOOLS_CC}`)"
|
|
fi
|
|
|
|
- # Check the arch we're building for so as to work out the necessary
|
|
- # NetBSD machine code we need to use. First try -dumpmachine,
|
|
- # and if that works, be happy with it. Not all compilers support
|
|
- # it (e.g. older versions of clang), so if that doesn't work,
|
|
- # try parsing the output of -v
|
|
- if ! CC_TARGET=$(${CC} -dumpmachine 2>/dev/null) ; then
|
|
- # first check "${CC} -v" ... just in case it fails, we want a
|
|
- # sensible return value instead of it being lost in the pipeline
|
|
- # (this is easier than adjusting IFS)
|
|
- if ${CC} -v >/dev/null 2>&1 ; then
|
|
- # then actually process the output of ${CC} -v
|
|
- CC_TARGET=$(LC_ALL=C ${CC} -v 2>&1 \
|
|
- | sed -n 's/^Target: //p' )
|
|
- [ -z "${CC_TARGET}" ] \
|
|
- && die failed to probe target of \"${CC}\"
|
|
- else
|
|
- # this might be pcc
|
|
- ${CC} -v 2>&1 | grep pcc > /dev/null || \
|
|
- die \"${CC} -v failed\". Check \"${CC}\"
|
|
- CC_TARGET=$(${CC} -v 2>&1 \
|
|
- | sed -n -e 's/^pcc.*for //' -e 's/,.*//p' )
|
|
- fi
|
|
+ MACH_ARCH=$(echo ${CC_TARGET} | sed 's/.*-\(.*\)-.*/\1/' )
|
|
+ echo "MACH_ARCH cc ${MACH_ARCH}"
|
|
+
|
|
+
|
|
+ if [ "${MACH_ARCH}" = 'x86' ] ; then
|
|
+ CC_TARGET=genode-x86
|
|
+ MACH_ARCH=x86_64
|
|
+ elif [ "${MACH_ARCH}" = 'arm' ] ; then
|
|
+ CC_TARGET=genode-arm
|
|
+ else
|
|
+ die Unsupported architectur ${MACH_ARCH}
|
|
fi
|
|
- MACH_ARCH=$(echo ${CC_TARGET} | sed 's/-.*//' )
|
|
|
|
# Set names of tools we're going to use. try to guess them
|
|
# for common scenarios
|
|
@@ -767,6 +767,9 @@ evaltoolchain ()
|
|
done
|
|
|
|
case ${CC_TARGET} in
|
|
+ "genode")
|
|
+ RUMPKERN_UNDEF='-U__FreeBSD__'
|
|
+ ;;
|
|
*-linux*)
|
|
RUMPKERN_UNDEF='-Ulinux -U__linux -U__linux__ -U__gnu_linux__'
|
|
cppdefines _BIG_ENDIAN \
|
|
@@ -793,10 +796,10 @@ evaltoolchain ()
|
|
${TITANMODE} || die ELF required as target object format
|
|
fi
|
|
|
|
- if cppdefines __LP64__; then
|
|
- THIRTYTWO=false
|
|
- else
|
|
+ if ${TARGET_IS_32BIT}; then
|
|
THIRTYTWO=true
|
|
+ else
|
|
+ THIRTYTWO=false
|
|
fi
|
|
|
|
# The compiler cannot do %zd/u warnings if the NetBSD kernel
|
|
@@ -857,6 +860,9 @@ evalplatform ()
|
|
echo '>> Mach-O object format used by OS X is not yet supported'
|
|
target_supported=false
|
|
;;
|
|
+ genode-*)
|
|
+ TARGET=genode
|
|
+ ;;
|
|
*)
|
|
target_supported=false
|
|
;;
|
|
@@ -867,8 +873,8 @@ evalplatform ()
|
|
fi
|
|
|
|
# does target support __thread. if yes, optimize curlwp
|
|
- doesitbuild '__thread int lanka; int main(void) {return lanka;}\n'
|
|
- [ $? -eq 0 ] && RUMP_CURLWP=__thread
|
|
+# doesitbuild '__thread int lanka; int main(void) {return lanka;}\n'
|
|
+# [ $? -eq 0 ] && RUMP_CURLWP=__thread
|
|
}
|
|
|
|
# ARM targets require a few extra checks
|
|
@@ -880,8 +886,8 @@ probearm ()
|
|
MACHINE="evbearm-el"
|
|
MACH_ARCH="arm"
|
|
else
|
|
- MACHINE="evbearm-eb"
|
|
- MACH_ARCH="armeb"
|
|
+ MACHINE="evbearm"
|
|
+ MACH_ARCH="arm"
|
|
fi
|
|
|
|
TOOLABI="elf-eabi"
|
|
@@ -893,6 +899,11 @@ probearm ()
|
|
if cppdefines __VFP_FP__; then
|
|
MKSOFTFLOAT=no
|
|
fi
|
|
+
|
|
+ EXTRA_CFLAGS='-march=armv7-a'
|
|
+ EXTRA_AFLAGS='-march=armv7-a'
|
|
+ EXTRA_LDFLAGS='-nostdlib'
|
|
+ appendvar EXTRA_CWARNFLAGS -Wno-format
|
|
}
|
|
|
|
# aarch64 requires a few checks
|
|
@@ -962,6 +973,9 @@ evalmachine ()
|
|
MACHINE="i386"
|
|
MACH_ARCH="i486"
|
|
TOOLABI="elf"
|
|
+ appendvar EXTRA_CFLAGS -m32
|
|
+ appendvar EXTRA_LDFLAGS -m32
|
|
+ appendvar EXTRA_AFLAGS -m32
|
|
else
|
|
MACHINE="amd64"
|
|
MACH_ARCH="x86_64"
|
|
@@ -1044,13 +1058,17 @@ parseargs ()
|
|
debugginess=0
|
|
KERNONLY=false
|
|
NATIVENETBSD=false
|
|
+ TARGET_IS_32BIT=false
|
|
OBJDIR=./obj
|
|
DESTDIR=./rump
|
|
SRCDIR=./src
|
|
JNUM=4
|
|
|
|
- while getopts 'd:DhHj:kNo:qrs:T:V:F:' opt; do
|
|
+ while getopts '3:d:DhHj:kNo:qrs:T:V:F:' opt; do
|
|
case "$opt" in
|
|
+ 3)
|
|
+ TARGET_IS_32BIT=true
|
|
+ ;;
|
|
d)
|
|
DESTDIR=${OPTARG}
|
|
;;
|