diff --git a/Makefile b/Makefile index 47540c070..930ea5b72 100644 --- a/Makefile +++ b/Makefile @@ -38,13 +38,21 @@ include $(SPDK_ROOT_DIR)/mk/spdk.common.mk DIRS-y += lib test examples app -.PHONY: all clean $(DIRS-y) +.PHONY: all clean $(DIRS-y) config.h all: $(DIRS-y) clean: $(DIRS-y) + $(Q)rm -f config.h app: lib test: lib examples: lib +$(DIRS-y): config.h + +config.h: CONFIG scripts/genconfig.py + $(Q)python scripts/genconfig.py $(MAKEFLAGS) > $@.tmp; \ + cmp -s $@.tmp $@ || mv $@.tmp $@ ; \ + rm -f $@.tmp + include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk index 6502cc68d..6f89b52f4 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk @@ -45,6 +45,8 @@ OS := $(shell uname) COMMON_CFLAGS = -g $(C_OPT) -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wmissing-declarations -fno-strict-aliasing -march=native -m64 -I$(SPDK_ROOT_DIR)/include +COMMON_CFLAGS += -include $(SPDK_ROOT_DIR)/config.h + ifeq ($(CONFIG_WERROR), y) COMMON_CFLAGS += -Werror endif diff --git a/scripts/genconfig.py b/scripts/genconfig.py new file mode 100755 index 000000000..64f1ce52d --- /dev/null +++ b/scripts/genconfig.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +import re +import sys + +comment = re.compile('^\s*#') +assign = re.compile('^\s*([a-zA-Z_]+)\s*(\?)?=\s*([^#]*)') + +with open('CONFIG') as f: + for line in f: + line = line.strip() + if not comment.match(line): + m = assign.match(line) + if m: + var = m.group(1).strip() + default = m.group(3).strip() + val = default + for arg in sys.argv: + m = assign.match(arg) + if m: + argvar = m.group(1).strip() + argval = m.group(3).strip() + if argvar == var: + val = argval + if default.lower() == 'y' or default.lower() == 'n': + if val.lower() == 'y': + boolval = 1 + else: + boolval = 0 + print "#define SPDK_{} {}".format(var, boolval) + else: + strval = val.replace('"', '\"') + print "#define SPDK_{} \"{}\"".format(var, strval)