Makefile 16 KB
Newer Older
1
#
2 3 4
# This file is part of the flashrom project.
#
# Copyright (C) 2005 coresystems GmbH <stepan@coresystems.de>
5
# Copyright (C) 2009,2010 Carl-Daniel Hailfinger
6 7 8 9 10 11 12 13 14 15 16 17 18
#
# 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
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
19
#
20

21
PROGRAM = flashrom
Ronald G. Minnich's avatar
Ronald G. Minnich committed
22

23
CC      ?= gcc
24
STRIP   ?= strip
25
INSTALL = install
26
DIFF    = diff
27
PREFIX  ?= /usr/local
28
MANDIR  ?= $(PREFIX)/share/man
29
CFLAGS  ?= -Os -Wall -Wshadow
30
EXPORTDIR ?= .
31 32
AR      ?= ar
RANLIB  ?= ranlib
33

34 35 36 37 38 39 40 41
WARNERROR ?= yes

ifeq ($(WARNERROR), yes)
CFLAGS += -Werror
endif

# FIXME We have to differentiate between host and target arch.
OS_ARCH	?= $(shell uname)
Peter Stuge's avatar
Peter Stuge committed
42
ifneq ($(OS_ARCH), SunOS)
43 44
STRIP_ARGS = -s
endif
Stefan Reinauer's avatar
Stefan Reinauer committed
45
ifeq ($(OS_ARCH), Darwin)
46
CPPFLAGS += -I/opt/local/include -I/usr/local/include
47 48
# DirectHW framework can be found in the DirectHW library.
LDFLAGS += -framework IOKit -framework DirectHW -L/opt/local/lib -L/usr/local/lib
Stefan Reinauer's avatar
Stefan Reinauer committed
49
endif
50
ifeq ($(OS_ARCH), FreeBSD)
51
CPPFLAGS += -I/usr/local/include
52 53
LDFLAGS += -L/usr/local/lib
endif
Carl-Daniel Hailfinger's avatar
Carl-Daniel Hailfinger committed
54 55 56 57
ifeq ($(OS_ARCH), OpenBSD)
CPPFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib
endif
58
ifeq ($(OS_ARCH), DOS)
59
EXEC_SUFFIX := .exe
60
CPPFLAGS += -I../libgetopt -I../libpci/include
61 62
# FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt
LIBS += ../libgetopt/libgetopt.a
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
# Bus Pirate and Serprog are not supported under DOS (missing serial support).
ifeq ($(CONFIG_BUSPIRATE_SPI), yes)
UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes
else
override CONFIG_BUSPIRATE_SPI = no
endif
ifeq ($(CONFIG_SERPROG), yes)
UNSUPPORTED_FEATURES += CONFIG_SERPROG=yes
else
override CONFIG_SERPROG = no
endif
# Dediprog and FT2232 are not supported under DOS (missing USB support).
ifeq ($(CONFIG_DEDIPROG), yes)
UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes
else
override CONFIG_DEDIPROG = no
endif
ifeq ($(CONFIG_FT2232_SPI), yes)
UNSUPPORTED_FEATURES += CONFIG_FT2232_SPI=yes
else
override CONFIG_FT2232_SPI = no
endif
85
endif
86

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
ifeq ($(OS_ARCH), libpayload)
CC:=CC=i386-elf-gcc lpgcc
AR:=i386-elf-ar
RANLIB:=i386-elf-ranlib
CPPFLAGS += -DSTANDALONE
ifeq ($(CONFIG_DUMMY), yes)
UNSUPPORTED_FEATURES += CONFIG_DUMMY=yes
else
override CONFIG_DUMMY = no
endif
ifeq ($(CONFIG_BUSPIRATE_SPI), yes)
UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes
else
override CONFIG_BUSPIRATE_SPI = no
endif
ifeq ($(CONFIG_SERPROG), yes)
UNSUPPORTED_FEATURES += CONFIG_SERPROG=yes
else
override CONFIG_SERPROG = no
endif
# Dediprog and FT2232 are not supported with libpayload (missing libusb support)
ifeq ($(CONFIG_DEDIPROG), yes)
UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes
else
override CONFIG_DEDIPROG = no
endif
ifeq ($(CONFIG_FT2232_SPI), yes)
UNSUPPORTED_FEATURES += CONFIG_FT2232_SPI=yes
else
override CONFIG_FT2232_SPI = no
endif
endif

