summaryrefslogtreecommitdiff
path: root/project
diff options
context:
space:
mode:
Diffstat (limited to 'project')
-rw-r--r--project/extras.mk4
-rw-r--r--project/pycompile.mk115
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