Patch tint 0.03b to be usable as coreboot payload, linked against
the libpayload library. 

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>


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

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 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <libpayload.h>
+#include <curses.h>
+#define random(x) rand(x)
+#define srandom(x) srand(x)
+#define curs_set(x)
+
+
 /* Score file */
+#if 0
 const char scorefile[] = SCOREFILE;
+#endif
 
 #endif	/* #ifndef CONFIG_H */
diff -rupN tintorig/engine.c tint/engine.c
--- tintorig/engine.c	2005-07-17 05:26:22.000000000 -0600
+++ tint/engine.c	2010-01-27 13:59:18.000000000 -0700
@@ -27,8 +27,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config.h"
+
+#if 0
 #include <stdlib.h>
 #include <string.h>
+#endif
 
 #include "typedefs.h"
 #include "utils.h"
diff -rupN tintorig/io.c tint/io.c
--- tintorig/io.c	2001-12-07 08:48:20.000000000 -0700
+++ tint/io.c	2010-01-27 13:59:18.000000000 -0700
@@ -27,9 +27,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config.h"
+
+#if 0
 #include <stdarg.h>		/* va_list(), va_start(), va_end() */
 #include <sys/time.h>	/* gettimeofday() */
 #include <unistd.h>		/* gettimeofday() */
+#endif
 
 #include <curses.h>
 
@@ -70,7 +74,11 @@ static int in_timeleft;
 /* Initialize screen */
 void io_init ()
 {
+   curses_enable_serial(0);
+   curses_enable_vga(1);
    initscr ();
+   halfdelay(1);
+   timeout(1);
    start_color ();
    curs_set (CURSOR_INVISIBLE);
    out_attr = A_NORMAL;
@@ -176,11 +184,17 @@ void out_beep ()
 /* Read a character. Please note that you MUST call in_timeout() before in_getch() */
 int in_getch ()
 {
+#if 0
    struct timeval starttv,endtv;
+#endif
    int ch;
+#if 0
    timeout (in_timeleft / 1000);
    gettimeofday (&starttv,NULL);
+#endif
    ch = getch ();
+   mdelay(150);
+#if 0
    gettimeofday (&endtv,NULL);
    /* Timeout? */
    if (ch == ERR)
@@ -198,6 +212,7 @@ int in_getch ()
 		in_timeleft -= endtv.tv_usec;
 		if (in_timeleft <= 0) in_timeleft = in_timetotal;
 	 }
+#endif
    return ch;
 }
 
diff -rupN tintorig/tint.c tint/tint.c
--- tintorig/tint.c	2005-07-17 05:26:43.000000000 -0600
+++ tint/tint.c	2010-08-23 18:13:53.281250000 -0600
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (c) Abraham vd Merwe <abz@blio.net>
  * All rights reserved.
@@ -27,6 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#if 0
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -34,6 +34,7 @@
 #include <pwd.h>
 #include <sys/types.h>
 #include <unistd.h>
+#endif
 
 #include "typedefs.h"
 #include "utils.h"
@@ -321,6 +322,7 @@ typedef struct
    time_t timestamp;
 } score_t;
 
+#if 0
 static void getname (char *name)
 {
    struct passwd *pw = getpwuid (geteuid ());
@@ -337,7 +339,9 @@ static void getname (char *name)
 		name[NAMELEN - 1] = '\0';
 	 }
 }
+#endif
 
+#if 0
 static void err1 ()
 {
    fprintf (stderr,"Error creating %s\n",scorefile);
@@ -349,10 +353,11 @@ static void err2 ()
    fprintf (stderr,"Error writing to %s\n",scorefile);
    exit (EXIT_FAILURE);
 }
+#endif
 
 void showplayerstats (engine_t *engine)
 {
-   fprintf (stderr,
+   printf (
 			"\n\t   PLAYER STATISTICS\n\n\t"
 			"Score       %11d\n\t"
 			"Efficiency  %11d\n\t"
@@ -360,6 +365,7 @@ void showplayerstats (engine_t *engine)
 			GETSCORE (engine->score),engine->status.efficiency,GETSCORE (engine->score) / getsum ());
 }
 
+#if 0
 static void createscores (int score)
 {
    FILE *handle;
@@ -394,7 +400,9 @@ static void createscores (int score)
    fprintf (stderr,"%s",scoretitle);
    fprintf (stderr,"\t  1* %7d        %s\n\n",score,scores[0].name);
 }
+#endif
 
+#if 0
 static int cmpscores (const void *a,const void *b)
 {
    int result;
@@ -412,7 +420,9 @@ static int cmpscores (const void *a,cons
    /* timestamps is equal */
    return 0;
 }
+#endif
 
+#if 0
 static void savescores (int score)
 {
    FILE *handle;
@@ -490,11 +500,13 @@ static void savescores (int score)
 	 }
    fprintf (stderr,"\n");
 }
+#endif
 
           /***************************************************************************/
           /***************************************************************************/
           /***************************************************************************/
 
+#if 0
 static void showhelp ()
 {
    fprintf (stderr,"USAGE: tint [-h] [-l level] [-n]\n");
@@ -504,9 +516,11 @@ static void showhelp ()
    fprintf (stderr,"  -d           Draw vertical dotted lines\n");
    exit (EXIT_FAILURE);
 }
+#endif
 
 static void parse_options (int argc,char *argv[])
 {
+#if 0
    int i = 1;
    while (i < argc)
 	 {
@@ -536,10 +550,12 @@ static void parse_options (int argc,char
 		  }
 		i++;
 	 }
+#endif
 }
 
 static void choose_level ()
 {
+#if 0
    char buf[NAMELEN];
 
    do
@@ -549,6 +565,8 @@ static void choose_level ()
 		buf[strlen (buf) - 1] = '\0';
 	 }
    while (!str2int (&level,buf) || level < MINLEVEL || level > MAXLEVEL);
+#endif
+	level = 1;
 }
 
           /***************************************************************************/
@@ -663,8 +681,15 @@ int main (int argc,char *argv[])
    if (ch != 'q')
 	 {
 		showplayerstats (&engine);
+#if 0
 		savescores (GETSCORE (engine.score));
+#endif
 	 }
+   printf("Bye.\n");
+   refresh();
+   for(;;); //halt();
+#if 0
    exit (EXIT_SUCCESS);
+#endif
 }
 
diff -rupN tintorig/utils.c tint/utils.c
--- tintorig/utils.c	2001-12-07 08:49:19.000000000 -0700
+++ tint/utils.c	2010-01-27 13:59:18.000000000 -0700
@@ -27,9 +27,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config.h"
+
+#if 0
 #include <stdlib.h>
 #include <time.h>
 #include <limits.h>
+#endif
 
 #include "typedefs.h"
 
@@ -41,8 +45,11 @@ void rand_init ()
 #ifdef USE_RAND
    srand (time (NULL));
 #else
+#if 0
    srandom (time (NULL));
 #endif
+   srandom (123);
+#endif
 }
 
 /*
@@ -61,6 +68,7 @@ int rand_value (int range)
  * Convert an str to long. Returns TRUE if successful,
  * FALSE otherwise.
  */
+#if 0
 bool str2int (int *i,const char *str)
 {
    char *endptr;
@@ -69,3 +77,4 @@ bool str2int (int *i,const char *str)
    return TRUE;
 }
 
+#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
+
