[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