[flashrom] [PATCH] DOS support: Makefile
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Thu Mar 11 04:14:02 CET 2010
On 09.03.2010 23:23, Carl-Daniel Hailfinger wrote:
> Prepare the Makefile for DOS cross-compilation support.
> Some of the changes are pretty hackish, but they shouldn't affect
> compilation on other systems at all. Please note that the makefile now
> references files that don't exist in the tree yet, but since these
> references are only triggered if you're compiling for DOS and DOS
> support is not yet merged, I think this is OK.
>
As I wrote, this is a hack. As such, I do welcome comments including Nacks.
> If you take the DOS support patch from Rudolf and replace his Makefile
> patch with mine, you have to call make like this:
> make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip
> WARNERROR=no OS_ARCH=DOS
>
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>
> Index: flashrom-dos/Makefile
> ===================================================================
> --- flashrom-dos/Makefile (Revision 929)
> +++ flashrom-dos/Makefile (Arbeitskopie)
> @@ -2,6 +2,7 @@
> # This file is part of the flashrom project.
> #
> # Copyright (C) 2005 coresystems GmbH <stepan at 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,13 @@
> CPPFLAGS += -I/usr/local/include
> LDFLAGS += -L/usr/local/lib
> endif
> +ifeq ($(OS_ARCH), DOS)
> +CPPFLAGS += -I.
> +OS_OBJS = getopt.o
>
The CPPFLAGS and OS_OBJS stuff needs to die.
CPPFLAGS should be set by the user calling make.
OS_OBJS is a hack to add getopt.c to the build. It would be a lot better
to get getopt from a static library (if possible). I'm a bit surprised
that the libc provided by DJGPP seems to be missing getopt (or are there
other reasons to have our own getopt)?
> +# 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 +203,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
>
Yes indeed. Can't we tell the linker that it should pick a static libpci?
> +LIBS += libpci.a
> +else
> +LIBS += -lpci
> endif
> endif
> +endif
>
> ifeq ($(CONFIG_PRINT_WIKI), yes)
> FEATURE_CFLAGS += -D'PRINT_WIKI_SUPPORT=1'
> @@ -205,7 +234,7 @@
> # We could use PULLED_IN_LIBS, but that would be ugly.
> FEATURE_LIBS += $(shell LC_ALL=C grep -q "NEEDLIBZ := yes" .libdeps && printf "%s" "-lz")
>
> -OBJS = $(CHIP_OBJS) $(CLI_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
> +OBJS = $(CHIP_OBJS) $(CLI_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) $(OS_OBJS)
>
As stated above, OS_OBJS needs to die.
>
> $(PROGRAM): $(OBJS)
> $(CC) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(FEATURE_LIBS) $(LIBS)
> @@ -239,7 +268,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>"; \
>
Yes, reviewing my own patch looks a bit strange, but I wanted to get a
minimal hack out there which does not break other targets. If other
parts of Rudolf's patch can be killed (getopt and libpci include files),
this Makefile patch will lost a sizable amount of ugliness.
Regards,
Carl-Daniel
--
"I do consider assignment statements and pointer variables to be among
computer science's most valuable treasures."
-- Donald E. Knuth
More information about the flashrom
mailing list