120
CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \
121
	sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \
122 123
	sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o sharplhf00l04.o \
	a25.o at25.o
124 125 126

LIB_OBJS = layout.o

127
CLI_OBJS = flashrom.o cli_classic.o cli_output.o print.o
128

129
PROGRAMMER_OBJS = udelay.o programmer.o
130

131
all: pciutils features $(PROGRAM)$(EXEC_SUFFIX)
132

133 134
# Set the flashrom version string from the highest revision number
# of the checked out flashrom files.
135 136
# Note to packagers: Any tree exported with "make export" or "make tarball"
# will not require subversion. The downloadable snapshots are already exported.
137
SVNVERSION := $(shell LC_ALL=C svnversion -cn . 2>/dev/null | sed -e "s/.*://" -e "s/\([0-9]*\).*/\1/" | grep "[0-9]" || LC_ALL=C svn info . 2>/dev/null | awk '/^Revision:/ {print $$2 }' | grep "[0-9]" || LC_ALL=C git svn info . 2>/dev/null | awk '/^Revision:/ {print $$2 }' | grep "[0-9]" || echo unknown)
138

139
RELEASE := 0.9.3
140 141
VERSION := $(RELEASE)-r$(SVNVERSION)
RELEASENAME ?= $(VERSION)
142 143

SVNDEF := -D'FLASHROM_VERSION="$(VERSION)"'
144

145 146 147
# Always enable internal/onboard support for now.
CONFIG_INTERNAL ?= yes

148
# Always enable serprog for now. Needs to be disabled on Windows.
149 150
CONFIG_SERPROG ?= yes

151 152 153
# RayeR SPIPGM hardware support
CONFIG_RAYER_SPI ?= yes

154 155 156
# Always enable 3Com NICs for now.
CONFIG_NIC3COM ?= yes

157 158
# Enable NVIDIA graphics cards. Note: write and erase do not work properly.
CONFIG_GFXNVIDIA ?= yes
159

160 161 162
# Always enable SiI SATA controllers for now.
CONFIG_SATASII ?= yes

163 164 165 166
# Highpoint (HPT) ATA/RAID controller support.
# IMPORTANT: This code is not yet working!
CONFIG_ATAHPT ?= no

167
# Always enable FT2232 SPI dongles for now.
168
CONFIG_FT2232_SPI ?= yes
169 170 171 172 173 174

# Always enable dummy tracing for now.
CONFIG_DUMMY ?= yes

# Always enable Dr. Kaiser for now.
CONFIG_DRKAISER ?= yes
175

176 177 178
# Always enable Realtek NICs for now.
CONFIG_NICREALTEK ?= yes

179 180 181
# Disable National Semiconductor NICs until support is complete and tested.
CONFIG_NICNATSEMI ?= no

182 183 184
# Always enable Intel NICs for now.
CONFIG_NICINTEL ?= yes

185 186 187
# Always enable SPI on Intel NICs for now.
CONFIG_NICINTEL_SPI ?= yes

188 189 190
# Always enable SPI on OGP cards for now.
CONFIG_OGP_SPI ?= yes

191
# Always enable Bus Pirate SPI for now.
192
CONFIG_BUSPIRATE_SPI ?= yes
193

194 195 196
# Disable Dediprog SF100 until support is complete and tested.
CONFIG_DEDIPROG ?= no

197 198 199
# Always enable Marvell SATA controllers for now.
CONFIG_SATAMV ?= yes

