SRCDIRS :=
SRCDIRS += libgcc
SRCDIRS += core
-SRCDIRS += net net/oncrpc net/tcp net/udp net/infiniband net/80211
+SRCDIRS += net net/tcp net/udp net/infiniband
SRCDIRS += image
SRCDIRS += drivers/bus
SRCDIRS += drivers/net
SRCDIRS += drivers/net/igb
SRCDIRS += drivers/net/igbvf
SRCDIRS += drivers/net/phantom
-SRCDIRS += drivers/net/rtl818x
-SRCDIRS += drivers/net/ath
-SRCDIRS += drivers/net/ath/ath5k
-SRCDIRS += drivers/net/ath/ath9k
SRCDIRS += drivers/net/vxge
SRCDIRS += drivers/net/efi
SRCDIRS += drivers/net/tg3
SRCDIRS += usr
SRCDIRS += config
+# These directories contain code that is not eligible for UEFI Secure
+# Boot signing.
+#
+SRCDIRS_INSEC += net/oncrpc
+SRCDIRS_INSEC += net/80211
+SRCDIRS_INSEC += drivers/net/rtl818x
+SRCDIRS_INSEC += drivers/net/ath
+SRCDIRS_INSEC += drivers/net/ath/ath5k
+SRCDIRS_INSEC += drivers/net/ath/ath9k
+
# NON_AUTO_SRCS lists files that are excluded from the normal
# automatic build system.
#
#
# Select build architecture and platform based on $(BIN)
#
-# BIN has the form bin[-[arch-]platform]
+# BIN has the form bin[-[<arch>-]<platform>[-sb]]
ARCHS := $(patsubst arch/%,%,$(wildcard arch/*))
PLATFORMS := $(patsubst config/defaults/%.h,%,\
ifdef BIN
-# Determine architecture portion of $(BIN), if present
-BIN_ARCH := $(strip $(foreach A,$(ARCHS),\
- $(patsubst bin-$(A)-%,$(A),\
- $(filter bin-$(A)-%,$(BIN)))))
-
-# Determine platform portion of $(BIN), if present
-ifeq ($(BIN_ARCH),)
-BIN_PLATFORM := $(patsubst bin-%,%,$(filter bin-%,$(BIN)))
+# Split $(BIN) into architecture, platform, and security flag (where present)
+BIN_ELEMENTS := $(subst -,$(SPACE),$(BIN))
+BIN_APS := $(wordlist 2,4,$(BIN_ELEMENTS))
+ifeq ($(lastword $(BIN_APS)),sb)
+BIN_AP := $(wordlist 2,$(words $(BIN_APS)),discard $(BIN_APS))
+BIN_SECUREBOOT := 1
else
-BIN_PLATFORM := $(patsubst bin-$(BIN_ARCH)-%,%,$(BIN))
+BIN_AP := $(BIN_APS)
+BIN_SECUREBOOT := 0
endif
+BIN_PLATFORM := $(lastword $(BIN_AP))
+BIN_ARCH := $(wordlist 2,$(words $(BIN_AP)),discard $(BIN_AP))
# Determine build architecture
DEFAULT_ARCH := i386
platform :
@$(ECHO) $(PLATFORM)
+# Determine security flag
+DEFAULT_SECUREBOOT := 0
+SECUREBOOT := $(firstword $(BIN_SECUREBOOT) $(DEFAULT_SECUREBOOT))
+CFLAGS += -DSECUREBOOT=$(SECUREBOOT)
+secureboot :
+ @$(ECHO) $(SECUREBOOT)
+
endif # defined(BIN)
# Include architecture-specific Makefile
#
# Source file handling
+# Exclude known-insecure files from Secure Boot builds
+ifeq ($(SECUREBOOT),0)
+SRCDIRS += $(SRCDIRS_INSEC)
+endif
+
# SRCDIRS lists all directories containing source files.
srcdirs :
@$(ECHO) $(SRCDIRS)