From 70a7d7a94397cbe01fd5457e34f3d3368300f2ac Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Wed, 16 Apr 2014 22:10:33 +0100 Subject: [PATCH] build directory can now be renamed The autogenerated header files have been moved about, and an extra include dir has been added, which means you can give a custom BUILD=newbuilddir option to make, and everything "just works" Also tidied up the way the different Makefiles build their include- directory flags --- bare-arm/Makefile | 6 +++++- py/mkrules.mk | 8 +++++++- py/py.mk | 20 ++++++++++++-------- py/qstr.c | 1 - py/qstr.h | 1 - stm/Makefile | 17 ++++++++++++----- stmhal/Makefile | 11 ++++++----- teensy/Makefile | 8 +++++++- unix-cpy/Makefile | 6 +++++- unix/Makefile | 6 +++++- windows/Makefile | 6 +++++- 11 files changed, 64 insertions(+), 26 deletions(-) diff --git a/bare-arm/Makefile b/bare-arm/Makefile index 0e9f1f7c39..ace508ebd8 100644 --- a/bare-arm/Makefile +++ b/bare-arm/Makefile @@ -8,8 +8,12 @@ include ../py/py.mk CROSS_COMPILE = arm-none-eabi- +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes + CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion -CFLAGS = -I. -I$(PY_SRC) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) $(COPT) +CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) $(COPT) #Debugging/Optimization ifeq ($(DEBUG), 1) diff --git a/py/mkrules.mk b/py/mkrules.mk index 08ba8fc416..63a98a8ec6 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -59,10 +59,16 @@ $(BUILD)/%.pp: %.c # object directories (but only for existance), and the object directories # will be created if they don't exist. OBJ_DIRS = $(sort $(dir $(OBJ))) -$(OBJ): $(PY_BUILD)/qstrdefs.generated.h | $(OBJ_DIRS) +$(OBJ): $(HEADER_PY_BUILD)/qstrdefs.generated.h | $(OBJ_DIRS) $(OBJ_DIRS): $(MKDIR) -p $@ +$(HEADER_BUILD): + $(MKDIR) -p $@ + +$(HEADER_PY_BUILD): + $(MKDIR) -p $@ + ifneq ($(PROG),) # Build a standalone executable (unix and unix-cpy do this) diff --git a/py/py.mk b/py/py.mk index 5d02c95faf..c86f84910d 100644 --- a/py/py.mk +++ b/py/py.mk @@ -1,8 +1,13 @@ # where py object files go (they have a name prefix to prevent filename clashes) PY_BUILD = $(BUILD)/py -# file containing qstr defs for the core Python bit +# where autogenerated header files go +HEADER_BUILD = $(BUILD)/includes/build +# where autogenerated py header files go +HEADER_PY_BUILD = $(HEADER_BUILD)/py + +# file containing qstr defs for the core Python bit PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h # py object files @@ -98,26 +103,25 @@ PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME)) FORCE: .PHONY: FORCE -$(PY_BUILD)/py-version.h: FORCE +$(HEADER_PY_BUILD)/py-version.h: FORCE $(Q)$(PY_SRC)/py-version.sh > $@.tmp $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi # qstr data -# Adding an order only dependency on $(PY_BUILD) causes $(PY_BUILD) to get +# Adding an order only dependency on $(HEADER_PY_BUILD) causes $(HEADER_PY_BUILD) to get # created before we run the script to generate the .h -$(PY_BUILD)/qstrdefs.generated.h: | $(PY_BUILD)/ -$(PY_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h +$(HEADER_PY_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqstrdata.py mpconfigport.h $(PY_SRC)/mpconfig.h | $(HEADER_PY_BUILD) $(ECHO) "makeqstrdata $(PY_QSTR_DEFS) $(QSTR_DEFS)" - $(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(PY_BUILD)/qstrdefs.preprocessed.h - $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(PY_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@ + $(CPP) $(CFLAGS) $(PY_QSTR_DEFS) -o $(HEADER_PY_BUILD)/qstrdefs.preprocessed.h + $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_PY_BUILD)/qstrdefs.preprocessed.h $(QSTR_DEFS) > $@ # We don't know which source files actually need the generated.h (since # it is #included from str.h). The compiler generated dependencies will cause # the right .o's to get recompiled if the generated.h file changes. Adding # an order-only dependendency to all of the .o's will cause the generated .h # to get built before we try to compile any of them. -$(PY_O): | $(PY_BUILD)/qstrdefs.generated.h $(PY_BUILD)/py-version.h +$(PY_O): | $(HEADER_PY_BUILD)/qstrdefs.generated.h $(HEADER_PY_BUILD)/py-version.h # emitters diff --git a/py/qstr.c b/py/qstr.c index 990ff37727..2b14065fa6 100644 --- a/py/qstr.c +++ b/py/qstr.c @@ -60,7 +60,6 @@ const static qstr_pool_t const_pool = { (const byte*) "\0\0\0\0", // invalid/no qstr has empty data (const byte*) "\0\0\0\0", // empty qstr #define Q(id, str) str, -// TODO having 'build/' here is a bit of a hack, should take config variable from Makefile #include "build/py/qstrdefs.generated.h" #undef Q }, diff --git a/py/qstr.h b/py/qstr.h index 994c418088..6bcb1707fb 100644 --- a/py/qstr.h +++ b/py/qstr.h @@ -8,7 +8,6 @@ enum { MP_QSTR_NULL = 0, // indicates invalid/no qstr MP_QSTR_ = 1, // the empty qstr #define Q(id, str) MP_QSTR_##id, -// TODO having 'build/py.' here is a bit of a hack, should take config variable from Makefile #include "build/py/qstrdefs.generated.h" #undef Q MP_QSTR_number_of, diff --git a/stm/Makefile b/stm/Makefile index 25c79a27b2..384ecd6304 100644 --- a/stm/Makefile +++ b/stm/Makefile @@ -17,12 +17,19 @@ DFU=../tools/dfu.py CROSS_COMPILE = arm-none-eabi- +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes +INC += -I$(CMSIS_DIR) +INC += -I$(STMPERIPH_DIR) +INC += -I$(STMUSB_DIR) +INC += -I$(STMUSBD_DIR) +INC += -I$(STMUSBH_DIR) +INC += -I$(FATFS_DIR) +#INC += -I$(CC3K_DIR) + CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion -CFLAGS = -I. -I$(PY_SRC) -I$(CMSIS_DIR) -I$(STMPERIPH_DIR) -I$(STMUSB_DIR) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) $(COPT) -CFLAGS += -I$(STMUSBD_DIR) -CFLAGS += -I$(STMUSBH_DIR) -CFLAGS += -I$(FATFS_DIR) -#CFLAGS += -I$(CC3K_DIR) +CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) $(COPT) BOARD ?= PYBOARD4 ifeq ($(wildcard boards/$(BOARD)/.),) diff --git a/stmhal/Makefile b/stmhal/Makefile index f0d132520d..aa4f4f3e8d 100644 --- a/stmhal/Makefile +++ b/stmhal/Makefile @@ -18,6 +18,7 @@ CROSS_COMPILE = arm-none-eabi- INC = -I. INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes INC += -I$(CMSIS_DIR)/inc INC += -I$(CMSIS_DIR)/devinc INC += -I$(HAL_DIR)/inc @@ -208,28 +209,28 @@ BOARD_PINS = boards/$(BOARD)/pins.csv AF_FILE = boards/stm32f4xx-af.csv PREFIX_FILE = boards/stm32f4xx-prefix.c GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c -GEN_PINS_HDR = $(BUILD)/pins.h +GEN_PINS_HDR = $(HEADER_BUILD)/pins.h INSERT_USB_IDS = ../tools/insert-usb-ids.py FILE2H = ../tools/file2h.py USB_IDS_FILE = usbd_desc_cdc_msc.c CDCINF_TEMPLATE = pybcdc.inf_template -GEN_CDCINF_FILE = $(BUILD)/pybcdc.inf -GEN_CDCINF_HEADER = $(BUILD)/pybcdc_inf.h +GEN_CDCINF_FILE = $(HEADER_BUILD)/pybcdc.inf +GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h # Making OBJ use an order-only depenedency on the generated pins.h file # has the side effect of making the pins.h file before we actually compile # any of the objects. The normal dependency generation will deal with the # case when pins.h is modified. But when it doesn't exist, we don't know # which source files might need it. -$(OBJ): | $(BUILD)/pins.h +$(OBJ): | $(HEADER_BUILD)/pins.h $(BUILD)/main.o: $(GEN_CDCINF_HEADER) # Use a pattern rule here so that make will only call make-pins.py once to make # both pins_$(BOARD).c and pins.h -$(BUILD)/%_$(BOARD).c $(BUILD)/%.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) +$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) $(ECHO) "Create $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) > $(GEN_PINS_SRC) diff --git a/teensy/Makefile b/teensy/Makefile index 5630103e34..bd01f7e2b1 100644 --- a/teensy/Makefile +++ b/teensy/Makefile @@ -17,7 +17,13 @@ CROSS_COMPILE = $(COMPILER_PATH)/arm-none-eabi- CFLAGS_TEENSY = -DF_CPU=96000000 -DUSB_SERIAL -D__MK20DX256__ CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mcpu=cortex-m4 -fsingle-precision-constant -Wdouble-promotion $(CFLAGS_TEENSY) -CFLAGS = -I. -I$(PY_SRC) -I$(CORE_PATH) -Wall -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) + +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes +INC += -I$(CORE_PATH) + +CFLAGS = $(INC) -Wall -ansi -std=gnu99 $(CFLAGS_CORTEX_M4) LDFLAGS = -nostdlib -T mk20dx256.ld LIBS = -L $(COMPILER_PATH)/../lib/gcc/arm-none-eabi/4.7.2/thumb2 -lgcc diff --git a/unix-cpy/Makefile b/unix-cpy/Makefile index 985ef15854..8db8c2069a 100644 --- a/unix-cpy/Makefile +++ b/unix-cpy/Makefile @@ -6,8 +6,12 @@ PROG = cpy # include py core make definitions include ../py/py.mk +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes + # compiler settings -CFLAGS = -I. -I$(PY_SRC) -Wall -Werror -ansi -std=gnu99 -DUNIX +CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 -DUNIX LDFLAGS = -lm # Debugging/Optimization diff --git a/unix/Makefile b/unix/Makefile index 07a75f7adb..64483d90df 100644 --- a/unix/Makefile +++ b/unix/Makefile @@ -10,8 +10,12 @@ QSTR_DEFS = qstrdefsport.h # include py core make definitions include ../py/py.mk +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes + # compiler settings -CFLAGS = -I. -I$(PY_SRC) -Wall -Werror -ansi -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) +CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) diff --git a/windows/Makefile b/windows/Makefile index 9bea574b65..ad4c82c128 100644 --- a/windows/Makefile +++ b/windows/Makefile @@ -9,8 +9,12 @@ QSTR_DEFS = ../unix/qstrdefsport.h # include py core make definitions include ../py/py.mk +INC = -I. +INC += -I$(PY_SRC) +INC += -I$(BUILD)/includes + # compiler settings -CFLAGS = -I. -I$(PY_SRC) -Wall -Werror -ansi -std=gnu99 -DUNIX +CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 -DUNIX LDFLAGS = -lm # Debugging/Optimization