| 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 |
| + |