summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-08-20 18:37:29 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-08-20 18:37:29 +0000
commite8cc0dbb4cc6f9afbd7f5f2d236e199ac6db6f39 (patch)
tree79267741ca8f00c512b263b34a74408ee69c0ac7 /gcc
parentd4094ecd2d067ff07f380574a7f2b315286ba947 (diff)
2011-08-21 Jie Liu <lj8175@gmail.com>
* gcc/rtems_gcj_init.c: New file for rtems/gcj testing. * gcc/Makefile.rtems_gcjinit: The Makefile for gcc/rtems_gcj_init.c * gcc/rundeja: Add options for libjava test. * gcc/test_driver: Add GCJ options. * gcc/do_one: Add GCJ build and test options.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/Makefile.rtems_gcjinit17
-rwxr-xr-xgcc/do_one170
-rw-r--r--gcc/rtems_gcj_init.c85
-rwxr-xr-xgcc/rundeja16
-rwxr-xr-xgcc/test_driver10
5 files changed, 268 insertions, 30 deletions
diff --git a/gcc/Makefile.rtems_gcjinit b/gcc/Makefile.rtems_gcjinit
new file mode 100644
index 0000000..a09dd49
--- /dev/null
+++ b/gcc/Makefile.rtems_gcjinit
@@ -0,0 +1,17 @@
+#
+# Makefile for GCJ testsuite
+#
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+# Tool helpers
+
+all: rtems_gcj_init.o
+
+clean:
+ rm -f rtems_gcj_init.o
+
+rtems_gcj_init.o: ${SCRIPTDIR}/gcc/rtems_gcj_init.c
+ $(CC) $(CFLAGS) $(CPU_CFLAGS) -c ${SCRIPTDIR}/gcc/rtems_gcj_init.c
diff --git a/gcc/do_one b/gcc/do_one
index 03e7af2..806bd1b 100755
--- a/gcc/do_one
+++ b/gcc/do_one
@@ -10,10 +10,12 @@
# - building Objective-C (multilib) - 6m45.532s
# - building Ada (multilib) - ?
# - building Go (multilib) - ?
+# - building GCJ (multilib) - ?
# - Running GCC Test Suite (sis) - 122m47.289s
# - Running Objective-C Test Suite (sis) - ?
# - Running ACAT (sis) - ?
# - Running Go Test Suite (sis) - ?
+# - Running GCJ Test Suite (sis) - ?
#
# Computer Info
# Fedora 14 on Intel Core2 Duo Q6600 (4 core) @ 2.40GHz w/ 4GB RAM
@@ -51,6 +53,9 @@ do_ada=no
# Build the GCC Go language cross compiler.
do_gccgo=no
do_gccgo_multilib=yes
+# Build the GCC Java language cross compiler.
+do_gcj=no
+ do_gcj_multilib=yes
# Build RTEMS for a particular CPU/BSP combination
do_rtems=no
# Which test suites do we attempt
@@ -59,6 +64,7 @@ run_objctests=no
run_acats=no
run_gccgotests=no
run_libgotests=no
+run_libjavatests=no
# Do we send email to gcc-testresults with the test results?
do_mail=yes
# Are we noisy when running?
@@ -69,8 +75,8 @@ usage()
{
cat <<EOF
do_one [options] CPU BSP
- -A - binutils, stage 1, C++, C/C++ multilib, Ada, GCC Go, RTEMS
- -T - run GCC, Ada and GCC Go tests
+ -A - binutils, stage 1, C++, C/C++ multilib, Ada, GCC Go, GCJ, RTEMS
+ -T - run GCC, Ada, GCC Go and GCJ tests
-b - install binutils (from source or copy installed RPM contents)
-D - install gdb (from source or copy installed RPM contents)
-n - native compiler
@@ -79,6 +85,7 @@ do_one [options] CPU BSP
-m - do not build multilib
-a - stage 2 Ada compiler
-G - stage 2 GCC Go compiler
+ -J - stage 2 GCC Java compiler
-r - build RTEMS
-g - run GCC C/C++ tests
-C - run ACATS
@@ -89,6 +96,7 @@ do_one [options] CPU BSP
-P - Run Objective-C Tests
-o - run GCC Go tests
-t - run libgo tests
+ -j - run libjava tests
EOF
}
@@ -117,6 +125,7 @@ do
do_multilib="yes"
do_ada="yes"
do_gccgo="yes"
+ do_gcj="yes"
do_objc="yes"
do_rtems="yes"
;;
@@ -138,6 +147,7 @@ do
# Stage 2 arguments
a) do_ada=`toggle ${do_ada}` ;;
G) do_gccgo=`toggle ${do_gccgo}` ;;
+ J) do_gcj=`toggle ${do_gcj}` ;;
# Build RTEMS
r) do_rtems=`toggle ${do_rtems}` ;;
# Testsuites to run
@@ -149,6 +159,7 @@ do
P) run_objctests=`toggle ${do_objc}` ;;
o) run_gccgotests=`toggle ${run_gccgotests}` ;;
t) run_libgotests=`toggle ${run_libgotests}` ;;
+ j) run_libjavatests=`toggle ${run_libjavatests}` ;;
*) fatal ;;
esac
done
@@ -196,32 +207,46 @@ if [ ${do_gccgo} = "yes" ] ; then
esac
fi
+# Which CPUs do not support GCJ
+if [ ${do_gcj} = "yes" ] ; then
+ case ${cpu} in
+ avr|h8300|m32c)
+ do_gcj=no
+ echo ${cpu} does not support GCJ
+ ;;
+ *);;
+ esac
+fi
+
# When verbose, print settings
if [ ${verbose} = yes ] ; then
- echo "Target : " ${cpu}
- echo "BSP : " ${bsp}
- echo "Binutils : " ${do_binutils}
- echo "GDB : " ${do_gdb}
- echo "Build Native : " ${do_native}
- echo "Build Stage 1 : " ${do_stage1}
- echo " C++ : " ${do_cxx}
- echo " Multilib : " ${do_multilib}
- echo "Stage 2 : " ${do_ada}
- echo " Objective-C : " ${do_objc}
- echo " Ada : " ${do_ada}
- echo " Multilib : " ${do_ada_multilib}
- echo " GCC Go : " ${do_gccgo}
- echo " Multilib : " ${do_gccgo_multilib}
- echo "Build RTEMS : " ${do_rtems}
- echo "Run GCC Tests : " ${run_gcctests}
- echo "Run ObjC Tests: " ${run_objctests}
- echo "Run ACATS : " ${run_acats}
- echo "Run Go Tests : " ${run_gccgotests}
- echo "Do libgo Tests: " ${run_libgotests}
- echo "Email Tests : " ${do_mail}
- echo "Native GCC : " `type gcc`
- echo "PATH : " ${PATH}
- echo "Clean up : " ${do_cleanup}
+ echo "Target : " ${cpu}
+ echo "BSP : " ${bsp}
+ echo "Binutils : " ${do_binutils}
+ echo "GDB : " ${do_gdb}
+ echo "Build Native : " ${do_native}
+ echo "Build Stage 1 : " ${do_stage1}
+ echo " C++ : " ${do_cxx}
+ echo " Multilib : " ${do_multilib}
+ echo "Stage 2 : " ${do_ada}
+ echo " Objective-C : " ${do_objc}
+ echo " Ada : " ${do_ada}
+ echo " Multilib : " ${do_ada_multilib}
+ echo " GCC Go : " ${do_gccgo}
+ echo " Go Multilib : " ${do_gccgo_multilib}
+ echo " GCJ : " ${do_gcj}
+ echo " GCJ Multilib : " ${do_gccgcj_multilib}
+ echo "Build RTEMS : " ${do_rtems}
+ echo "Run GCC Tests : " ${run_gcctests}
+ echo "Run ObjC Tests : " ${run_objctests}
+ echo "Run ACATS : " ${run_acats}
+ echo "Run Go Tests : " ${run_gccgotests}
+ echo "Do libgo Tests : " ${run_libgotests}
+ echo "Do libjava Tests: " ${run_libjavatests}
+ echo "Email Tests : " ${do_mail}
+ echo "Native GCC : " `type gcc`
+ echo "PATH : " ${PATH}
+ echo "Clean up : " ${do_cleanup}
fi
# Should the user have specified a CPU and/or BSP?
@@ -229,7 +254,8 @@ needBSP=no
needCPU=no
if [ ${do_binutils} = yes -o ${do_gdb} = yes -o \
- ${do_stage1} = yes -o ${do_ada} = yes -o ${do_gccgo} = yes ] ; then
+ ${do_stage1} = yes -o ${do_ada} = yes -o \
+ ${do_gccgo} = yes -o ${do_gcj} = yes ] ; then
needCPU=yes
fi
@@ -238,8 +264,14 @@ if [ ${do_native} = yes -a ${do_gccgo} = yes ] ; then
do_cxx=yes
fi
+if [ ${do_native} = yes -a ${do_gcj} = yes ] ; then
+ echo "Warning! GCJ requires native C++ to build."
+ do_cxx=yes
+fi
+
if [ ${do_rtems} = yes -o ${run_gcctests} = yes -o \
- ${run_acats} = yes -o ${run_gccgotests} = yes ] ; then
+ ${run_acats} = yes -o ${run_gccgotests} = yes -o \
+ ${run_libjavatests} = yes ] ; then
needBSP=yes
needCPU=yes
if [ x${bsp} = x ] ; then
@@ -928,3 +960,85 @@ if [ ${do_gccgo} = "yes" ] ; then
test ${do_cleanup} = "yes" && rm -rf b-${cpu}-go
fi
exit 0
+
+##### Build a GCJ compiler now that we have a cross installed
+j_gcj()
+{
+ if [ X${1} = X ] ; then
+ echo Usage: $0 TARGET_CPU
+ exit 1
+ fi
+ TARGET=${1}-rtems${RTEMS_VERSION}
+
+ if [ ! -d ${INSTALL} ] ; then
+ echo ${INSTALL} does not exist
+ exit 1
+ fi
+
+ if [ ${verbose} = yes ] ; then
+ echo "Cross GCC ==>" `type ${TARGET}-gcc`
+ fi
+
+ if [ ${do_gcj_multilib} = yes ] ; then
+ gcj_multilib="--enable-multilib"
+ else
+ gcj_multilib="--disable-multilib"
+ fi
+
+ case ${TARGET} in
+ i386*) GOFLAGS="-march=i486" ;;
+ *) GOFLAGS="" ;;
+ esac
+# CFLAGS_FOR_TARGET=-B${BSP_INSTALL}/${TARGET}/${BSP_BUILT}/lib/
+
+ ${GCCDIR}/configure \
+ ${GCC_EXTRA_ARGS} \
+ CFLAGS_FOR_TARGET="-B${BSP_INSTALL}/${TARGET}/${BSP_BUILT}/lib/ ${GOFLAGS}" \
+ --enable-threads=rtems --with-gnu-as ${gcj_multilib} \
+ --with-gnu-ld --disable-newlib --verbose \
+ --with-system-zlib --disable-nls \
+ --enable-version-specific-runtime-libs \
+ --with-host-libstdcxx=-static-libstdc++ \
+ --enable-languages=c,c++,java --target=$TARGET --prefix=$INSTALL &&
+ make ${MAKEJOBS} &&
+ make install
+ status=$?
+ if [ $status -ne 0 ] ; then
+ echo "Failed building GCJ"
+ fi
+ exit $status
+}
+
+gcj_fail="no"
+if [ ${do_gcj} = "yes" ] ; then
+ echo "Building Stage 2 cross GCC Java compiler for ${1} ..."
+ (cd ${BASEDIR} && \
+ rm -rf b-${cpu}-gcj && \
+ mkdir b-${cpu}-gcj && \
+ cd b-${cpu}-gcj && \
+ time j_gcj ${cpu} >${LOGDIR}/${cpu}-gcj.log 2>&1 && cd ..) || \
+ gcj_fail="yes"
+else
+ echo Skipping GCC Java compiler for ${cpu}
+fi
+
+##### Do the libjava tests
+if [ $a ${run_libjavatests} = "yes" -a \
+ -d ${BASEDIR}/b-${cpu}-gcj -a ${gcj_fail} = "no" ] ; then
+ echo "Running libjava DejaGNU tests..."
+ cd ${BASEDIR}/b-${cpu}-gcj || exit 1
+ time sh -x ${SCRIPTDIR}/gcc/rundeja ${bsp} libjava \
+ >${LOGDIR}/${cpu}-libjavatests-${bsp}.log 2>&1
+
+ RDIR=${RESULTSDIR}/${TARGET}-${bsp}/`date +%Y-%m-%d-%H-%M-%S`
+ mkdir -p ${RDIR}
+ cp ${TARGET}-${bsp}/libjava/testsuite/libjava-all.log \
+ ${TARGET}-${bsp}/libjava/testsuite/libjava-all.sum ${RDIR}
+else
+ echo Skipping libjava DejaGNU tests for ${cpu}/${bsp}
+fi
+
+if [ ${do_gcj} = "yes" ] ; then
+ test ${do_cleanup} = "yes" && rm -rf b-${cpu}-gcj
+fi
+exit 0
diff --git a/gcc/rtems_gcj_init.c b/gcc/rtems_gcj_init.c
new file mode 100644
index 0000000..07da0b8
--- /dev/null
+++ b/gcc/rtems_gcj_init.c
@@ -0,0 +1,85 @@
+#include <bsp.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <uart.h> //gdb
+#if defined(__mips__)
+/* GCC sometimes expects this on the mips */
+void _flush_cache()
+{
+}
+#endif
+static int argc = 1;
+static char arg0[20] = "rtems";
+static char *argv[20] = { arg0 };
+extern int main( int, char ** );
+extern int BSPConsolePort; //gdb
+int remote_debug=1;//gdb
+
+void *POSIX_Init(void*);
+
+/* configuration information */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 1000
+#define CONFIGURE_TICKS_PER_TIMESLICE 50
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 50
+#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 100
+#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 100
+#define CONFIGURE_MAXIMUM_POSIX_KEYS 300
+#define CONFIGURE_MAXIMUM_POSIX_TIMERS 100
+#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 100
+#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 100
+#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 100
+#define CONFIGURE_MAXIMUM_TASK_VARIABLES (2 * 40)
+#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE (4*1024 * 1024)
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (1*1024 * 1024)
+
+#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
+#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
+
+#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY TRUE
+//#define CONFIGURE_UNIFIED_WORK_AREAS --should care !!!
+#define CONFIGURE_STACK_CHECKER_ENABLED TRUE
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+
+void *POSIX_Init(
+ void *argument
+)
+{
+ struct sched_param param;
+ param.sched_priority = 5;
+ pthread_setschedparam(pthread_self(),SCHED_OTHER, &param);
+ //printf("Switch to GCJ Java HelloWorld!----in rtems_init.c\n");
+ /*gdb 1-----------------
+ if(BSPConsolePort!=BSP_UART_COM2)
+ i386_stub_glue_init(BSP_UART_COM2);
+ else
+ i386_stub_glue_init(BSP_UART_COM1);
+ set_debug_traps();
+ i386_stub_glue_init_breakin();
+ breakpoint();
+ //gdb -----------------*/
+ /*gdb 2---------------
+ init_remote_gdb();
+ breakpoint();
+ //gdb 2--------------*/
+ /*RTEMS memory view----
+ printf( "RTEMS Work Space : 0x%X -- 0x%X (%dM)\n",
+ Configuration.work_space_start,
+ (char*)Configuration.work_space_start + Configuration.work_space_size,
+ Configuration.work_space_size/1024/1024
+ );
+ printf( "RTEMS Malloc Heap : 0x%X -- 0x%X (%dM)\n",
+ RTEMS_Malloc_Heap->area_begin,
+ RTEMS_Malloc_Heap->area_end,
+ (RTEMS_Malloc_Heap->area_end - RTEMS_Malloc_Heap->area_begin)/1024/1024
+ );
+ //memory view ----------*/
+ main(argc, argv);
+ exit(0);
+}
diff --git a/gcc/rundeja b/gcc/rundeja
index 690130f..4846da7 100755
--- a/gcc/rundeja
+++ b/gcc/rundeja
@@ -146,6 +146,22 @@ case $2 in
--target_board=rtems-${CPU}-${DEJABSP} \
"
;;
+ libjava)
+ RTEMS_MAKEFILE_PATH=${rtemsdir} \
+ SCRIPTDIR=${SCRIPTDIR} \
+ make -f ${SCRIPTDIR}/gcc/Makefile.rtems_gcjinit
+ if [ $? -ne 0 ] ; then
+ echo unable to compile RTEMS GCC Java Init File
+ exit 1
+ fi
+ rtems_config=`pwd`/rtems_gcj_init.o
+ make check-gcc-java RUNTESTFLAGS="\
+ SIM=${BSP_SIM} \
+ RTEMS_MAKEFILE_PATH=${rtemsdir} \
+ RTEMS_CONFIG_OBJ=${rtems_config} \
+ --target_board=rtems-${CPU}-${DEJABSP} \
+ "
+ ;;
gcc)
RTEMS_MAKEFILE_PATH=${rtemsdir} \
SCRIPTDIR=${SCRIPTDIR} \
diff --git a/gcc/test_driver b/gcc/test_driver
index c759703..68ed48c 100755
--- a/gcc/test_driver
+++ b/gcc/test_driver
@@ -53,6 +53,7 @@ test_driver [options] CPU .. CPU
-1 - build basic tools (default=yes)
-a - build Ada (default=yes)
-G - build GCC Go (default=yes)
+ -J - build GCJ (default=yes)
-c - clean install point (also installs auto tools)
-m - mail results to lists (default=yes)
-n - build native
@@ -71,6 +72,7 @@ doBasicTools="yes"
verbose="no"
doAda="yes"
doGccGo="yes"
+doGcj="yes"
doMail="yes"
doTests="yes"
justTests="no"
@@ -86,6 +88,7 @@ do
1) doBasicTools=`toggle ${doBasicTools}` ;;
a) doAda=`toggle ${doAda}` ;;
G) doGccGo=`toggle ${doGccGo}` ;;
+ J) doGcj=`toggle ${doGcj}` ;;
c) doCleanInstallPoint=`toggle ${doCleanInstallPoint}` ;;
j) justTests=`toggle ${justTests}` ;;
m) doMail=`toggle ${doMail}` ;;
@@ -135,6 +138,7 @@ if [ ${verbose} = "yes" ] ; then
echo "Build Basic Tools: " ${doBasicTools}
echo "Build Ada: " ${doAda}
echo "Build GCC Go: " ${doGccGo}
+ echo "Build GCJ: " ${doGcj}
echo "Email Results: " ${doMail}
echo "Run Tests: " ${doTests}
echo "CPUs to Build: " ${CPUs}
@@ -144,12 +148,14 @@ test ${doMail} = "no" && mailArg="-M"
test ${doTests} = "yes" && testArg="-T"
test ${doAda} = "yes" && adaArg="-a"
test ${doGccGo} = "yes" && gccgoArg="-G"
+test ${doGcj} = "yes" && gcjArg="-J"
test ${doBasicTools} = "yes" && basicArgs="-b -D -1 -r"
echo "Checking for just tests override"
if [ ${justTests} = "yes" ] ; then
adaArg=""
gccgoArg=""
+ gcjArg=""
basicArgs=""
fi
@@ -265,10 +271,10 @@ do_cpus()
doOne=${SCRIPTDIR}/gcc/do_one
echo "Building ${cpu}/${bsp}..."
echo "time sh -x ${doOne} -v -d ${basicArgs} \
- ${gccgoArg} ${adaArg} ${mailArg} ${testArg} \
+ ${gccgoArg} ${gcjArg} ${adaArg} ${mailArg} ${testArg} \
${cpu} ${bsp} >${BASEDIR}/${bsp}.log 2>&1"
time sh -x ${doOne} -v -d ${basicArgs} \
- ${gccgoArg} ${adaArg} ${mailArg} ${testArg} \
+ ${gccgoArg} ${gcjArg} ${adaArg} ${mailArg} ${testArg} \
${cpu} ${bsp} >${BASEDIR}/${bsp}.log 2>&1
echo $?
done