Patchwork DOS support: Makefile

login
register
about
Submitter Carl-Daniel Hailfinger
Date 2010-03-09 22:23:35
Message ID <4B96CA67.4050203@gmx.net>
Download mbox | patch
Permalink /patch/1030/
State Superseded
Headers show

Comments

Carl-Daniel Hailfinger - 2010-03-09 22:23:35
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.

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@gmx.net>
Carl-Daniel Hailfinger - 2010-03-11 03:14:02
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@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@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

Patch

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@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
+# 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
+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)
 
 $(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>";		   \