200
# Disable wiki printing by default. It is only useful if you have wiki access.
201
CONFIG_PRINT_WIKI ?= no
202

203 204 205 206 207 208 209 210 211 212
# Bitbanging SPI infrastructure, default off unless needed.
ifeq ($(CONFIG_RAYER_SPI), yes)
override CONFIG_BITBANG_SPI = yes
else
ifeq ($(CONFIG_INTERNAL), yes)
override CONFIG_BITBANG_SPI = yes
else
ifeq ($(CONFIG_NICINTEL_SPI), yes)
override CONFIG_BITBANG_SPI = yes
else
213 214 215
ifeq ($(CONFIG_OGP_SPI), yes)
override CONFIG_BITBANG_SPI = yes
else
216 217 218 219
CONFIG_BITBANG_SPI ?= no
endif
endif
endif
220
endif
221

222
ifeq ($(CONFIG_INTERNAL), yes)
223
FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1'
224
PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o dmi.o internal.o
225
# FIXME: The PROGRAMMER_OBJS below should only be included on x86.
226
PROGRAMMER_OBJS += it87spi.o it85spi.o ichspi.o sb600spi.o wbsio_spi.o mcp6x_spi.o
227 228 229
NEED_PCI := yes
endif

230
ifeq ($(CONFIG_SERPROG), yes)
231
FEATURE_CFLAGS += -D'CONFIG_SERPROG=1'
232
PROGRAMMER_OBJS += serprog.o
233 234
NEED_SERIAL := yes
NEED_NET := yes
235
endif
236

237 238 239 240 241 242 243
ifeq ($(CONFIG_RAYER_SPI), yes)
FEATURE_CFLAGS += -D'CONFIG_RAYER_SPI=1'
PROGRAMMER_OBJS += rayer_spi.o
# Actually, NEED_PCI is wrong. NEED_IOPORT_ACCESS would be more correct.
NEED_PCI := yes
endif

244
ifeq ($(CONFIG_BITBANG_SPI), yes)
245
FEATURE_CFLAGS += -D'CONFIG_BITBANG_SPI=1'
246
PROGRAMMER_OBJS += bitbang_spi.o
247 248
endif

249
ifeq ($(CONFIG_NIC3COM), yes)
250
FEATURE_CFLAGS += -D'CONFIG_NIC3COM=1'
251
PROGRAMMER_OBJS += nic3com.o
252
NEED_PCI := yes
253
endif
254

255
ifeq ($(CONFIG_GFXNVIDIA), yes)
256
FEATURE_CFLAGS += -D'CONFIG_GFXNVIDIA=1'
257
PROGRAMMER_OBJS += gfxnvidia.o
258
NEED_PCI := yes
259 260
endif

261
ifeq ($(CONFIG_SATASII), yes)
262
FEATURE_CFLAGS += -D'CONFIG_SATASII=1'
263
PROGRAMMER_OBJS += satasii.o
264
NEED_PCI := yes
265 266
endif

267
ifeq ($(CONFIG_ATAHPT), yes)
268
FEATURE_CFLAGS += -D'CONFIG_ATAHPT=1'
269 270 271 272
PROGRAMMER_OBJS += atahpt.o
NEED_PCI := yes
endif

273
ifeq ($(CONFIG_FT2232_SPI), yes)
274
FTDILIBS := $(shell pkg-config --libs libftdi 2>/dev/null || printf "%s" "-lftdi -lusb")
275
# This is a totally ugly hack.
276
FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'")
277
FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)")
278
PROGRAMMER_OBJS += ft2232_spi.o
279 280 281
endif

ifeq ($(CONFIG_DUMMY), yes)
282
FEATURE_CFLAGS += -D'CONFIG_DUMMY=1'
283
PROGRAMMER_OBJS += dummyflasher.o
284 285 286
endif

