Skip to content

Commit

Permalink
build directory can now be renamed
Browse files Browse the repository at this point in the history
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
  • Loading branch information
lurch committed Apr 16, 2014
1 parent a1c6720 commit 70a7d7a
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 26 deletions.
6 changes: 5 additions & 1 deletion bare-arm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion py/mkrules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
20 changes: 12 additions & 8 deletions py/py.mk
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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

Expand Down
1 change: 0 additions & 1 deletion py/qstr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
},
Expand Down
1 change: 0 additions & 1 deletion py/qstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
17 changes: 12 additions & 5 deletions stm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)/.),)
Expand Down
11 changes: 6 additions & 5 deletions stmhal/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down
8 changes: 7 additions & 1 deletion teensy/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 5 additions & 1 deletion unix-cpy/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion unix/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 5 additions & 1 deletion windows/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 70a7d7a

Please sign in to comment.