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 +