ifeq ($(CONFIG_DRKAISER), yes)
287
FEATURE_CFLAGS += -D'CONFIG_DRKAISER=1'
288
PROGRAMMER_OBJS += drkaiser.o
289
NEED_PCI := yes
290
endif
291

292
ifeq ($(CONFIG_NICREALTEK), yes)
293
FEATURE_CFLAGS += -D'CONFIG_NICREALTEK=1'
294 295 296 297
PROGRAMMER_OBJS += nicrealtek.o
NEED_PCI := yes
endif

298 299 300 301 302 303
ifeq ($(CONFIG_NICNATSEMI), yes)
FEATURE_CFLAGS += -D'CONFIG_NICNATSEMI=1'
PROGRAMMER_OBJS += nicnatsemi.o
NEED_PCI := yes
endif

304 305 306 307 308 309
ifeq ($(CONFIG_NICINTEL), yes)
FEATURE_CFLAGS += -D'CONFIG_NICINTEL=1'
PROGRAMMER_OBJS += nicintel.o
NEED_PCI := yes
endif

310 311 312 313 314 315
ifeq ($(CONFIG_NICINTEL_SPI), yes)
FEATURE_CFLAGS += -D'CONFIG_NICINTEL_SPI=1'
PROGRAMMER_OBJS += nicintel_spi.o
NEED_PCI := yes
endif

316 317 318 319 320 321
ifeq ($(CONFIG_OGP_SPI), yes)
FEATURE_CFLAGS += -D'CONFIG_OGP_SPI=1'
PROGRAMMER_OBJS += ogp_spi.o
NEED_PCI := yes
endif

322 323
ifeq ($(CONFIG_BUSPIRATE_SPI), yes)
FEATURE_CFLAGS += -D'CONFIG_BUSPIRATE_SPI=1'
324
PROGRAMMER_OBJS += buspirate_spi.o
325
NEED_SERIAL := yes
326 327
endif

328
ifeq ($(CONFIG_DEDIPROG), yes)
329
FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1'
330 331 332 333
FEATURE_LIBS += -lusb
PROGRAMMER_OBJS += dediprog.o
endif

334 335 336 337 338 339
ifeq ($(CONFIG_SATAMV), yes)
FEATURE_CFLAGS += -D'CONFIG_SATAMV=1'
PROGRAMMER_OBJS += satamv.o
NEED_PCI := yes
endif

340
ifeq ($(NEED_SERIAL), yes)
341
LIB_OBJS += serial.o
342
endif
343

344 345 346 347
ifeq ($(NEED_NET), yes)
ifeq ($(OS_ARCH), SunOS)
LIBS += -lsocket
endif
348 349 350
endif

ifeq ($(NEED_PCI), yes)
351
CHECK_LIBPCI = yes
352
FEATURE_CFLAGS += -D'NEED_PCI=1'
353
PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o
Jonathan A. Kollasch's avatar
Jonathan A. Kollasch committed
354
ifeq ($(OS_ARCH), NetBSD)
355 356 357 358
# The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci.
LIBS += -lpciutils -lpci
# For (i386|x86_64)_iopl(2).
LIBS += -l$(shell uname -p)
359 360 361
else
ifeq ($(OS_ARCH), DOS)
# FIXME There needs to be a better way to do this
362
LIBS += ../libpci/lib/libpci.a
363 364
else
LIBS += -lpci
Carl-Daniel Hailfinger's avatar
Carl-Daniel Hailfinger committed
365 366 367 368
ifeq ($(OS_ARCH), OpenBSD)
# For (i386|amd64)_iopl(2).
LIBS += -l$(shell uname -m)
endif
369
endif
Jonathan A. Kollasch's avatar
Jonathan A. Kollasch committed
370
endif
371 372
endif

373
ifeq ($(CONFIG_PRINT_WIKI), yes)
374
FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1'
375
CLI_OBJS += print_wiki.o
376 377
endif

