Nico Huber has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/55882 )
Change subject: [DRAFT] Split Makefile ......................................................................
[DRAFT] Split Makefile
Now that the sections of the Makefile are somewhat visible again, it actually looks well structured. How about splitting some of these sections out?
Change-Id: I2fa86f8b686f61f09a8a5c929587ea71f3e59e78 Signed-off-by: Nico Huber nico.h@gmx.de --- M Makefile A Makefile.arch A Makefile.defaults A Makefile.deps A Makefile.libs A Makefile.os A Makefile.programmers 7 files changed, 791 insertions(+), 693 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/82/55882/1
diff --git a/Makefile b/Makefile index 187b1b0..4abed57 100644 --- a/Makefile +++ b/Makefile @@ -87,229 +87,17 @@ ############################################################################### # Dependency handling.
-DEPENDS_ON_SERIAL := \ - CONFIG_BUSPIRATE_SPI \ - CONFIG_PONY_SPI \ - CONFIG_SERPROG \ - -DEPENDS_ON_BITBANG_SPI := \ - CONFIG_INTERNAL \ - CONFIG_NICINTEL_SPI \ - CONFIG_OGP_SPI \ - CONFIG_PONY_SPI \ - CONFIG_RAYER_SPI \ - -DEPENDS_ON_LIBPCI := \ - CONFIG_ATAHPT \ - CONFIG_ATAPROMISE \ - CONFIG_ATAVIA \ - CONFIG_DRKAISER \ - CONFIG_ENE_LPC \ - CONFIG_GFXNVIDIA \ - CONFIG_INTERNAL \ - CONFIG_IT8212 \ - CONFIG_MEC1308 \ - CONFIG_NIC3COM \ - CONFIG_NICINTEL \ - CONFIG_NICINTEL_EEPROM \ - CONFIG_NICINTEL_SPI \ - CONFIG_NICNATSEMI \ - CONFIG_NICREALTEK \ - CONFIG_OGP_SPI \ - CONFIG_SATAMV \ - CONFIG_SATASII \ - -DEPENDS_ON_LIBUSB1 := \ - CONFIG_CH341A_SPI \ - CONFIG_DEDIPROG \ - CONFIG_DEVELOPERBOX_SPI \ - CONFIG_DIGILENT_SPI \ - CONFIG_PICKIT2_SPI \ - CONFIG_RAIDEN_DEBUG_SPI \ - CONFIG_STLINKV3_SPI \ - -DEPENDS_ON_LIBFTDI := \ - CONFIG_FT2232_SPI \ - CONFIG_USBBLASTER_SPI \ - -DEPENDS_ON_LIBJAYLINK := \ - CONFIG_JLINK_SPI \ - -define mark_unsupported -$(foreach p,$1, \ - $(if $(filter $($(p)),yes), \ - $(eval UNSUPPORTED_FEATURES += $(p)=yes), - $(eval override $(p) := no))) -endef - -define filter_deps -$(strip $(foreach p,$1, \ - $(if $(filter $($(p)),yes), \ - $(p)))) -endef - -define disable_all -$(foreach p,$1, \ - $(eval override $(p) := no)) -endef - -ifeq ($(CONFIG_ENABLE_LIBUSB1_PROGRAMMERS), no) -$(call disable_all,$(DEPENDS_ON_LIBUSB1)) -endif - -ifeq ($(CONFIG_ENABLE_LIBPCI_PROGRAMMERS), no) -$(call disable_all,$(DEPENDS_ON_LIBPCI)) -endif +include Makefile.deps
############################################################################### # General OS-specific settings. -# 1. Prepare for later by gathering information about host and target OS -# 2. Set compiler flags and parameters according to OSes -# 3. Likewise verify user-supplied CONFIG_* variables.
-# HOST_OS is only used to work around local toolchain issues. -HOST_OS ?= $(shell uname) -ifeq ($(findstring MINGW, $(HOST_OS)), MINGW) -# Explicitly set CC = gcc on MinGW, otherwise: "cc: command not found". -CC = gcc -endif - -ifneq ($(HOST_OS), SunOS) -STRIP_ARGS = -s -endif - -# Determine the destination OS. -# IMPORTANT: The following line must be placed before TARGET_OS is ever used -# (of course), but should come after any lines setting CC because the line -# below uses CC itself. -override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null \ - | tail -1 | cut -f 2 -d'"')) - -ifeq ($(TARGET_OS), Darwin) -override CPPFLAGS += -I/opt/local/include -I/usr/local/include -override LDFLAGS += -L/opt/local/lib -L/usr/local/lib -endif - -ifeq ($(TARGET_OS), FreeBSD) -override CPPFLAGS += -I/usr/local/include -override LDFLAGS += -L/usr/local/lib -endif - -ifeq ($(TARGET_OS), OpenBSD) -override CPPFLAGS += -I/usr/local/include -override LDFLAGS += -L/usr/local/lib -endif - -ifeq ($(TARGET_OS), NetBSD) -override CPPFLAGS += -I/usr/pkg/include -override LDFLAGS += -L/usr/pkg/lib -endif - -ifeq ($(TARGET_OS), DragonFlyBSD) -override CPPFLAGS += -I/usr/local/include -override LDFLAGS += -L/usr/local/lib -endif - -ifeq ($(TARGET_OS), DOS) -EXEC_SUFFIX := .exe -# DJGPP has odd uint*_t definitions which cause lots of format string warnings. -override CFLAGS += -Wno-format -LIBS += -lgetopt -# Missing serial support. -$(call mark_unsupported,$(DEPENDS_ON_SERIAL)) -# Libraries not available for DOS -$(call mark_unsupported,$(DEPENDS_ON_LIBUSB1) $(DEPENDS_ON_LIBFTDI) $(DEPENDS_ON_LIBJAYLINK)) -# Odd ones (FIXME: why are they unsupported?) -$(call mark_unsupported,CONFIG_ENE_LPC CONFIG_MEC1308) -endif - -# FIXME: Should we check for Cygwin/MSVC as well? -ifeq ($(TARGET_OS), MinGW) -EXEC_SUFFIX := .exe -# MinGW doesn't have the ffs() function, but we can use gcc's __builtin_ffs(). -FLASHROM_CFLAGS += -Dffs=__builtin_ffs -# Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that -# for MinGW. See http://sourceforge.net/p/mingw-w64/wiki2/printf%20and%20scanf%20family/ */ -FLASHROM_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1 - -# For now we disable all PCI-based programmers on Windows/MinGW (no libpci). -$(call mark_unsupported,$(DEPENDS_ON_LIBPCI)) -# Odd ones (FIXME: why?) -$(call mark_unsupported,CONFIG_RAYER_SPI) - -else # No MinGW - -# NI USB-845x only supported on Windows at the moment -$(call mark_unsupported,CONFIG_NI845X_SPI) - -endif - -ifeq ($(TARGET_OS), libpayload) -ifeq ($(MAKECMDGOALS),) -.DEFAULT_GOAL := libflashrom.a -$(info Setting default goal to libflashrom.a) -endif -FLASHROM_CFLAGS += -DSTANDALONE -$(call mark_unsupported,CONFIG_DUMMY) -# libpayload does not provide the romsize field in struct pci_dev that the atapromise code requires. -$(call mark_unsupported,CONFIG_ATAPROMISE) -# Bus Pirate, Serprog and PonyProg are not supported with libpayload (missing serial support). -$(call mark_unsupported,CONFIG_BUSPIRATE_SPI CONFIG_SERPROG CONFIG_PONY_SPI) -# Dediprog, Developerbox, USB-Blaster, PICkit2, CH341A and FT2232 are not supported with libpayload (missing libusb support). -$(call mark_unsupported,$(DEPENDS_ON_LIBUSB1) $(DEPENDS_ON_LIBFTDI) $(DEPENDS_ON_LIBJAYLINK)) -# Odd ones. (FIXME: why?) -$(call mark_unsupported,CONFIG_ENE_LPC CONFIG_MEC1308) -endif - -# Android is handled internally as separate OS, but it supports about the same drivers as Linux. -ifeq ($(filter $(TARGET_OS),Linux Android), ) -$(call mark_unsupported,CONFIG_LINUX_MTD CONFIG_LINUX_SPI) -$(call mark_unsupported,CONFIG_MSTARDDC_SPI CONFIG_LSPCON_I2C_SPI CONFIG_REALTEK_MST_I2C_SPI) -endif - -ifeq ($(TARGET_OS), Android) -# Android on x86 (currently) does not provide raw PCI port I/O operations. -$(call mark_unsupported,CONFIG_RAYER_SPI) -endif - -ifeq ($(TARGET_OS), Linux) -CONFIG_LINUX_I2C_HELPER = yes -endif +include Makefile.os
############################################################################### # General architecture-specific settings. -# Like above for the OS, below we verify user-supplied options depending on the target architecture.
-# Determine the destination processor architecture. -# IMPORTANT: The following line must be placed before ARCH is ever used -# (of course), but should come after any lines setting CC because the line -# below uses CC itself. -override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null \ - | tail -1 | cut -f 2 -d'"')) -override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null \ - | tail -1)) - -# Disable the internal programmer on unsupported architectures (everything but x86 and mipsel) -ifneq ($(ARCH)-little, $(filter $(ARCH),x86 mips)-$(ENDIAN)) -$(call mark_unsupported,CONFIG_INTERNAL) -endif - -# PCI port I/O support is unimplemented on PPC/MIPS/SPARC and unavailable on ARM. -# Right now this means the drivers below only work on x86. -ifneq ($(ARCH), x86) -$(call mark_unsupported,CONFIG_NIC3COM CONFIG_NICREALTEK CONFIG_NICNATSEMI) -$(call mark_unsupported,CONFIG_RAYER_SPI CONFIG_ATAHPT CONFIG_ATAPROMISE) -$(call mark_unsupported,CONFIG_SATAMV CONFIG_ENE_LPC CONFIG_MEC1308) -endif - -# Additionally disable all drivers needing raw access (memory, PCI, port I/O) -# on architectures with unknown raw access properties. -# Right now those architectures are alpha hppa m68k sh s390 -ifneq ($(ARCH),$(filter $(ARCH),x86 mips ppc arm sparc arc)) -$(call mark_unsupported,CONFIG_GFXNVIDIA CONFIG_SATASII CONFIG_ATAVIA) -$(call mark_unsupported,CONFIG_DRKAISER CONFIG_NICINTEL CONFIG_NICINTEL_SPI) -$(call mark_unsupported,CONFIG_NICINTEL_EEPROM CONFIG_OGP_SPI CONFIG_IT8212) -endif +include Makefile.arch
############################################################################### # Flash chip drivers and bus support infrastructure. @@ -350,149 +138,7 @@ ############################################################################### # Default settings of CONFIG_* variables.
-# Always enable internal/onboard support for now. -CONFIG_INTERNAL ?= yes - -# Always enable serprog for now. -CONFIG_SERPROG ?= yes - -# RayeR SPIPGM hardware support -CONFIG_RAYER_SPI ?= yes - -# ChromiumOS servo DUT debug board hardware support -CONFIG_RAIDEN_DEBUG_SPI ?= yes - -# PonyProg2000 SPI hardware support -CONFIG_PONY_SPI ?= yes - -# Always enable 3Com NICs for now. -CONFIG_NIC3COM ?= yes - -# Enable NVIDIA graphics cards. Note: write and erase do not work properly. -CONFIG_GFXNVIDIA ?= yes - -# Always enable SiI SATA controllers for now. -CONFIG_SATASII ?= yes - -# Highpoint (HPT) ATA/RAID controller support. -# IMPORTANT: This code is not yet working! -CONFIG_ATAHPT ?= no - -# VIA VT6421A LPC memory support -CONFIG_ATAVIA ?= yes - -# Promise ATA controller support. -CONFIG_ATAPROMISE ?= no - -# ENE LPC interface keyboard controller -CONFIG_ENE_LPC ?= yes - -# Always enable FT2232 SPI dongles for now. -CONFIG_FT2232_SPI ?= yes - -# Microchip MEC1308 Embedded Controller -CONFIG_MEC1308 ?= yes - -# Always enable Altera USB-Blaster dongles for now. -CONFIG_USBBLASTER_SPI ?= yes - -# MSTAR DDC support needs more tests/reviews/cleanups. -CONFIG_MSTARDDC_SPI ?= no - -# Always enable PICkit2 SPI dongles for now. -CONFIG_PICKIT2_SPI ?= yes - -# Always enable STLink V3 -CONFIG_STLINKV3_SPI ?= yes - -# Disables LSPCON support until the i2c helper supports multiple systems. -CONFIG_LSPCON_I2C_SPI ?= no - -# Disables REALTEK_MST support until the i2c helper supports multiple systems. -CONFIG_REALTEK_MST_I2C_SPI ?= no - -# Always enable dummy tracing for now. -CONFIG_DUMMY ?= yes - -# Always enable Dr. Kaiser for now. -CONFIG_DRKAISER ?= yes - -# Always enable Realtek NICs for now. -CONFIG_NICREALTEK ?= yes - -# Disable National Semiconductor NICs until support is complete and tested. -CONFIG_NICNATSEMI ?= no - -# Always enable Intel NICs for now. -CONFIG_NICINTEL ?= yes - -# Always enable SPI on Intel NICs for now. -CONFIG_NICINTEL_SPI ?= yes - -# Always enable EEPROM on Intel NICs for now. -CONFIG_NICINTEL_EEPROM ?= yes - -# Always enable SPI on OGP cards for now. -CONFIG_OGP_SPI ?= yes - -# Always enable Bus Pirate SPI for now. -CONFIG_BUSPIRATE_SPI ?= yes - -# Always enable Dediprog SF100 for now. -CONFIG_DEDIPROG ?= yes - -# Always enable Developerbox emergency recovery for now. -CONFIG_DEVELOPERBOX_SPI ?= yes - -# Always enable Marvell SATA controllers for now. -CONFIG_SATAMV ?= yes - -# Enable Linux spidev and MTD interfaces by default. We disable them on non-Linux targets. -CONFIG_LINUX_MTD ?= yes -CONFIG_LINUX_SPI ?= yes - -# Always enable ITE IT8212F PATA controllers for now. -CONFIG_IT8212 ?= yes - -# Winchiphead CH341A -CONFIG_CH341A_SPI ?= yes - -# Digilent Development board JTAG -CONFIG_DIGILENT_SPI ?= yes - -# Disable J-Link for now. -CONFIG_JLINK_SPI ?= no - -# National Instruments USB-845x is Windows only and needs a proprietary library. -CONFIG_NI845X_SPI ?= no - -# Disable wiki printing by default. It is only useful if you have wiki access. -CONFIG_PRINT_WIKI ?= no - -# Disable all features if CONFIG_NOTHING=yes is given unless CONFIG_EVERYTHING was also set -ifeq ($(CONFIG_NOTHING), yes) - ifeq ($(CONFIG_EVERYTHING), yes) - $(error Setting CONFIG_NOTHING=yes and CONFIG_EVERYTHING=yes does not make sense) - endif - $(foreach var, $(filter CONFIG_%, $(.VARIABLES)),\ - $(if $(filter yes, $($(var))),\ - $(eval $(var)=no))) -endif - -# Enable all features if CONFIG_EVERYTHING=yes is given -ifeq ($(CONFIG_EVERYTHING), yes) -$(foreach var, $(filter CONFIG_%, $(.VARIABLES)),\ - $(if $(filter no, $($(var))),\ - $(eval $(var)=yes))) -endif - -# Bitbanging SPI infrastructure, default off unless needed. - -ifneq ($(call filter_deps,$(DEPENDS_ON_BITBANG_SPI)), ) -override CONFIG_BITBANG_SPI = yes -else -CONFIG_BITBANG_SPI ?= no -endif +include Makefile.defaults
############################################################################### # Handle CONFIG_* variables that depend on others set (and verified) above. @@ -512,345 +158,17 @@ CONFIG_INTERNAL_DMI ?= yes
############################################################################### -# Programmer drivers and programmer support infrastructure. -# Depending on the CONFIG_* variables set and verified above we set compiler flags and parameters below. +# Configuration for programmer drivers and programmer support infrastructure.
-ifdef CONFIG_DEFAULT_PROGRAMMER_NAME -FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_NAME=&programmer_$(CONFIG_DEFAULT_PROGRAMMER_NAME)' -else -FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_NAME=NULL' -endif +include Makefile.programmers
-FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_ARGS="$(CONFIG_DEFAULT_PROGRAMMER_ARGS)"' +############################################################################### +# Configuration for libraries.
-ifeq ($(CONFIG_INTERNAL), yes) -FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1' -PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o internal.o -ifeq ($(ARCH), x86) -PROGRAMMER_OBJS += it87spi.o it85spi.o sb600spi.o amd_imc.o wbsio_spi.o mcp6x_spi.o -PROGRAMMER_OBJS += ichspi.o dmi.o -ifeq ($(CONFIG_INTERNAL_DMI), yes) -FEATURE_CFLAGS += -D'CONFIG_INTERNAL_DMI=1' -endif -else -endif -endif +include Makefile.libs
-ifeq ($(CONFIG_ENE_LPC), yes) -FEATURE_CFLAGS += -D'CONFIG_ENE_LPC=1' -PROGRAMMER_OBJS += ene_lpc.o -NEED_RAW_ACCESS += CONFIG_ENE_LPC -endif - -ifeq ($(CONFIG_MEC1308), yes) -FEATURE_CFLAGS += -D'CONFIG_MEC1308=1' -PROGRAMMER_OBJS += mec1308.o -NEED_RAW_ACCESS += CONFIG_MEC1308 -endif - -ifeq ($(CONFIG_SERPROG), yes) -FEATURE_CFLAGS += -D'CONFIG_SERPROG=1' -PROGRAMMER_OBJS += serprog.o -NEED_SERIAL += CONFIG_SERPROG -NEED_POSIX_SOCKETS += CONFIG_SERPROG -endif - -ifeq ($(CONFIG_RAYER_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_RAYER_SPI=1' -PROGRAMMER_OBJS += rayer_spi.o -NEED_RAW_ACCESS += CONFIG_RAYER_SPI -endif - -ifeq ($(CONFIG_RAIDEN_DEBUG_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_RAIDEN_DEBUG_SPI=1' -PROGRAMMER_OBJS += raiden_debug_spi.o -endif - -ifeq ($(CONFIG_PONY_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_PONY_SPI=1' -PROGRAMMER_OBJS += pony_spi.o -NEED_SERIAL += CONFIG_PONY_SPI -endif - -ifeq ($(CONFIG_BITBANG_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_BITBANG_SPI=1' -PROGRAMMER_OBJS += bitbang_spi.o -endif - -ifeq ($(CONFIG_NIC3COM), yes) -FEATURE_CFLAGS += -D'CONFIG_NIC3COM=1' -PROGRAMMER_OBJS += nic3com.o -endif - -ifeq ($(CONFIG_GFXNVIDIA), yes) -FEATURE_CFLAGS += -D'CONFIG_GFXNVIDIA=1' -PROGRAMMER_OBJS += gfxnvidia.o -endif - -ifeq ($(CONFIG_SATASII), yes) -FEATURE_CFLAGS += -D'CONFIG_SATASII=1' -PROGRAMMER_OBJS += satasii.o -endif - -ifeq ($(CONFIG_ATAHPT), yes) -FEATURE_CFLAGS += -D'CONFIG_ATAHPT=1' -PROGRAMMER_OBJS += atahpt.o -endif - -ifeq ($(CONFIG_ATAVIA), yes) -FEATURE_CFLAGS += -D'CONFIG_ATAVIA=1' -PROGRAMMER_OBJS += atavia.o -endif - -ifeq ($(CONFIG_ATAPROMISE), yes) -FEATURE_CFLAGS += -D'CONFIG_ATAPROMISE=1' -PROGRAMMER_OBJS += atapromise.o -endif - -ifeq ($(CONFIG_IT8212), yes) -FEATURE_CFLAGS += -D'CONFIG_IT8212=1' -PROGRAMMER_OBJS += it8212.o -endif - -ifeq ($(CONFIG_FT2232_SPI), yes) -# This is a totally ugly hack. -FEATURE_CFLAGS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'") -PROGRAMMER_OBJS += ft2232_spi.o -endif - -ifeq ($(CONFIG_USBBLASTER_SPI), yes) -# This is a totally ugly hack. -FEATURE_CFLAGS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_USBBLASTER_SPI=1'") -PROGRAMMER_OBJS += usbblaster_spi.o -endif - -ifeq ($(CONFIG_PICKIT2_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_PICKIT2_SPI=1' -PROGRAMMER_OBJS += pickit2_spi.o -endif - -ifeq ($(CONFIG_STLINKV3_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_STLINKV3_SPI=1' -PROGRAMMER_OBJS += stlinkv3_spi.o -endif - -ifeq ($(CONFIG_LSPCON_I2C_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_LSPCON_I2C_SPI=1' -PROGRAMMER_OBJS += lspcon_i2c_spi.o -endif - -ifeq ($(CONFIG_REALTEK_MST_I2C_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_REALTEK_MST_I2C_SPI=1' -PROGRAMMER_OBJS += realtek_mst_i2c_spi.o -endif - -ifeq ($(CONFIG_DUMMY), yes) -FEATURE_CFLAGS += -D'CONFIG_DUMMY=1' -PROGRAMMER_OBJS += dummyflasher.o -endif - -ifeq ($(CONFIG_DRKAISER), yes) -FEATURE_CFLAGS += -D'CONFIG_DRKAISER=1' -PROGRAMMER_OBJS += drkaiser.o -endif - -ifeq ($(CONFIG_NICREALTEK), yes) -FEATURE_CFLAGS += -D'CONFIG_NICREALTEK=1' -PROGRAMMER_OBJS += nicrealtek.o -endif - -ifeq ($(CONFIG_NICNATSEMI), yes) -FEATURE_CFLAGS += -D'CONFIG_NICNATSEMI=1' -PROGRAMMER_OBJS += nicnatsemi.o -endif - -ifeq ($(CONFIG_NICINTEL), yes) -FEATURE_CFLAGS += -D'CONFIG_NICINTEL=1' -PROGRAMMER_OBJS += nicintel.o -endif - -ifeq ($(CONFIG_NICINTEL_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_NICINTEL_SPI=1' -PROGRAMMER_OBJS += nicintel_spi.o -endif - -ifeq ($(CONFIG_NICINTEL_EEPROM), yes) -FEATURE_CFLAGS += -D'CONFIG_NICINTEL_EEPROM=1' -PROGRAMMER_OBJS += nicintel_eeprom.o -endif - -ifeq ($(CONFIG_OGP_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_OGP_SPI=1' -PROGRAMMER_OBJS += ogp_spi.o -endif - -ifeq ($(CONFIG_BUSPIRATE_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_BUSPIRATE_SPI=1' -PROGRAMMER_OBJS += buspirate_spi.o -NEED_SERIAL += CONFIG_BUSPIRATE_SPI -endif - -ifeq ($(CONFIG_DEDIPROG), yes) -FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1' -PROGRAMMER_OBJS += dediprog.o -endif - -ifeq ($(CONFIG_DEVELOPERBOX_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_DEVELOPERBOX_SPI=1' -PROGRAMMER_OBJS += developerbox_spi.o -endif - -ifeq ($(CONFIG_SATAMV), yes) -FEATURE_CFLAGS += -D'CONFIG_SATAMV=1' -PROGRAMMER_OBJS += satamv.o -endif - -ifeq ($(CONFIG_LINUX_MTD), yes) -# This is a totally ugly hack. -FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_MTD_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_LINUX_MTD=1'") -PROGRAMMER_OBJS += linux_mtd.o -endif - -ifeq ($(CONFIG_LINUX_SPI), yes) -# This is a totally ugly hack. -FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_SPI_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_LINUX_SPI=1'") -PROGRAMMER_OBJS += linux_spi.o -endif - -ifeq ($(CONFIG_MSTARDDC_SPI), yes) -# This is a totally ugly hack. -FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_I2C_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_MSTARDDC_SPI=1'") -NEED_LINUX_I2C += CONFIG_MSTARDDC_SPI -PROGRAMMER_OBJS += mstarddc_spi.o -endif - -ifeq ($(CONFIG_CH341A_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_CH341A_SPI=1' -PROGRAMMER_OBJS += ch341a_spi.o -endif - -ifeq ($(CONFIG_DIGILENT_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_DIGILENT_SPI=1' -PROGRAMMER_OBJS += digilent_spi.o -endif - -ifeq ($(CONFIG_JLINK_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_JLINK_SPI=1' -PROGRAMMER_OBJS += jlink_spi.o -endif - -ifeq ($(CONFIG_NI845X_SPI), yes) -FEATURE_CFLAGS += -D'CONFIG_NI845X_SPI=1' - -ifeq ($(CONFIG_NI845X_LIBRARY_PATH),) -# if the user did not specified the NI-845x headers/lib path -# do a guess for both 32 and 64 bit Windows versions -NI845X_LIBS += -L'${PROGRAMFILES}\National Instruments\NI-845x\MS Visual C' -NI845X_LIBS += -L'${PROGRAMFILES(x86)}\National Instruments\NI-845x\MS Visual C' -NI845X_INCLUDES += -I'${PROGRAMFILES}\National Instruments\NI-845x\MS Visual C' -NI845X_INCLUDES += -I'${PROGRAMFILES(x86)}\National Instruments\NI-845x\MS Visual C' -else -NI845X_LIBS += -L'$(CONFIG_NI845X_LIBRARY_PATH)' -NI845X_INCLUDES += -I'$(CONFIG_NI845X_LIBRARY_PATH)' -endif - -FEATURE_CFLAGS += $(NI845X_INCLUDES) -LIBS += -lni845x -PROGRAMMER_OBJS += ni845x_spi.o -endif - -ifeq ($(CONFIG_LINUX_I2C_HELPER), yes) -LIB_OBJS += i2c_helper_linux.o -FEATURE_CFLAGS += -D'CONFIG_I2C_SUPPORT=1' -endif - -ifneq ($(NEED_SERIAL), ) -LIB_OBJS += serial.o custom_baud.o -endif - -ifneq ($(NEED_POSIX_SOCKETS), ) -ifeq ($(TARGET_OS), SunOS) -LIBS += -lsocket -lnsl -endif -endif - -NEED_LIBPCI := $(call filter_deps,$(DEPENDS_ON_LIBPCI)) -ifneq ($(NEED_LIBPCI), ) -CHECK_LIBPCI = yes -# This is a dirty hack, but it saves us from checking all PCI drivers and all platforms manually. -# libpci may need raw memory, MSR or PCI port I/O on some platforms. -# Individual drivers might have the same needs as well. -NEED_RAW_ACCESS += $(NEED_LIBPCI) -FEATURE_CFLAGS += -D'NEED_PCI=1' -FEATURE_CFLAGS += $(call debug_shell,grep -q "OLD_PCI_GET_DEV := yes" .libdeps && printf "%s" "-D'OLD_PCI_GET_DEV=1'") - -PROGRAMMER_OBJS += pcidev.o -ifeq ($(TARGET_OS), NetBSD) -# The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci. -PCILIBS += -lpciutils -lpci -else -PCILIBS += -lpci -endif -endif - -ifneq ($(NEED_RAW_ACCESS), ) -# Raw memory, MSR or PCI port I/O access. -FEATURE_CFLAGS += -D'NEED_RAW_ACCESS=1' -PROGRAMMER_OBJS += physmap.o hwaccess.o - -ifeq ($(TARGET_OS), NetBSD) -# For (i386|x86_64)_iopl(2). -PCILIBS += -l$(shell uname -p) -else -ifeq ($(TARGET_OS), OpenBSD) -# For (i386|amd64)_iopl(2). -PCILIBS += -l$(shell uname -m) -else -ifeq ($(TARGET_OS), Darwin) -# DirectHW framework can be found in the DirectHW library. -PCILIBS += -framework IOKit -framework DirectHW -endif -endif -endif - -endif - -NEED_LIBUSB1 := $(call filter_deps,$(DEPENDS_ON_LIBUSB1)) -ifneq ($(NEED_LIBUSB1), ) -CHECK_LIBUSB1 = yes -FEATURE_CFLAGS += -D'NEED_LIBUSB1=1' -PROGRAMMER_OBJS += usbdev.o usb_device.o -# FreeBSD and DragonflyBSD use a reimplementation of libusb-1.0 that is simply called libusb -ifeq ($(TARGET_OS),$(filter $(TARGET_OS),FreeBSD DragonFlyBSD)) -USB1LIBS += -lusb -else -ifeq ($(TARGET_OS),NetBSD) -override CPPFLAGS += -I/usr/pkg/include/libusb-1.0 -USB1LIBS += -lusb-1.0 -else -USB1LIBS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --libs libusb-1.0 || printf "%s" "-lusb-1.0") -override CPPFLAGS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --cflags-only-I libusb-1.0 || printf "%s" "-I/usr/include/libusb-1.0") -endif -endif -endif - -NEED_LIBFTDI := $(call filter_deps,$(DEPENDS_ON_LIBFTDI)) -ifneq ($(NEED_LIBFTDI), ) -FTDILIBS := $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)" ; $(PKG_CONFIG) --libs libftdi1 || $(PKG_CONFIG) --libs libftdi || printf "%s" "-lftdi -lusb") -FEATURE_CFLAGS += $(call debug_shell,grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'") -FTDI_INCLUDES := $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)" ; $(PKG_CONFIG) --cflags-only-I libftdi1) -FEATURE_CFLAGS += $(FTDI_INCLUDES) -FEATURE_LIBS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)") -# We can't set NEED_LIBUSB1 here because that would transform libftdi auto-enabling -# into a hard requirement for libusb, defeating the purpose of auto-enabling. -endif - -NEED_LIBJAYLINK := $(call filter_deps,$(DEPENDS_ON_LIBJAYLINK)) -ifneq ($(NEED_LIBJAYLINK), ) -CHECK_LIBJAYLINK = yes -JAYLINKLIBS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --libs libjaylink) -override CPPFLAGS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --cflags-only-I libjaylink) -endif +############################################################################### +# Some more infrastructure and actual make rules below.
ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' diff --git a/Makefile.arch b/Makefile.arch new file mode 100644 index 0000000..555ce9e --- /dev/null +++ b/Makefile.arch @@ -0,0 +1,46 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +# Like `Makefile.os`, below we verify user-supplied options +# depending on the target architecture. + +# Determine the destination processor architecture. +# IMPORTANT: The following line must be placed before ARCH is ever used +# (of course), but should come after any lines setting CC because the line +# below uses CC itself. +override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null \ + | tail -1 | cut -f 2 -d'"')) +override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null \ + | tail -1)) + +# Disable the internal programmer on unsupported architectures (everything but x86 and mipsel) +ifneq ($(ARCH)-little, $(filter $(ARCH),x86 mips)-$(ENDIAN)) +$(call mark_unsupported,CONFIG_INTERNAL) +endif + +# PCI port I/O support is unimplemented on PPC/MIPS/SPARC and unavailable on ARM. +# Right now this means the drivers below only work on x86. +ifneq ($(ARCH), x86) +$(call mark_unsupported,CONFIG_NIC3COM CONFIG_NICREALTEK CONFIG_NICNATSEMI) +$(call mark_unsupported,CONFIG_RAYER_SPI CONFIG_ATAHPT CONFIG_ATAPROMISE) +$(call mark_unsupported,CONFIG_SATAMV CONFIG_ENE_LPC CONFIG_MEC1308) +endif + +# Additionally disable all drivers needing raw access (memory, PCI, port I/O) +# on architectures with unknown raw access properties. +# Right now those architectures are alpha hppa m68k sh s390 +ifneq ($(ARCH),$(filter $(ARCH),x86 mips ppc arm sparc arc)) +$(call mark_unsupported,CONFIG_GFXNVIDIA CONFIG_SATASII CONFIG_ATAVIA) +$(call mark_unsupported,CONFIG_DRKAISER CONFIG_NICINTEL CONFIG_NICINTEL_SPI) +$(call mark_unsupported,CONFIG_NICINTEL_EEPROM CONFIG_OGP_SPI CONFIG_IT8212) +endif diff --git a/Makefile.defaults b/Makefile.defaults new file mode 100644 index 0000000..9cf4c3a --- /dev/null +++ b/Makefile.defaults @@ -0,0 +1,160 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +# The defaults for all programmers unless already overridden +# by OS or architecture rules. Doing it in this order allows +# us to detect if the user explicitly requested a programmer +# during evaluation of the OS and architecture rules. + +# Always enable internal/onboard support for now. +CONFIG_INTERNAL ?= yes + +# Always enable serprog for now. +CONFIG_SERPROG ?= yes + +# RayeR SPIPGM hardware support +CONFIG_RAYER_SPI ?= yes + +# ChromiumOS servo DUT debug board hardware support +CONFIG_RAIDEN_DEBUG_SPI ?= yes + +# PonyProg2000 SPI hardware support +CONFIG_PONY_SPI ?= yes + +# Always enable 3Com NICs for now. +CONFIG_NIC3COM ?= yes + +# Enable NVIDIA graphics cards. Note: write and erase do not work properly. +CONFIG_GFXNVIDIA ?= yes + +# Always enable SiI SATA controllers for now. +CONFIG_SATASII ?= yes + +# Highpoint (HPT) ATA/RAID controller support. +# IMPORTANT: This code is not yet working! +CONFIG_ATAHPT ?= no + +# VIA VT6421A LPC memory support +CONFIG_ATAVIA ?= yes + +# Promise ATA controller support. +CONFIG_ATAPROMISE ?= no + +# ENE LPC interface keyboard controller +CONFIG_ENE_LPC ?= yes + +# Always enable FT2232 SPI dongles for now. +CONFIG_FT2232_SPI ?= yes + +# Microchip MEC1308 Embedded Controller +CONFIG_MEC1308 ?= yes + +# Always enable Altera USB-Blaster dongles for now. +CONFIG_USBBLASTER_SPI ?= yes + +# MSTAR DDC support needs more tests/reviews/cleanups. +CONFIG_MSTARDDC_SPI ?= no + +# Always enable PICkit2 SPI dongles for now. +CONFIG_PICKIT2_SPI ?= yes + +# Always enable STLink V3 +CONFIG_STLINKV3_SPI ?= yes + +# Disables LSPCON support until the i2c helper supports multiple systems. +CONFIG_LSPCON_I2C_SPI ?= no + +# Disables REALTEK_MST support until the i2c helper supports multiple systems. +CONFIG_REALTEK_MST_I2C_SPI ?= no + +# Always enable dummy tracing for now. +CONFIG_DUMMY ?= yes + +# Always enable Dr. Kaiser for now. +CONFIG_DRKAISER ?= yes + +# Always enable Realtek NICs for now. +CONFIG_NICREALTEK ?= yes + +# Disable National Semiconductor NICs until support is complete and tested. +CONFIG_NICNATSEMI ?= no + +# Always enable Intel NICs for now. +CONFIG_NICINTEL ?= yes + +# Always enable SPI on Intel NICs for now. +CONFIG_NICINTEL_SPI ?= yes + +# Always enable EEPROM on Intel NICs for now. +CONFIG_NICINTEL_EEPROM ?= yes + +# Always enable SPI on OGP cards for now. +CONFIG_OGP_SPI ?= yes + +# Always enable Bus Pirate SPI for now. +CONFIG_BUSPIRATE_SPI ?= yes + +# Always enable Dediprog SF100 for now. +CONFIG_DEDIPROG ?= yes + +# Always enable Developerbox emergency recovery for now. +CONFIG_DEVELOPERBOX_SPI ?= yes + +# Always enable Marvell SATA controllers for now. +CONFIG_SATAMV ?= yes + +# Enable Linux spidev and MTD interfaces by default. We disable them on non-Linux targets. +CONFIG_LINUX_MTD ?= yes +CONFIG_LINUX_SPI ?= yes + +# Always enable ITE IT8212F PATA controllers for now. +CONFIG_IT8212 ?= yes + +# Winchiphead CH341A +CONFIG_CH341A_SPI ?= yes + +# Digilent Development board JTAG +CONFIG_DIGILENT_SPI ?= yes + +# Disable J-Link for now. +CONFIG_JLINK_SPI ?= no + +# National Instruments USB-845x is Windows only and needs a proprietary library. +CONFIG_NI845X_SPI ?= no + +# Disable wiki printing by default. It is only useful if you have wiki access. +CONFIG_PRINT_WIKI ?= no + +# Disable all features if CONFIG_NOTHING=yes is given unless CONFIG_EVERYTHING was also set +ifeq ($(CONFIG_NOTHING), yes) + ifeq ($(CONFIG_EVERYTHING), yes) + $(error Setting CONFIG_NOTHING=yes and CONFIG_EVERYTHING=yes does not make sense) + endif + $(foreach var, $(filter CONFIG_%, $(.VARIABLES)),\ + $(if $(filter yes, $($(var))),\ + $(eval $(var)=no))) +endif + +# Enable all features if CONFIG_EVERYTHING=yes is given +ifeq ($(CONFIG_EVERYTHING), yes) +$(foreach var, $(filter CONFIG_%, $(.VARIABLES)),\ + $(if $(filter no, $($(var))),\ + $(eval $(var)=yes))) +endif + +# Bitbanging SPI infrastructure, default off unless needed. +ifneq ($(call filter_deps,$(DEPENDS_ON_BITBANG_SPI)), ) +override CONFIG_BITBANG_SPI = yes +else +CONFIG_BITBANG_SPI ?= no +endif diff --git a/Makefile.deps b/Makefile.deps new file mode 100644 index 0000000..e0d53c8 --- /dev/null +++ b/Makefile.deps @@ -0,0 +1,86 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +DEPENDS_ON_SERIAL := \ + CONFIG_BUSPIRATE_SPI \ + CONFIG_PONY_SPI \ + CONFIG_SERPROG \ + +DEPENDS_ON_BITBANG_SPI := \ + CONFIG_INTERNAL \ + CONFIG_NICINTEL_SPI \ + CONFIG_OGP_SPI \ + CONFIG_PONY_SPI \ + CONFIG_RAYER_SPI \ + +DEPENDS_ON_LIBPCI := \ + CONFIG_ATAHPT \ + CONFIG_ATAPROMISE \ + CONFIG_ATAVIA \ + CONFIG_DRKAISER \ + CONFIG_ENE_LPC \ + CONFIG_GFXNVIDIA \ + CONFIG_INTERNAL \ + CONFIG_IT8212 \ + CONFIG_MEC1308 \ + CONFIG_NIC3COM \ + CONFIG_NICINTEL \ + CONFIG_NICINTEL_EEPROM \ + CONFIG_NICINTEL_SPI \ + CONFIG_NICNATSEMI \ + CONFIG_NICREALTEK \ + CONFIG_OGP_SPI \ + CONFIG_SATAMV \ + CONFIG_SATASII \ + +DEPENDS_ON_LIBUSB1 := \ + CONFIG_CH341A_SPI \ + CONFIG_DEDIPROG \ + CONFIG_DEVELOPERBOX_SPI \ + CONFIG_DIGILENT_SPI \ + CONFIG_PICKIT2_SPI \ + CONFIG_RAIDEN_DEBUG_SPI \ + CONFIG_STLINKV3_SPI \ + +DEPENDS_ON_LIBFTDI := \ + CONFIG_FT2232_SPI \ + CONFIG_USBBLASTER_SPI \ + +DEPENDS_ON_LIBJAYLINK := \ + CONFIG_JLINK_SPI \ + +define mark_unsupported +$(foreach p,$1, \ + $(if $(filter $($(p)),yes), \ + $(eval UNSUPPORTED_FEATURES += $(p)=yes), + $(eval override $(p) := no))) +endef + +define filter_deps +$(strip $(foreach p,$1, \ + $(if $(filter $($(p)),yes), \ + $(p)))) +endef + +define disable_all +$(foreach p,$1, \ + $(eval override $(p) := no)) +endef + +ifeq ($(CONFIG_ENABLE_LIBUSB1_PROGRAMMERS), no) +$(call disable_all,$(DEPENDS_ON_LIBUSB1)) +endif + +ifeq ($(CONFIG_ENABLE_LIBPCI_PROGRAMMERS), no) +$(call disable_all,$(DEPENDS_ON_LIBPCI)) +endif diff --git a/Makefile.libs b/Makefile.libs new file mode 100644 index 0000000..e6ddd79 --- /dev/null +++ b/Makefile.libs @@ -0,0 +1,96 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +ifneq ($(NEED_POSIX_SOCKETS), ) +ifeq ($(TARGET_OS), SunOS) +LIBS += -lsocket -lnsl +endif +endif + +NEED_LIBPCI := $(call filter_deps,$(DEPENDS_ON_LIBPCI)) +ifneq ($(NEED_LIBPCI), ) +CHECK_LIBPCI = yes +# This is a dirty hack, but it saves us from checking all PCI drivers and all platforms manually. +# libpci may need raw memory, MSR or PCI port I/O on some platforms. +# Individual drivers might have the same needs as well. +NEED_RAW_ACCESS += $(NEED_LIBPCI) +FEATURE_CFLAGS += -D'NEED_PCI=1' +FEATURE_CFLAGS += $(call debug_shell,grep -q "OLD_PCI_GET_DEV := yes" .libdeps && printf "%s" "-D'OLD_PCI_GET_DEV=1'") + +PROGRAMMER_OBJS += pcidev.o +ifeq ($(TARGET_OS), NetBSD) +# The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci. +PCILIBS += -lpciutils -lpci +else +PCILIBS += -lpci +endif +endif + +ifneq ($(NEED_RAW_ACCESS), ) +# Raw memory, MSR or PCI port I/O access. +FEATURE_CFLAGS += -D'NEED_RAW_ACCESS=1' +PROGRAMMER_OBJS += physmap.o hwaccess.o + +ifeq ($(TARGET_OS), NetBSD) +# For (i386|x86_64)_iopl(2). +PCILIBS += -l$(shell uname -p) +else +ifeq ($(TARGET_OS), OpenBSD) +# For (i386|amd64)_iopl(2). +PCILIBS += -l$(shell uname -m) +else +ifeq ($(TARGET_OS), Darwin) +# DirectHW framework can be found in the DirectHW library. +PCILIBS += -framework IOKit -framework DirectHW +endif +endif +endif + +endif + +NEED_LIBUSB1 := $(call filter_deps,$(DEPENDS_ON_LIBUSB1)) +ifneq ($(NEED_LIBUSB1), ) +CHECK_LIBUSB1 = yes +FEATURE_CFLAGS += -D'NEED_LIBUSB1=1' +PROGRAMMER_OBJS += usbdev.o usb_device.o +# FreeBSD and DragonflyBSD use a reimplementation of libusb-1.0 that is simply called libusb +ifeq ($(TARGET_OS),$(filter $(TARGET_OS),FreeBSD DragonFlyBSD)) +USB1LIBS += -lusb +else +ifeq ($(TARGET_OS),NetBSD) +override CPPFLAGS += -I/usr/pkg/include/libusb-1.0 +USB1LIBS += -lusb-1.0 +else +USB1LIBS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --libs libusb-1.0 || printf "%s" "-lusb-1.0") +override CPPFLAGS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --cflags-only-I libusb-1.0 || printf "%s" "-I/usr/include/libusb-1.0") +endif +endif +endif + +NEED_LIBFTDI := $(call filter_deps,$(DEPENDS_ON_LIBFTDI)) +ifneq ($(NEED_LIBFTDI), ) +FTDILIBS := $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)" ; $(PKG_CONFIG) --libs libftdi1 || $(PKG_CONFIG) --libs libftdi || printf "%s" "-lftdi -lusb") +FEATURE_CFLAGS += $(call debug_shell,grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'") +FTDI_INCLUDES := $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)" ; $(PKG_CONFIG) --cflags-only-I libftdi1) +FEATURE_CFLAGS += $(FTDI_INCLUDES) +FEATURE_LIBS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)") +# We can't set NEED_LIBUSB1 here because that would transform libftdi auto-enabling +# into a hard requirement for libusb, defeating the purpose of auto-enabling. +endif + +NEED_LIBJAYLINK := $(call filter_deps,$(DEPENDS_ON_LIBJAYLINK)) +ifneq ($(NEED_LIBJAYLINK), ) +CHECK_LIBJAYLINK = yes +JAYLINKLIBS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --libs libjaylink) +override CPPFLAGS += $(call debug_shell,[ -n "$(PKG_CONFIG_LIBDIR)" ] && export PKG_CONFIG_LIBDIR="$(PKG_CONFIG_LIBDIR)"; $(PKG_CONFIG) --cflags-only-I libjaylink) +endif diff --git a/Makefile.os b/Makefile.os new file mode 100644 index 0000000..de8c205 --- /dev/null +++ b/Makefile.os @@ -0,0 +1,125 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +# 1. Prepare for later by gathering information about host and target OS +# 2. Set compiler flags and parameters according to OSes +# 3. Likewise verify user-supplied CONFIG_* variables. + +# HOST_OS is only used to work around local toolchain issues. +HOST_OS ?= $(shell uname) +ifeq ($(findstring MINGW, $(HOST_OS)), MINGW) +# Explicitly set CC = gcc on MinGW, otherwise: "cc: command not found". +CC = gcc +endif + +ifneq ($(HOST_OS), SunOS) +STRIP_ARGS = -s +endif + +# Determine the destination OS. +# IMPORTANT: The following line must be placed before TARGET_OS is ever used +# (of course), but should come after any lines setting CC because the line +# below uses CC itself. +override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null \ + | tail -1 | cut -f 2 -d'"')) + +ifeq ($(TARGET_OS), Darwin) +override CPPFLAGS += -I/opt/local/include -I/usr/local/include +override LDFLAGS += -L/opt/local/lib -L/usr/local/lib +endif + +ifeq ($(TARGET_OS), FreeBSD) +override CPPFLAGS += -I/usr/local/include +override LDFLAGS += -L/usr/local/lib +endif + +ifeq ($(TARGET_OS), OpenBSD) +override CPPFLAGS += -I/usr/local/include +override LDFLAGS += -L/usr/local/lib +endif + +ifeq ($(TARGET_OS), NetBSD) +override CPPFLAGS += -I/usr/pkg/include +override LDFLAGS += -L/usr/pkg/lib +endif + +ifeq ($(TARGET_OS), DragonFlyBSD) +override CPPFLAGS += -I/usr/local/include +override LDFLAGS += -L/usr/local/lib +endif + +ifeq ($(TARGET_OS), DOS) +EXEC_SUFFIX := .exe +# DJGPP has odd uint*_t definitions which cause lots of format string warnings. +override CFLAGS += -Wno-format +LIBS += -lgetopt +# Missing serial support. +$(call mark_unsupported,$(DEPENDS_ON_SERIAL)) +# Libraries not available for DOS +$(call mark_unsupported,$(DEPENDS_ON_LIBUSB1) $(DEPENDS_ON_LIBFTDI) $(DEPENDS_ON_LIBJAYLINK)) +# Odd ones (FIXME: why are they unsupported?) +$(call mark_unsupported,CONFIG_ENE_LPC CONFIG_MEC1308) +endif + +# FIXME: Should we check for Cygwin/MSVC as well? +ifeq ($(TARGET_OS), MinGW) +EXEC_SUFFIX := .exe +# MinGW doesn't have the ffs() function, but we can use gcc's __builtin_ffs(). +FLASHROM_CFLAGS += -Dffs=__builtin_ffs +# Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that +# for MinGW. See http://sourceforge.net/p/mingw-w64/wiki2/printf%20and%20scanf%20family/ */ +FLASHROM_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1 + +# For now we disable all PCI-based programmers on Windows/MinGW (no libpci). +$(call mark_unsupported,$(DEPENDS_ON_LIBPCI)) +# Odd ones (FIXME: why?) +$(call mark_unsupported,CONFIG_RAYER_SPI) + +else # No MinGW + +# NI USB-845x only supported on Windows at the moment +$(call mark_unsupported,CONFIG_NI845X_SPI) + +endif + +ifeq ($(TARGET_OS), libpayload) +ifeq ($(MAKECMDGOALS),) +.DEFAULT_GOAL := libflashrom.a +$(info Setting default goal to libflashrom.a) +endif +FLASHROM_CFLAGS += -DSTANDALONE +$(call mark_unsupported,CONFIG_DUMMY) +# libpayload does not provide the romsize field in struct pci_dev that the atapromise code requires. +$(call mark_unsupported,CONFIG_ATAPROMISE) +# Bus Pirate, Serprog and PonyProg are not supported with libpayload (missing serial support). +$(call mark_unsupported,CONFIG_BUSPIRATE_SPI CONFIG_SERPROG CONFIG_PONY_SPI) +# Dediprog, Developerbox, USB-Blaster, PICkit2, CH341A and FT2232 are not supported with libpayload (missing libusb support). +$(call mark_unsupported,$(DEPENDS_ON_LIBUSB1) $(DEPENDS_ON_LIBFTDI) $(DEPENDS_ON_LIBJAYLINK)) +# Odd ones. (FIXME: why?) +$(call mark_unsupported,CONFIG_ENE_LPC CONFIG_MEC1308) +endif + +# Android is handled internally as separate OS, but it supports about the same drivers as Linux. +ifeq ($(filter $(TARGET_OS),Linux Android), ) +$(call mark_unsupported,CONFIG_LINUX_MTD CONFIG_LINUX_SPI) +$(call mark_unsupported,CONFIG_MSTARDDC_SPI CONFIG_LSPCON_I2C_SPI CONFIG_REALTEK_MST_I2C_SPI) +endif + +ifeq ($(TARGET_OS), Android) +# Android on x86 (currently) does not provide raw PCI port I/O operations. +$(call mark_unsupported,CONFIG_RAYER_SPI) +endif + +ifeq ($(TARGET_OS), Linux) +CONFIG_LINUX_I2C_HELPER = yes +endif diff --git a/Makefile.programmers b/Makefile.programmers new file mode 100644 index 0000000..1bb0dc9 --- /dev/null +++ b/Makefile.programmers @@ -0,0 +1,267 @@ +# +# This file is part of the flashrom project. +# +# 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. +# + +# Depending on the CONFIG_* variables set and verified above we set compiler flags and parameters below. + +ifdef CONFIG_DEFAULT_PROGRAMMER_NAME +FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_NAME=&programmer_$(CONFIG_DEFAULT_PROGRAMMER_NAME)' +else +FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_NAME=NULL' +endif + +FEATURE_CFLAGS += -D'CONFIG_DEFAULT_PROGRAMMER_ARGS="$(CONFIG_DEFAULT_PROGRAMMER_ARGS)"' + +ifeq ($(CONFIG_INTERNAL), yes) +FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1' +PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o internal.o +ifeq ($(ARCH), x86) +PROGRAMMER_OBJS += it87spi.o it85spi.o sb600spi.o amd_imc.o wbsio_spi.o mcp6x_spi.o +PROGRAMMER_OBJS += ichspi.o dmi.o +ifeq ($(CONFIG_INTERNAL_DMI), yes) +FEATURE_CFLAGS += -D'CONFIG_INTERNAL_DMI=1' +endif +else +endif +endif + +ifeq ($(CONFIG_ENE_LPC), yes) +FEATURE_CFLAGS += -D'CONFIG_ENE_LPC=1' +PROGRAMMER_OBJS += ene_lpc.o +NEED_RAW_ACCESS += CONFIG_ENE_LPC +endif + +ifeq ($(CONFIG_MEC1308), yes) +FEATURE_CFLAGS += -D'CONFIG_MEC1308=1' +PROGRAMMER_OBJS += mec1308.o +NEED_RAW_ACCESS += CONFIG_MEC1308 +endif + +ifeq ($(CONFIG_SERPROG), yes) +FEATURE_CFLAGS += -D'CONFIG_SERPROG=1' +PROGRAMMER_OBJS += serprog.o +NEED_SERIAL += CONFIG_SERPROG +NEED_POSIX_SOCKETS += CONFIG_SERPROG +endif + +ifeq ($(CONFIG_RAYER_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_RAYER_SPI=1' +PROGRAMMER_OBJS += rayer_spi.o +NEED_RAW_ACCESS += CONFIG_RAYER_SPI +endif + +ifeq ($(CONFIG_RAIDEN_DEBUG_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_RAIDEN_DEBUG_SPI=1' +PROGRAMMER_OBJS += raiden_debug_spi.o +endif + +ifeq ($(CONFIG_PONY_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_PONY_SPI=1' +PROGRAMMER_OBJS += pony_spi.o +NEED_SERIAL += CONFIG_PONY_SPI +endif + +ifeq ($(CONFIG_BITBANG_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_BITBANG_SPI=1' +PROGRAMMER_OBJS += bitbang_spi.o +endif + +ifeq ($(CONFIG_NIC3COM), yes) +FEATURE_CFLAGS += -D'CONFIG_NIC3COM=1' +PROGRAMMER_OBJS += nic3com.o +endif + +ifeq ($(CONFIG_GFXNVIDIA), yes) +FEATURE_CFLAGS += -D'CONFIG_GFXNVIDIA=1' +PROGRAMMER_OBJS += gfxnvidia.o +endif + +ifeq ($(CONFIG_SATASII), yes) +FEATURE_CFLAGS += -D'CONFIG_SATASII=1' +PROGRAMMER_OBJS += satasii.o +endif + +ifeq ($(CONFIG_ATAHPT), yes) +FEATURE_CFLAGS += -D'CONFIG_ATAHPT=1' +PROGRAMMER_OBJS += atahpt.o +endif + +ifeq ($(CONFIG_ATAVIA), yes) +FEATURE_CFLAGS += -D'CONFIG_ATAVIA=1' +PROGRAMMER_OBJS += atavia.o +endif + +ifeq ($(CONFIG_ATAPROMISE), yes) +FEATURE_CFLAGS += -D'CONFIG_ATAPROMISE=1' +PROGRAMMER_OBJS += atapromise.o +endif + +ifeq ($(CONFIG_IT8212), yes) +FEATURE_CFLAGS += -D'CONFIG_IT8212=1' +PROGRAMMER_OBJS += it8212.o +endif + +ifeq ($(CONFIG_FT2232_SPI), yes) +# This is a totally ugly hack. +FEATURE_CFLAGS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'") +PROGRAMMER_OBJS += ft2232_spi.o +endif + +ifeq ($(CONFIG_USBBLASTER_SPI), yes) +# This is a totally ugly hack. +FEATURE_CFLAGS += $(call debug_shell,grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_USBBLASTER_SPI=1'") +PROGRAMMER_OBJS += usbblaster_spi.o +endif + +ifeq ($(CONFIG_PICKIT2_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_PICKIT2_SPI=1' +PROGRAMMER_OBJS += pickit2_spi.o +endif + +ifeq ($(CONFIG_STLINKV3_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_STLINKV3_SPI=1' +PROGRAMMER_OBJS += stlinkv3_spi.o +endif + +ifeq ($(CONFIG_LSPCON_I2C_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_LSPCON_I2C_SPI=1' +PROGRAMMER_OBJS += lspcon_i2c_spi.o +endif + +ifeq ($(CONFIG_REALTEK_MST_I2C_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_REALTEK_MST_I2C_SPI=1' +PROGRAMMER_OBJS += realtek_mst_i2c_spi.o +endif + +ifeq ($(CONFIG_DUMMY), yes) +FEATURE_CFLAGS += -D'CONFIG_DUMMY=1' +PROGRAMMER_OBJS += dummyflasher.o +endif + +ifeq ($(CONFIG_DRKAISER), yes) +FEATURE_CFLAGS += -D'CONFIG_DRKAISER=1' +PROGRAMMER_OBJS += drkaiser.o +endif + +ifeq ($(CONFIG_NICREALTEK), yes) +FEATURE_CFLAGS += -D'CONFIG_NICREALTEK=1' +PROGRAMMER_OBJS += nicrealtek.o +endif + +ifeq ($(CONFIG_NICNATSEMI), yes) +FEATURE_CFLAGS += -D'CONFIG_NICNATSEMI=1' +PROGRAMMER_OBJS += nicnatsemi.o +endif + +ifeq ($(CONFIG_NICINTEL), yes) +FEATURE_CFLAGS += -D'CONFIG_NICINTEL=1' +PROGRAMMER_OBJS += nicintel.o +endif + +ifeq ($(CONFIG_NICINTEL_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_NICINTEL_SPI=1' +PROGRAMMER_OBJS += nicintel_spi.o +endif + +ifeq ($(CONFIG_NICINTEL_EEPROM), yes) +FEATURE_CFLAGS += -D'CONFIG_NICINTEL_EEPROM=1' +PROGRAMMER_OBJS += nicintel_eeprom.o +endif + +ifeq ($(CONFIG_OGP_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_OGP_SPI=1' +PROGRAMMER_OBJS += ogp_spi.o +endif + +ifeq ($(CONFIG_BUSPIRATE_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_BUSPIRATE_SPI=1' +PROGRAMMER_OBJS += buspirate_spi.o +NEED_SERIAL += CONFIG_BUSPIRATE_SPI +endif + +ifeq ($(CONFIG_DEDIPROG), yes) +FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1' +PROGRAMMER_OBJS += dediprog.o +endif + +ifeq ($(CONFIG_DEVELOPERBOX_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_DEVELOPERBOX_SPI=1' +PROGRAMMER_OBJS += developerbox_spi.o +endif + +ifeq ($(CONFIG_SATAMV), yes) +FEATURE_CFLAGS += -D'CONFIG_SATAMV=1' +PROGRAMMER_OBJS += satamv.o +endif + +ifeq ($(CONFIG_LINUX_MTD), yes) +# This is a totally ugly hack. +FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_MTD_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_LINUX_MTD=1'") +PROGRAMMER_OBJS += linux_mtd.o +endif + +ifeq ($(CONFIG_LINUX_SPI), yes) +# This is a totally ugly hack. +FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_SPI_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_LINUX_SPI=1'") +PROGRAMMER_OBJS += linux_spi.o +endif + +ifeq ($(CONFIG_MSTARDDC_SPI), yes) +# This is a totally ugly hack. +FEATURE_CFLAGS += $(call debug_shell,grep -q "LINUX_I2C_SUPPORT := yes" .features && printf "%s" "-D'CONFIG_MSTARDDC_SPI=1'") +NEED_LINUX_I2C += CONFIG_MSTARDDC_SPI +PROGRAMMER_OBJS += mstarddc_spi.o +endif + +ifeq ($(CONFIG_CH341A_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_CH341A_SPI=1' +PROGRAMMER_OBJS += ch341a_spi.o +endif + +ifeq ($(CONFIG_DIGILENT_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_DIGILENT_SPI=1' +PROGRAMMER_OBJS += digilent_spi.o +endif + +ifeq ($(CONFIG_JLINK_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_JLINK_SPI=1' +PROGRAMMER_OBJS += jlink_spi.o +endif + +ifeq ($(CONFIG_NI845X_SPI), yes) +FEATURE_CFLAGS += -D'CONFIG_NI845X_SPI=1' + +ifeq ($(CONFIG_NI845X_LIBRARY_PATH),) +# if the user did not specified the NI-845x headers/lib path +# do a guess for both 32 and 64 bit Windows versions +NI845X_LIBS += -L'${PROGRAMFILES}\National Instruments\NI-845x\MS Visual C' +NI845X_LIBS += -L'${PROGRAMFILES(x86)}\National Instruments\NI-845x\MS Visual C' +NI845X_INCLUDES += -I'${PROGRAMFILES}\National Instruments\NI-845x\MS Visual C' +NI845X_INCLUDES += -I'${PROGRAMFILES(x86)}\National Instruments\NI-845x\MS Visual C' +else +NI845X_LIBS += -L'$(CONFIG_NI845X_LIBRARY_PATH)' +NI845X_INCLUDES += -I'$(CONFIG_NI845X_LIBRARY_PATH)' +endif + +FEATURE_CFLAGS += $(NI845X_INCLUDES) +LIBS += -lni845x +PROGRAMMER_OBJS += ni845x_spi.o +endif + +ifeq ($(CONFIG_LINUX_I2C_HELPER), yes) +LIB_OBJS += i2c_helper_linux.o +FEATURE_CFLAGS += -D'CONFIG_I2C_SUPPORT=1' +endif + +ifneq ($(NEED_SERIAL), ) +LIB_OBJS += serial.o custom_baud.o +endif