Add default libpayload build, xcompile, and lpgcc setup to tint.

Signed-off-by: Marc Jones <marc.jones@gmail.com>
Acked-by: Peter Stuge <peter@stuge.se>
Acked-by: Myles Watson <mylesgw@gmail.com>

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5816 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Marc Jones 2010-09-16 21:36:44 +00:00 committed by Marc Jones
parent 1c5637d926
commit 8985ef179b
1 changed files with 229 additions and 110 deletions

View File

@ -1,15 +1,94 @@
Patch tint 0.03b to be usable as coreboot payload, linked against Patch tint 0.03b to be usable as coreboot payload, linked against
the libpayload library. the libpayload library.
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
diff -Naur tint-0.03b.orig/config.h tint-0.03b/config.h
--- tint-0.03b.orig/config.h 2001-12-08 00:03:24.000000000 +0100 Add default libpayload build, xcompile, and lpgcc setup to tint.
+++ tint-0.03b/config.h 2008-04-11 22:19:35.000000000 +0200
Signed-off-by: Marc Jones <marc.jones@gmail.com>
diff -rupN tintorig/Makefile tint/Makefile
--- tintorig/Makefile 2005-07-17 05:30:54.000000000 -0600
+++ tint/Makefile 2010-08-23 18:06:24.671875000 -0600
@@ -28,6 +28,65 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+$(if $(wildcard .xcompile),,$(eval $(shell bash ./xcompile.sh &> .xcompile)))
+include .xcompile
+
+LIBCONFIG_PATH := ../libpayload
+LIBPAYLOAD_DIR := ./libpayloadbin
+LPCC := $(LIBPAYLOAD_DIR)/libpayload/bin/lpgcc
+LPAS := $(LIBPAYLOAD_DIR)/libpayload/bin/lpas
+HAVE_LIBPAYLOAD := $(wildcard $(LIBPAYLOAD_DIR)/libpayload/lib/libpayload.a)
+LIB_CONFIG ?= defconfig
+
+# CFLAGS := -Wall -Werror -Os
+CFLAGS := -Wall -g -Os
+TARGET := tint
+OBJS := $(TARGET).o engine.o io.o utils.o
+
+# Make is silent per default, but 'make V=1' will show all compiler calls.
+ifneq ($(V),1)
+Q := @
+endif
+
+all: $(TARGET).elf
+# printf" CC $(CC)\n"
+
+$(TARGET).elf: $(OBJS) libpayload
+ $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n"
+ $(Q)$(LPCC) -o $@ $(OBJS)
+ $(Q)$(OBJCOPY) --only-keep-debug $@ tint.debug
+ $(Q)$(OBJCOPY) --strip-debug $@
+ $(Q)$(OBJCOPY) --add-gnu-debuglink=tint.debug $@
+
+%.o: %.c libpayload
+ $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n"
+ $(Q)$(LPCC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
+
+%.S.o: %.S libpayload
+ $(Q)printf " LPAS $(subst $(shell pwd)/,,$(@))\n"
+ $(Q)$(LPAS) $(ASFLAGS) --32 -o $@ $<
+
+ifneq ($(strip $(HAVE_LIBPAYLOAD)),)
+libpayload:
+ $(Q)printf "Found Libpayload $(LIBPAYLOAD_DIR).\n"
+else
+libpayload:
+ $(Q)printf "Building libpayload @ $(LIBCONFIG_PATH).\n"
+ $(Q)make -C $(LIBCONFIG_PATH) distclean
+ $(Q)make -C $(LIBCONFIG_PATH) $(LIB_CONFIG)
+ $(Q)make -C $(LIBCONFIG_PATH) DESTDIR=$(shell pwd)/$(LIBPAYLOAD_DIR) install
+endif
+
+clean:
+ $(Q)rm -f $(TARGET).elf $(TARGET).debug *.o
+ $(Q)rm .xcompile
+
+distclean: clean
+ $(Q)rm -rf $(LIBPAYLOAD_DIR)
+
+# Original tint targets
+ifdef $(UNUSED)
+
#CROSS = arm-linux-
bindir = $(DESTDIR)/usr/games
@@ -110,3 +169,4 @@ clean:
distclean: clean
$(MAKE) -C debian clean
+endif
diff -rupN tintorig/config.h tint/config.h
--- tintorig/config.h 2001-12-07 16:03:24.000000000 -0700
+++ tint/config.h 2010-01-27 13:59:18.000000000 -0700
@@ -29,7 +29,16 @@ @@ -29,7 +29,16 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
+#include <libpayload.h> +#include <libpayload.h>
+#include <curses.h> +#include <curses.h>
+#define random(x) rand(x) +#define random(x) rand(x)
@ -21,31 +100,31 @@ diff -Naur tint-0.03b.orig/config.h tint-0.03b/config.h
+#if 0 +#if 0
const char scorefile[] = SCOREFILE; const char scorefile[] = SCOREFILE;
+#endif +#endif
#endif /* #ifndef CONFIG_H */ #endif /* #ifndef CONFIG_H */
diff -Naur tint-0.03b.orig/engine.c tint-0.03b/engine.c diff -rupN tintorig/engine.c tint/engine.c
--- tint-0.03b.orig/engine.c 2005-07-17 13:26:22.000000000 +0200 --- tintorig/engine.c 2005-07-17 05:26:22.000000000 -0600
+++ tint-0.03b/engine.c 2008-04-11 22:19:35.000000000 +0200 +++ tint/engine.c 2010-01-27 13:59:18.000000000 -0700
@@ -27,8 +27,12 @@ @@ -27,8 +27,12 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
+#include "config.h" +#include "config.h"
+ +
+#if 0 +#if 0
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
+#endif +#endif
#include "typedefs.h" #include "typedefs.h"
#include "utils.h" #include "utils.h"
diff -Naur tint-0.03b.orig/io.c tint-0.03b/io.c diff -rupN tintorig/io.c tint/io.c
--- tint-0.03b.orig/io.c 2001-12-07 16:48:20.000000000 +0100 --- tintorig/io.c 2001-12-07 08:48:20.000000000 -0700
+++ tint-0.03b/io.c 2008-04-11 22:19:35.000000000 +0200 +++ tint/io.c 2010-01-27 13:59:18.000000000 -0700
@@ -27,9 +27,13 @@ @@ -27,9 +27,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
+#include "config.h" +#include "config.h"
+ +
+#if 0 +#if 0
@ -53,10 +132,10 @@ diff -Naur tint-0.03b.orig/io.c tint-0.03b/io.c
#include <sys/time.h> /* gettimeofday() */ #include <sys/time.h> /* gettimeofday() */
#include <unistd.h> /* gettimeofday() */ #include <unistd.h> /* gettimeofday() */
+#endif +#endif
#include <curses.h> #include <curses.h>
@@ -70,7 +74,11 @@ @@ -70,7 +74,11 @@ static int in_timeleft;
/* Initialize screen */ /* Initialize screen */
void io_init () void io_init ()
{ {
@ -68,7 +147,7 @@ diff -Naur tint-0.03b.orig/io.c tint-0.03b/io.c
start_color (); start_color ();
curs_set (CURSOR_INVISIBLE); curs_set (CURSOR_INVISIBLE);
out_attr = A_NORMAL; out_attr = A_NORMAL;
@@ -176,11 +184,17 @@ @@ -176,11 +184,17 @@ void out_beep ()
/* Read a character. Please note that you MUST call in_timeout() before in_getch() */ /* Read a character. Please note that you MUST call in_timeout() before in_getch() */
int in_getch () int in_getch ()
{ {
@ -86,102 +165,62 @@ diff -Naur tint-0.03b.orig/io.c tint-0.03b/io.c
gettimeofday (&endtv,NULL); gettimeofday (&endtv,NULL);
/* Timeout? */ /* Timeout? */
if (ch == ERR) if (ch == ERR)
@@ -198,6 +212,7 @@ @@ -198,6 +212,7 @@ int in_getch ()
in_timeleft -= endtv.tv_usec; in_timeleft -= endtv.tv_usec;
if (in_timeleft <= 0) in_timeleft = in_timetotal; if (in_timeleft <= 0) in_timeleft = in_timetotal;
} }
+#endif +#endif
return ch; return ch;
} }
diff -Naur tint-0.03b.orig/Makefile tint-0.03b/Makefile diff -rupN tintorig/tint.c tint/tint.c
--- tint-0.03b.orig/Makefile 2005-07-17 13:30:54.000000000 +0200 --- tintorig/tint.c 2005-07-17 05:26:43.000000000 -0600
+++ tint-0.03b/Makefile 2008-04-11 22:19:35.000000000 +0200 +++ tint/tint.c 2010-08-23 18:13:53.281250000 -0600
@@ -28,6 +28,36 @@ @@ -1,4 +1,3 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /*
* Copyright (c) Abraham vd Merwe <abz@blio.net>
+LIBPAYLOAD_DIR := ../libpayload * All rights reserved.
+CC := $(LIBPAYLOAD_DIR)/bin/lpgcc @@ -27,6 +26,7 @@
+AS := $(LIBPAYLOAD_DIR)/bin/lpas
+# CFLAGS := -Wall -Werror -Os
+CFLAGS := -Wall -Os
+TARGET := tint
+OBJS := $(TARGET).o engine.o io.o utils.o
+
+all: $(TARGET).elf
+
+$(TARGET).elf: $(OBJS)
+ $(CC) -o $@ $(OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+%.S.o: %.S
+ $(AS) --32 -o $@ $<
+
+clean:
+ rm -f $(TARGET).elf *.o
+
+distclean: clean
+
+
+
+
+
+ifdef $(UNUSED)
+
#CROSS = arm-linux-
bindir = $(DESTDIR)/usr/games
@@ -110,3 +140,4 @@
distclean: clean
$(MAKE) -C debian clean
+endif
diff -Naur tint-0.03b.orig/tint.c tint-0.03b/tint.c
--- tint-0.03b.orig/tint.c 2005-07-17 13:26:43.000000000 +0200
+++ tint-0.03b/tint.c 2008-04-11 22:19:35.000000000 +0200
@@ -27,6 +27,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
+#if 0 +#if 0
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -34,6 +35,7 @@ @@ -34,6 +34,7 @@
#include <pwd.h> #include <pwd.h>
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
+#endif +#endif
#include "typedefs.h" #include "typedefs.h"
#include "utils.h" #include "utils.h"
@@ -321,6 +323,7 @@ @@ -321,6 +322,7 @@ typedef struct
time_t timestamp; time_t timestamp;
} score_t; } score_t;
+#if 0 +#if 0
static void getname (char *name) static void getname (char *name)
{ {
struct passwd *pw = getpwuid (geteuid ()); struct passwd *pw = getpwuid (geteuid ());
@@ -337,7 +340,9 @@ @@ -337,7 +339,9 @@ static void getname (char *name)
name[NAMELEN - 1] = '\0'; name[NAMELEN - 1] = '\0';
} }
} }
+#endif +#endif
+#if 0 +#if 0
static void err1 () static void err1 ()
{ {
fprintf (stderr,"Error creating %s\n",scorefile); fprintf (stderr,"Error creating %s\n",scorefile);
@@ -349,10 +354,11 @@ @@ -349,10 +353,11 @@ static void err2 ()
fprintf (stderr,"Error writing to %s\n",scorefile); fprintf (stderr,"Error writing to %s\n",scorefile);
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
+#endif +#endif
void showplayerstats (engine_t *engine) void showplayerstats (engine_t *engine)
{ {
- fprintf (stderr, - fprintf (stderr,
@ -189,83 +228,83 @@ diff -Naur tint-0.03b.orig/tint.c tint-0.03b/tint.c
"\n\t PLAYER STATISTICS\n\n\t" "\n\t PLAYER STATISTICS\n\n\t"
"Score %11d\n\t" "Score %11d\n\t"
"Efficiency %11d\n\t" "Efficiency %11d\n\t"
@@ -360,6 +366,7 @@ @@ -360,6 +365,7 @@ void showplayerstats (engine_t *engine)
GETSCORE (engine->score),engine->status.efficiency,GETSCORE (engine->score) / getsum ()); GETSCORE (engine->score),engine->status.efficiency,GETSCORE (engine->score) / getsum ());
} }
+#if 0 +#if 0
static void createscores (int score) static void createscores (int score)
{ {
FILE *handle; FILE *handle;
@@ -394,7 +401,9 @@ @@ -394,7 +400,9 @@ static void createscores (int score)
fprintf (stderr,"%s",scoretitle); fprintf (stderr,"%s",scoretitle);
fprintf (stderr,"\t 1* %7d %s\n\n",score,scores[0].name); fprintf (stderr,"\t 1* %7d %s\n\n",score,scores[0].name);
} }
+#endif +#endif
+#if 0 +#if 0
static int cmpscores (const void *a,const void *b) static int cmpscores (const void *a,const void *b)
{ {
int result; int result;
@@ -412,7 +421,9 @@ @@ -412,7 +420,9 @@ static int cmpscores (const void *a,cons
/* timestamps is equal */ /* timestamps is equal */
return 0; return 0;
} }
+#endif +#endif
+#if 0 +#if 0
static void savescores (int score) static void savescores (int score)
{ {
FILE *handle; FILE *handle;
@@ -490,11 +501,13 @@ @@ -490,11 +500,13 @@ static void savescores (int score)
} }
fprintf (stderr,"\n"); fprintf (stderr,"\n");
} }
+#endif +#endif
/***************************************************************************/ /***************************************************************************/
/***************************************************************************/ /***************************************************************************/
/***************************************************************************/ /***************************************************************************/
+#if 0 +#if 0
static void showhelp () static void showhelp ()
{ {
fprintf (stderr,"USAGE: tint [-h] [-l level] [-n]\n"); fprintf (stderr,"USAGE: tint [-h] [-l level] [-n]\n");
@@ -504,9 +517,11 @@ @@ -504,9 +516,11 @@ static void showhelp ()
fprintf (stderr," -d Draw vertical dotted lines\n"); fprintf (stderr," -d Draw vertical dotted lines\n");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
+#endif +#endif
static void parse_options (int argc,char *argv[]) static void parse_options (int argc,char *argv[])
{ {
+#if 0 +#if 0
int i = 1; int i = 1;
while (i < argc) while (i < argc)
{ {
@@ -536,10 +551,12 @@ @@ -536,10 +550,12 @@ static void parse_options (int argc,char
} }
i++; i++;
} }
+#endif +#endif
} }
static void choose_level () static void choose_level ()
{ {
+#if 0 +#if 0
char buf[NAMELEN]; char buf[NAMELEN];
do do
@@ -549,6 +566,8 @@ @@ -549,6 +565,8 @@ static void choose_level ()
buf[strlen (buf) - 1] = '\0'; buf[strlen (buf) - 1] = '\0';
} }
while (!str2int (&level,buf) || level < MINLEVEL || level > MAXLEVEL); while (!str2int (&level,buf) || level < MINLEVEL || level > MAXLEVEL);
+#endif +#endif
+ level = 1; + level = 1;
} }
/***************************************************************************/ /***************************************************************************/
@@ -663,8 +682,15 @@ @@ -663,8 +681,15 @@ int main (int argc,char *argv[])
if (ch != 'q') if (ch != 'q')
{ {
showplayerstats (&engine); showplayerstats (&engine);
@ -273,21 +312,21 @@ diff -Naur tint-0.03b.orig/tint.c tint-0.03b/tint.c
savescores (GETSCORE (engine.score)); savescores (GETSCORE (engine.score));
+#endif +#endif
} }
+ mvprintw(10, 10, "Bye."); + printf("Bye.\n");
+ refresh(); + refresh();
+ halt(); + for(;;); //halt();
+#if 0 +#if 0
exit (EXIT_SUCCESS); exit (EXIT_SUCCESS);
+#endif +#endif
} }
diff -Naur tint-0.03b.orig/utils.c tint-0.03b/utils.c diff -rupN tintorig/utils.c tint/utils.c
--- tint-0.03b.orig/utils.c 2001-12-07 16:49:19.000000000 +0100 --- tintorig/utils.c 2001-12-07 08:49:19.000000000 -0700
+++ tint-0.03b/utils.c 2008-04-11 22:19:35.000000000 +0200 +++ tint/utils.c 2010-01-27 13:59:18.000000000 -0700
@@ -27,9 +27,13 @@ @@ -27,9 +27,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
+#include "config.h" +#include "config.h"
+ +
+#if 0 +#if 0
@ -295,10 +334,10 @@ diff -Naur tint-0.03b.orig/utils.c tint-0.03b/utils.c
#include <time.h> #include <time.h>
#include <limits.h> #include <limits.h>
+#endif +#endif
#include "typedefs.h" #include "typedefs.h"
@@ -41,8 +45,11 @@ @@ -41,8 +45,11 @@ void rand_init ()
#ifdef USE_RAND #ifdef USE_RAND
srand (time (NULL)); srand (time (NULL));
#else #else
@ -308,9 +347,9 @@ diff -Naur tint-0.03b.orig/utils.c tint-0.03b/utils.c
+ srandom (123); + srandom (123);
+#endif +#endif
} }
/* /*
@@ -61,6 +68,7 @@ @@ -61,6 +68,7 @@ int rand_value (int range)
* Convert an str to long. Returns TRUE if successful, * Convert an str to long. Returns TRUE if successful,
* FALSE otherwise. * FALSE otherwise.
*/ */
@ -318,8 +357,88 @@ diff -Naur tint-0.03b.orig/utils.c tint-0.03b/utils.c
bool str2int (int *i,const char *str) bool str2int (int *i,const char *str)
{ {
char *endptr; char *endptr;
@@ -69,3 +77,4 @@ @@ -69,3 +77,4 @@ bool str2int (int *i,const char *str)
return TRUE; return TRUE;
} }
+#endif +#endif
diff -rupN tintorig/xcompile.sh tint/xcompile.sh
--- tintorig/xcompile.sh 1969-12-31 17:00:00.000000000 -0700
+++ tint/xcompile.sh 2010-03-10 15:34:51.421875000 -0700
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+CONFIG=defconfig
+SCRIPT_DIR=`dirname "$0"`
+
+for make in make gmake gnumake; do
+ if [ "`$make --version 2>/dev/null | grep -c GNU`" -gt 0 ]; then
+ MAKE=$make
+ break
+ fi
+done
+
+GCCPREFIX=invalid
+for gccprefixes in `pwd`/$SCRIPT_DIR/../../util/crossgcc/xgcc/bin/i386-elf- i386-elf- ""; do
+ TMP=`mktemp /tmp/temp.XXXX`
+ echo "mov %eax, %eax" > ${TMP}.s
+ printf "\x7fELF" > ${TMP}.compare
+ if which ${gccprefixes}as 2>/dev/null >/dev/null; then
+ printf ""
+ else
+ continue
+ fi
+ if ${gccprefixes}as --32 -o ${TMP}.o ${TMP}.s; then
+ dd bs=4 count=1 if=${TMP}.o > ${TMP}.test 2>/dev/null
+ if cmp ${TMP}.test ${TMP}.compare; then
+ GCCPREFIX=$gccprefixes
+ rm -f $TMP ${TMP}.s ${TMP}.o ${TMP}.compare ${TMP}.test
+ break
+ fi
+ fi
+ rm -f $TMP ${TMP}.s ${TMP}.o ${TMP}.compare ${TMP}.test
+done
+
+if [ "$GCCPREFIX" = "invalid" ]; then
+ echo no suitable gcc found
+ exit 1
+fi
+
+#MAKEFLAGS=" \
+# AS=\"${GCCPREFIX}as --32\" \
+# CC=\"${GCCPREFIX}gcc -m32\" \
+# AR=\"${GCCPREFIX}ar\" \
+# LD=\"${GCCPREFIX}ld -b elf32-i386\" \
+# STRIP=\"${GCCPREFIX}strip\" \
+# NM=\"${GCCPREFIX}nm\" \
+# HOSTCC=gcc \
+# -j \
+#"
+
+cat << afteroptions
+export AS:=${GCCPREFIX}as --32
+export CC:=${GCCPREFIX}gcc -m32
+export CPP:=${GCCPREFIX}cpp
+export AR:=${GCCPREFIX}ar
+export LD:=${GCCPREFIX}ld -b elf32-i386
+export STRIP:=${GCCPREFIX}strip
+export NM:=${GCCPREFIX}nm
+export OBJCOPY:=${GCCPREFIX}objcopy
+export OBJDUMP:=${GCCPREFIX}objdump
+export HOSTCC:=gcc
+afteroptions
+
+# Should we let the payload build libpayload or do it for them?
+#test -d ./build || (
+# BUILDDIR=$PWD
+# cd ../libpayload
+# $MAKE distclean
+# cp configs/$CONFIG .config
+# $MAKE oldconfig
+# eval $MAKE $MAKEFLAGS
+# eval $MAKE $MAKEFLAGS DESTDIR=$BUILDDIR/build install
+# cd ..
+#)
+
+# eval $MAKE -C $SCRIPT_DIR $MAKEFLAGS
+