378 379
FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "UTSNAME := yes" .features && printf "%s" "-D'HAVE_UTSNAME=1'")

380 381 382
# 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")

383 384
LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS) 
385

386 387
$(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
	$(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS)
388

389 390 391 392
libflashrom.a: $(LIBFLASHROM_OBJS)
	$(AR) rcs $@ $^
	$(RANLIB) $@

393 394 395 396
# TAROPTIONS reduces information leakage from the packager's system.
# If other tar programs support command line arguments for setting uid/gid of
# stored files, they can be handled here as well.
TAROPTIONS = $(shell LC_ALL=C tar --version|grep -q GNU && echo "--owner=root --group=root")
397

398
%.o: %.c .features
399
	$(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FEATURE_CFLAGS) $(SVNDEF) -o $@ -c $<
400

401 402
# Make sure to add all names of generated binaries here.
# This includes all frontends and libflashrom.
403
# We don't use EXEC_SUFFIX here because we want to clean everything.
404
clean:
405
	rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d
406 407

distclean: clean
408
	rm -f .features .libdeps
409

410 411
strip: $(PROGRAM)$(EXEC_SUFFIX)
	$(STRIP) $(STRIP_ARGS) $(PROGRAM)$(EXEC_SUFFIX)
412

413
compiler: featuresavailable
414
	@printf "Checking for a C compiler... "
415 416
	@$(shell ( echo "int main(int argc, char **argv)"; \
		   echo "{ return 0; }"; ) > .test.c )
417
	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test.c -o .test$(EXEC_SUFFIX) >/dev/null &&	\
418
		echo "found." || ( echo "not found."; \
419 420
		rm -f .test.c .test$(EXEC_SUFFIX); exit 1)
	@rm -f .test.c .test$(EXEC_SUFFIX)
421

422
ifeq ($(CHECK_LIBPCI), yes)
423
pciutils: compiler
424
	@printf "Checking for libpci headers... "
425 426 427
	@# Avoid a failing test due to libpci header symbol shadowing breakage
	@$(shell ( echo "#define index shadow_workaround_index"; \
		   echo "#include <pci/pci.h>";		   \
428 429 430
		   echo "struct pci_access *pacc;";	   \
		   echo "int main(int argc, char **argv)"; \
		   echo "{ pacc = pci_alloc(); return 0; }"; ) > .test.c )
431
	@$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null 2>&1 &&		\
432 433 434 435
		echo "found." || ( echo "not found."; echo;			\
		echo "Please install libpci headers (package pciutils-devel).";	\
		echo "See README for more information."; echo;			\
		rm -f .test.c .test.o; exit 1)
436
	@printf "Checking if libpci is present and sufficient... "
437
	@printf "" > .libdeps
438
	@$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null 2>&1 &&				\
439
		echo "yes." || ( echo "no.";							\
440
		printf "Checking if libz+libpci are present and sufficient...";	\
441
		$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null 2>&1 &&		\
442
		( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo;	\
443
		echo "Please install libpci (package pciutils) and/or libz.";			\
444
		echo "See README for more information."; echo;				\
445 446
		rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) )
	@rm -f .test.c .test.o .test$(EXEC_SUFFIX)
447 448 449 450
else
pciutils: compiler
	@printf "" > .libdeps
endif
451

452 453
.features: features

454 455 456 457 458 459 460 461 462 463 464
# If a user does not explicitly request a non-working feature, we should
# silently disable it. However, if a non-working (does not compile) feature
# is explicitly requested, we should bail out with a descriptive error message.
ifeq ($(UNSUPPORTED_FEATURES), )
featuresavailable:
else
featuresavailable:
	@echo "The following features are unavailable on your machine: $(UNSUPPORTED_FEATURES)"
	@false
endif

465
ifeq ($(CONFIG_FT2232_SPI), yes)
466 467
features: compiler
	@echo "FEATURES := yes" > .features.tmp
468 469 470 471 472
	@printf "Checking for FTDI support... "
	@$(shell ( echo "#include <ftdi.h>";		   \
		   echo "struct ftdi_context *ftdic = NULL;";	   \
		   echo "int main(int argc, char **argv)"; \
		   echo "{ return ftdi_init(ftdic); }"; ) > .featuretest.c )
473
	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
474 475
		( echo "found."; echo "FTDISUPPORT := yes" >> .features.tmp ) ||	\
		( echo "not found."; echo "FTDISUPPORT := no" >> .features.tmp )
476 477 478 479 480
	@printf "Checking for utsname support... "
	@$(shell ( echo "#include <sys/utsname.h>";		   \
		   echo "struct utsname osinfo;";	   \
		   echo "int main(int argc, char **argv)"; \
		   echo "{ uname (&osinfo); return 0; }"; ) > .featuretest.c )
481
	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) >/dev/null 2>&1 &&	\
