summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2018-12-16 18:55:42 -0500
committermidipix <writeonce@midipix.org>2018-12-18 20:38:41 -0500
commitca0fc2f788d341fbed9056ac4f34ddd09ef61c3d (patch)
treee5973e614a2992d78976a74b45fca461bc5ed177
parentd856581aa9910c0d4162e0f78e175043cf55a2bd (diff)
downloadsbpython3-ca0fc2f788d341fbed9056ac4f34ddd09ef61c3d.tar.bz2
sbpython3-ca0fc2f788d341fbed9056ac4f34ddd09ef61c3d.tar.xz
project: added rules and definitions for building the build-local pycompile.
-rw-r--r--profiles/linkage/pycompile.h24
-rw-r--r--project/extras.mk3
-rw-r--r--project/pycompile.mk152
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