diff options
-rw-r--r-- | profiles/linkage/pycompile.h | 24 | ||||
-rw-r--r-- | project/extras.mk | 3 | ||||
-rw-r--r-- | project/pycompile.mk | 152 |
3 files changed, 179 insertions, 0 deletions
diff --git a/profiles/linkage/pycompile.h b/profiles/linkage/pycompile.h new file mode 100644 index 0000000..ad74185 --- /dev/null +++ b/profiles/linkage/pycompile.h @@ -0,0 +1,24 @@ +#ifndef PY_LINKAGE_PYCOMPILE_H +#define PY_LINKAGE_PYCOMPILE_H + +PY_INIT_FUNC(_decimal); +PY_INIT_FUNC(_elementtree); +PY_INIT_FUNC(_heapq); +PY_INIT_FUNC(_posixsubprocess); + +PY_INIT_FUNC(math); +PY_INIT_FUNC(readline); +PY_INIT_FUNC(select); +PY_INIT_FUNC(termios); + +#define PY_IMPORT_INITTAB_PYCOMPILE_CORE \ + {"_decimal", PyInit__decimal}, \ + {"_elementtree", PyInit__elementtree}, \ + {"_heapq", PyInit__heapq}, \ + {"_posixsubprocess", PyInit__posixsubprocess}, \ + {"math", PyInit_math}, \ + {"readline", PyInit_readline}, \ + {"select", PyInit_select}, \ + {"termios", PyInit_termios} + +#endif diff --git a/project/extras.mk b/project/extras.mk index b2fe771..5ff9ccb 100644 --- a/project/extras.mk +++ b/project/extras.mk @@ -51,3 +51,6 @@ 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..2055364 --- /dev/null +++ b/project/pycompile.mk @@ -0,0 +1,152 @@ +PYCOMPILE_DIR = build.pycompile +PYCOMPILE_CFGHOST = $(NATIVE_CC_CFGHOST) +PYCOMPILE_PREFIX = $(CURDIR)/$(PYCOMPILE_DIR) +PYCOMPILE_PATH = +PYCOMPILE = $(PYCOMPILE_DIR)/bin/pycompile + +PYCOMPILE_APP_SRCS = $(APP_SRCS) +PYCOMPILE_CONFIG_SRCS = $(CONFIG_DEFAULT_SRCS) + +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 += -I$(SOURCE_DIR)/Modules/_decimal/libmpdec +PYCOMPILE_CFLAGS += -DPY_FOR_PYCOMPILE +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_CFLAGS += -DSOABI=\"$(PYTHON_SOABI)\" +PYCOMPILE_CFLAGS += -DABIFLAGS=\"\" +PYCOMPILE_CFLAGS += $(NATIVE_CC_CFLAGS) + +PYCOMPILE_LDFLAGS += -lreadline -lm -lutil -lpthread +PYCOMPILE_LDFLAGS += $(NATIVE_CC_LDFLAGS) +PYCOMPILE_LDFLAGS += -lreadline -lm -lutil -lpthread + +$(PYCOMPILE_DIR)/tree.tag: + mkdir -p $(PYCOMPILE_DIR)/bin + mkdir -p $(PYCOMPILE_DIR)/lib + mkdir -p $(PYCOMPILE_DIR)/core + mkdir -p $(PYCOMPILE_DIR)/core/Modules + mkdir -p $(PYCOMPILE_DIR)/core/Modules/_io + mkdir -p $(PYCOMPILE_DIR)/core/Objects + mkdir -p $(PYCOMPILE_DIR)/core/Parser + mkdir -p $(PYCOMPILE_DIR)/core/Python + mkdir -p $(PYCOMPILE_DIR)/core/Programs + mkdir -p $(PYCOMPILE_DIR)/pyext + mkdir -p $(PYCOMPILE_DIR)/pyext/obj + mkdir -p $(PYCOMPILE_DIR)/pyext/obj/_decimal + mkdir -p $(PYCOMPILE_DIR)/pyext/obj/_decimal/libmpdec + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME) + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME)/collections + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME)/encodings + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME)/importlib + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME)/urllib + mkdir -p $(PYCOMPILE_DIR)/lib/$(NICKNAME)/lib-dynload + mkdir -p $(PYCOMPILE_DIR)/build + 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 -p $(PROJECT_DIR)/config/$(CFGHOST)/config.c $(PYCOMPILE_DIR)/build/ + cp -p $(PROJECT_DIR)/config/$(CFGHOST)/pyconfig.h $(PYCOMPILE_DIR)/build/ + touch $(PYCOMPILE_DIR)/config.tag + touch $(PYCOMPILE_DIR)/build/config.c + touch $(PYCOMPILE_DIR)/build/pyconfig.h + +endif + +$(PYCOMPILE_DIR)/core/%.o: PYCOMPILE_CFLAGS += -DPy_BUILD_CORE + +$(PYCOMPILE_DIR)/build/config.c: $(PYCOMPILE_DIR)/config.tag +$(PYCOMPILE_DIR)/build/pyconfig.h: $(PYCOMPILE_DIR)/config.tag + +$(PYCOMPILE_DIR)/core/Modules/config.o: $(PYCOMPILE_DIR)/build/config.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/core/%.o: $(SOURCE_DIR)/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + +$(PYCOMPILE_DIR)/pyext/obj/%.o: $(SOURCE_DIR)/Modules/%.c $(ALL_HEADERS) $(PYCOMPILE_TAGS) + $(NATIVE_CC) -c -o $@ $< $(PYCOMPILE_CFLAGS) + + +PYCOMPILE_PYEXT_SRCS = \ + $(PYEXT_DECIMAL_SRCS) \ + $(PYEXT_ELEMENTTREE_SRCS) \ + $(PYEXT_HEAPQ_SRCS) \ + $(PYEXT_POSIXSUBPROCESS_SRCS) \ + $(PYEXT_MATH_SRCS) \ + $(PYEXT_READLINE_SRCS) \ + $(PYEXT_SELECT_SRCS) \ + $(PYEXT_TERMIOS_SRCS) \ + + +PYCOMPILE_SRCS = \ + $(PYCOMPILE_APP_SRCS) \ + $(PYCOMPILE_CONFIG_SRCS) \ + $(PYCOMPILE_PYEXT_SRCS) \ + $(MODULE_SRCS) \ + $(OBJECT_SRCS) \ + $(PARSER_SRCS) \ + $(PYTHON_SRCS) + +PYCOMPILE_OBJS = $(PYCOMPILE_SRCS:%.c=$(PYCOMPILE_DIR)/%.o) + +ifeq ($(PYCOMPILE_CFGSTEP),) + +$(PYCOMPILE): $(PYCOMPILE_OBJS) + $(MAKE) PYCOMPILE_CFGSTEP=yes \ + PYCOMPILE_CFGHOST=$(PYCOMPILE_CFGHOST) \ + CFGHOST=$(PYCOMPILE_CFGHOST) \ + pycompile +else + +$(PYCOMPILE): $(PYCOMPILE_OBJS) + $(NATIVE_CC) -o $@ $^ $(PYCOMPILE_LDFLAGS) + +endif + + +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 |