482 483
		( echo "found."; echo "UTSNAME := yes" >> .features.tmp ) ||	\
		( echo "not found."; echo "UTSNAME := no" >> .features.tmp )
484
	@$(DIFF) -q .features.tmp .features >/dev/null 2>&1 && rm .features.tmp || mv .features.tmp .features
485
	@rm -f .featuretest.c .featuretest$(EXEC_SUFFIX)
486 487
else
features: compiler
488
	@echo "FEATURES := yes" > .features.tmp
489 490 491 492 493
	@printf "Checking for utsname support... "
	@$(shell ( echo "#include <sys/utsname.h>";		   \
		   echo "struct utsname osinfo;";	   \
		   echo "int main(int argc, char **argv)"; \
		   echo "{ uname (&osinfo); return 0; }"; ) > .featuretest.c )
494
	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) >/dev/null 2>&1 &&	\
495 496
		( echo "found."; echo "UTSNAME := yes" >> .features.tmp ) ||	\
		( echo "not found."; echo "UTSNAME := no" >> .features.tmp )
497
	@$(DIFF) -q .features.tmp .features >/dev/null 2>&1 && rm .features.tmp || mv .features.tmp .features
498
	@rm -f .featuretest.c .featuretest$(EXEC_SUFFIX)
499
endif
500

501
install: $(PROGRAM)$(EXEC_SUFFIX)
502
	mkdir -p $(DESTDIR)$(PREFIX)/sbin
503
	mkdir -p $(DESTDIR)$(MANDIR)/man8
504
	$(INSTALL) -m 0755 $(PROGRAM)$(EXEC_SUFFIX) $(DESTDIR)$(PREFIX)/sbin
505
	$(INSTALL) -m 0644 $(PROGRAM).8 $(DESTDIR)$(MANDIR)/man8
506

507
export:
508 509 510 511 512
	@rm -rf $(EXPORTDIR)/flashrom-$(RELEASENAME)
	@svn export -r BASE . $(EXPORTDIR)/flashrom-$(RELEASENAME)
	@sed "s/^SVNVERSION.*/SVNVERSION := $(SVNVERSION)/" Makefile >$(EXPORTDIR)/flashrom-$(RELEASENAME)/Makefile
	@LC_ALL=C svn log >$(EXPORTDIR)/flashrom-$(RELEASENAME)/ChangeLog
	@echo Exported $(EXPORTDIR)/flashrom-$(RELEASENAME)/
513 514

tarball: export
515 516 517
	@tar cjf $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.bz2 -C $(EXPORTDIR)/ $(TAROPTIONS) flashrom-$(RELEASENAME)/
	@rm -rf $(EXPORTDIR)/flashrom-$(RELEASENAME)
	@echo Created $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.bz2
518

519 520 521
djgpp-dos: clean
	make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip WARNERROR=no OS_ARCH=DOS

522
.PHONY: all clean distclean compiler pciutils features export tarball dos featuresavailable
523

524
-include $(OBJS:.o=.d)