本文来自 我的博客。博客的文章保持更新,此文可能不是最新状态。
下载、解压 python 源代码
从 python.org 下载。
导入交叉编译 patch
Python 虽然使用 autoconf,但是事实上代码中已经包含 configure 文件,因此下文代码给出的是修改 configure.ac 并执行 autoconf 后生成的 configure 文件。
patch 的使用方法,在 python 源代码根目录下执行:
patch -p1 < ../0001-cross-compile.patch
python 2.7.11 交叉编译 patch:
diff --git a/Makefile.pre.in b/Makefile.pre.in
index ee73edd..730db7e 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -237,7 +237,8 @@ LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@
##########################################################################
# Parser
-PGEN= Parser/pgen$(EXE)
+BUILDPGEN= Parser/pgen$(EXE)
+PGEN_FOR_BUILD= @PGEN_FOR_BUILD@
PSRCS= \
Parser/acceler.c \
@@ -635,14 +636,14 @@ Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule
$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS)
@$(MKDIR_P) Include
- $(MAKE) $(PGEN)
- $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+ $(MAKE) $(BUILDPGEN)
+ $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
$(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS)
$(MAKE) $(GRAMMAR_H)
touch $(GRAMMAR_C)
-$(PGEN): $(PGENOBJS)
- $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
+$(BUILDPGEN): $(PGENOBJS)
+ $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(BUILDPGEN)
Parser/grammar.o: $(srcdir)/Parser/grammar.c \
$(srcdir)/Include/token.h \
diff --git a/configure b/configure
index 7dab897..bf16c0e 100755
--- a/configure
+++ b/configure
@@ -734,6 +734,7 @@ UNIVERSALSDK
CONFIG_ARGS
SOVERSION
VERSION
+PGEN_FOR_BUILD
PYTHON_FOR_BUILD
host_os
host_vendor
@@ -2911,6 +2912,13 @@ else
fi
+if test "$cross_compiling" = yes; then
+ PGEN_FOR_BUILD="${PGEN_FOR_BUILD}"
+else
+ PGEN_FOR_BUILD='$(BUILDPGEN)'
+fi
+
+
if test "$prefix" != "/"; then
prefix=`echo "$prefix" | sed -e 's/\/$//g'`
@@ -6334,6 +6342,12 @@ fi
# Enable PGO flags.
+
+
+
+
+
+
# Extract the first word of "llvm-profdata", so it can be a program name with args.
set dummy llvm-profdata; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--
1.9.1
创建 build 目录
在 python 源代码下创建 build-pc 和 build-mips 目录,分别用于编译 PC pgen(交叉编译时用到)与交叉编译 mips python。该目录做 configure、make、make install,编译时用于保存临时生成的文件,保证 python 源代码干净。
编译本地 Python 与 pgen
用于生成 grammar 所需要文件用。
cd build-pc
../configure CC=gcc CXX=g++ AR=ar RANLIB=ranlib LDFLAGS="-L/usr/lib -L/usr/lib64 -L/usr/local/lib -L/usr/local/lib64" CFLAGS="-I/usr/include -I/u