diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-08-20 18:37:29 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-08-20 18:37:29 +0000 |
commit | e8cc0dbb4cc6f9afbd7f5f2d236e199ac6db6f39 (patch) | |
tree | 79267741ca8f00c512b263b34a74408ee69c0ac7 /gcc | |
parent | d4094ecd2d067ff07f380574a7f2b315286ba947 (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_gcjinit | 17 | ||||
-rwxr-xr-x | gcc/do_one | 170 | ||||
-rw-r--r-- | gcc/rtems_gcj_init.c | 85 | ||||
-rwxr-xr-x | gcc/rundeja | 16 | ||||
-rwxr-xr-x | gcc/test_driver | 10 |
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 @@ -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, ¶m); + //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 |