diff options
-rw-r--r-- | project/extras.mk | 4 | ||||
-rw-r--r-- | project/pycompile.mk | 115 |
2 files changed, 119 insertions, 0 deletions
diff --git a/project/extras.mk b/project/extras.mk index 2db9e76..e4f6ad1 100644 --- a/project/extras.mk +++ b/project/extras.mk @@ -94,3 +94,7 @@ include $(PROJECT_DIR)/project/pyexts.mk # shared extension modules: desired subset $(SHARED_APP): $(PYEXT_SHARED) $(STATIC_APP): $(PYEXT_STATIC) + + +# pycompile (core native python executable for .pyc generation) +include $(PROJECT_DIR)/project/pycompile.mk diff --git a/project/pycompile.mk b/project/pycompile.mk new file mode 100644 index 0000000..6bb61dc --- /dev/null +++ b/project/pycompile.mk @@ -0,0 +1,115 @@ +PYCOMPILE_DIR = build.pycompile +PYCOMPILE_PREFIX = $(CURDIR)/$(PYCOMPILE_DIR) +PYCOMPILE_PATH = +PYCOMPILE = $(PYCOMPILE_DIR)/bin/pycompile + +PYCOMPILE_APP_SRCS = $(APP_SRCS) +PYCOMPILE_CONFIG_SRCS = $(CONFIG_DEFAULT_SRCS) + +PYCOMPILE_CFGHOST ?= $(NATIVE_CC_HOST) +PYCOMPILE_CFGSTEP ?= + +PYCOMPILE_TAGS += $(PYCOMPILE_DIR)/tree.tag +PYCOMPILE_TAGS += $(PYCOMPILE_DIR)/config.tag + +PYCOMPILE_CFLAGS += -I$(PYCOMPILE_DIR)/build +PYCOMPILE_CFLAGS += -I$(PROJECT_DIR)/profiles +PYCOMPILE_CFLAGS += -I$(SOURCE_DIR)/Include +PYCOMPILE_CFLAGS += -DVPATH=\"$(SOURCE_DIR)\" +PYCOMPILE_CFLAGS += -DVERSION=\"$(PYTHON_VER)\" +PYCOMPILE_CFLAGS += -DPLATFORM=\"$(NATIVE_OS)\" +PYCOMPILE_CFLAGS += -DPREFIX=\"$(PYCOMPILE_PREFIX)\" +PYCOMPILE_CFLAGS += -DEXEC_PREFIX=\"$(PYCOMPILE_PREFIX)\" +PYCOMPILE_CFLAGS += -DPYTHONPATH=\"$(PYCOMPILE_PATH)\" + +$(PYCOMPILE_DIR)/tree.tag: + mkdir -p $(PYCOMPILE_DIR)/bin + mkdir -p $(PYCOMPILE_DIR)/lib + mkdir -p $(PYCOMPILE_DIR)/build + mkdir -p $(PYCOMPILE_DIR)/Modules + mkdir -p $(PYCOMPILE_DIR)/Objects + mkdir -p $(PYCOMPILE_DIR)/Parser + mkdir -p $(PYCOMPILE_DIR)/Python + touch $(PYCOMPILE_DIR)/tree.tag + +ifeq ($(PYCOMPILE_CFGSTEP),) + +$(PYCOMPILE_DIR)/config.tag: + $(MAKE) PYCOMPILE_CFGSTEP=yes \ + PYCOMPILE_CFGHOST=$(PYCOMPILE_CFGHOST) \ + CFGHOST=$(PYCOMPILE_CFGHOST) \ + $(PYCOMPILE_DIR)/config.tag +else + +$(PYCOMPILE_DIR)/config.tag: + mkdir -p $(PYCOMPILE_DIR)/build + cp -a $(PROJECT_DIR)/config/$(CFGHOST_SYNONYM)/config.c $(PYCOMPILE_DIR)/build/ + cp -a $(PROJECT_DIR)/config/$(CFGHOST_SYNONYM)/pyconfig.h $(PYCOMPILE_DIR)/build/ + touch $(PYCOMPILE_DIR)/config.tag + +endif + +$(PYCOMPILE_DIR)/build/config.c: $(PYCOMPILE_DIR)/config.tag +$(PYCOMPILE_DIR)/build/pyconfig.h: $(PYCOMPILE_DIR)/config.tag + +$(PYCOMPILE_DIR)/Modules/config.o: $(PYCOMPILE_DIR)/build/config.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/Modules/%.o: $(SOURCE_DIR)/Modules/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/Objects/%.o: $(SOURCE_DIR)/Objects/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/Parser/%.o: $(SOURCE_DIR)/Parser/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/Python/%.o: $(SOURCE_DIR)/Python/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + + +PYCOMPILE_APP_OBJS = $(PYCOMPILE_APP_SRCS:Modules/%.c=$(PYCOMPILE_DIR)/Modules/%.o) +PYCOMPILE_CONFIG_OBJS = $(PYCOMPILE_CONFIG_SRCS:Modules/%.c=$(PYCOMPILE_DIR)/Modules/%.o) +PYCOMPILE_MODULE_OBJS = $(MODULE_SRCS:Modules/%.c=$(PYCOMPILE_DIR)/Modules/%.o) +PYCOMPILE_OBJECT_OBJS = $(OBJECT_SRCS:Objects/%.c=$(PYCOMPILE_DIR)/Objects/%.o) +PYCOMPILE_PARSER_OBJS = $(PARSER_SRCS:Parser/%.c=$(PYCOMPILE_DIR)/Parser/%.o) +PYCOMPILE_PYTHON_OBJS = $(PYTHON_SRCS:Python/%.c=$(PYCOMPILE_DIR)/Python/%.o) + +PYCOMPILE_OBJS = \ + $(PYCOMPILE_APP_OBJS) \ + $(PYCOMPILE_CONFIG_OBJS) \ + $(PYCOMPILE_MODULE_OBJS) \ + $(PYCOMPILE_OBJECT_OBJS) \ + $(PYCOMPILE_PARSER_OBJS) \ + $(PYCOMPILE_PYTHON_OBJS) \ + +$(PYCOMPILE): $(PYCOMPILE_OBJS) + $(NATIVE_CC) -o $@ $^ $(PYCOMPILE_LDFLAGS) + +pycompile: $(PYCOMPILE) + +pycompile-objs: $(PYCOMPILE_OBJS) + +pycompile-clean-config: + rm -f $(PYCOMPILE_DIR)/tree.tag + rm -f $(PYCOMPILE_DIR)/config.tag + rm -f $(PYCOMPILE_DIR)/build/config.c + rm -f $(PYCOMPILE_DIR)/build/pyconfig.h + +pycompile-clean-objs: + rm -f $(PYCOMPILE_OBJS) + +pycompile-clean-pycompile: + rm -f $(PYCOMPILE) + +pycompile-clean:pycompile-clean-objs +pycompile-clean:pycompile-clean-config +pycompile-clean:pycompile-clean-pycompile + +clean: pycompile-clean-objs +clean: pycompile-clean-config +clean: pycompile-clean-pycompile + +.PHONY: pycompile pycompile-objs + pycompile-clean pycompile-clean-objs + pycompile-clean-config pycompile-clean-pycompile |