Rudolf was so kind and improved my older Makefile patch. I believe the following should work (some additional changes were done by me).
Add DOS cross-compilation support to the Makefile. Some of the changes are pretty hackish, but they shouldn't affect compilation on other systems at all. Add a README with build instructions.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-dos/Makefile =================================================================== --- flashrom-dos/Makefile (Revision 936) +++ flashrom-dos/Makefile (Arbeitskopie) @@ -2,6 +2,7 @@ # This file is part of the flashrom project. # # Copyright (C) 2005 coresystems GmbH stepan@coresystems.de +# Copyright (C) 2009,2010 Carl-Daniel Hailfinger # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,15 +21,22 @@ PROGRAM = flashrom
CC ?= gcc -STRIP = strip +STRIP ?= strip INSTALL = install DIFF = diff PREFIX ?= /usr/local MANDIR ?= $(PREFIX)/share/man -CFLAGS ?= -Os -Wall -Werror -Wshadow +CFLAGS ?= -Os -Wall -Wshadow EXPORTDIR ?= .
-OS_ARCH = $(shell uname) +WARNERROR ?= yes + +ifeq ($(WARNERROR), yes) +CFLAGS += -Werror +endif + +# FIXME We have to differentiate between host and target arch. +OS_ARCH ?= $(shell uname) ifneq ($(OS_ARCH), SunOS) STRIP_ARGS = -s endif @@ -40,6 +48,12 @@ CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif +ifeq ($(OS_ARCH), DOS) +CPPFLAGS += -I../libgetopt -I../libpci/include +# Bus Pirate and Serprog are not supported under DOS. +CONFIG_BUSPIRATESPI = no +CONFIG_SERPROG = no +endif
CHIP_OBJS = jedec.o stm50flw0x0x.o w39v040c.o w39v080fa.o sharplhf00l04.o w29ee011.o \ sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ @@ -188,14 +202,28 @@ endif
ifeq ($(NEED_PCI), yes) -LIBS += -lpci +ifneq ($(OS_ARCH), DOS) +# FIXME This workaround is needed until libpci detection can handle +# cross-compiling for DOS. +CHECK_LIBPCI = yes +endif +endif + +ifeq ($(NEED_PCI), yes) FEATURE_CFLAGS += -D'NEED_PCI=1' PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o ifeq ($(OS_ARCH), NetBSD) LIBS += -lpciutils # The libpci we want. LIBS += -l$(shell uname -p) # For (i386|x86_64)_iopl(2). +else +ifeq ($(OS_ARCH), DOS) +# FIXME There needs to be a better way to do this +LIBS += ../libpci/lib/libpci.a ../libgetopt/libgetopt.a +else +LIBS += -lpci endif endif +endif
ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'PRINT_WIKI_SUPPORT=1' @@ -239,7 +267,7 @@ rm -f .test.c .test; exit 1) @rm -f .test.c .test
-ifeq ($(NEED_PCI), yes) +ifeq ($(CHECK_LIBPCI), yes) pciutils: compiler @printf "Checking for libpci headers... " @$(shell ( echo "#include <pci/pci.h>"; \ Index: flashrom-dos/README =================================================================== --- flashrom-dos/README (Revision 936) +++ flashrom-dos/README (Arbeitskopie) @@ -42,7 +42,7 @@
* pciutils / libpci * pciutils-devel / pciutils-dev / libpci-dev - * zlib-devel / zlib1g-dev (only needed if libpci is static) + * zlib-devel / zlib1g-dev (needed if libpci was compiled with libz support)
On FreeBSD, you need the following ports:
@@ -75,7 +75,24 @@ Install DirectIO from coresystems GmbH. DirectIO is available at http://www.coresystems.de/en/directio.
+To cross-compile on Linux for DOS:
+ Get RPMs of the cross compiler from the DJGPP site and install them: + djcross-binutils-2.19.1-10ap.i386.rpm + djcross-gcc-tools-4.4.1-1ap.i686.rpm + djcross-gcc-4.3.2-8ap.i686.rpm + Download pciutils 3.1.5 and apply http://assembler.cz/flashrom/pciutils.patch + Download and compile http://assembler.cz/flashrom/libgetopt/ + Compile pciutils, see README.DJGPP for instructions. + Enter the flashrom directory. + ../libpci should contain pciutils source and binaries. + ../libgetopt should contain getopt.a from libgetopt. + Run + make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip OS_ARCH=DOS + You might have to add WARNERROR=no to the make command line. + To run flashrom.exe, download http://clio.rice.edu/djgpp/csdpmi7b.zip and + make sure CWSDPMI.EXE is in the current directory. + Installation ------------