在参考别人的编译记录时,经常会看到如下的修改:
由于我们是32位系统,所以有些文件需要修改一下:
将./build/core/main.mk 中的
ifneq (64,$(findstring64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))
将 android-2.3.7_r1/external/clearsilver/cgi/Android.mk
android-2.3.7_r1/external/clearsilver/java-jni/Android.mk
android-2.3.7_r1/external/clearsilver/util/Android.mk
android-2.3.7_r1/external/clearsilver/cs/Android.mk
四个文件中的:
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif
注释掉,或者将“64”换成“32”
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
endif
而实际上android-2.3.7_r1/build/core/main.mk 中根本就没有第一条的定义!
而关于第二条的修改,我认为是治标不治本,我猜想在build/下的*.mk中肯定有对于HOST_JDK_IS_64BIT_VERSION的定义,用于判断主机PC上的JDK是不是64位的!
果然在android-2.3.7_r1/build/core/config.mk中,我们可以看到HOST_JDK_IS_64BIT_VERSION的定义:
# Is the host JDK 64-bit version?
HOST_JDK_IS_64BIT_VERSION :=
ifneq ($(filter 64-Bit, $(shell java -version 2>&1)),)
HOST_JDK_IS_64BIT_VERSION := true
endif
这个定义很明确,只有在java -version所输出的信息中64-Bit,HOST_JDK_IS_64BIT_VERSION才被定义为true!所以关于-m64修改为-m32是没必要的。
如果要改也是改
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
为
ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
因为我担心HOST_JDK_IS_64BIT_VERSION := true,true前面的空格会导致上述原始的判断不成立!
下面是java -version运行输出的信息:
java -version
//我的PC输出为32位JDK6:
java version "1.6.0_34"
Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
Java HotSpot(TM) Server VM (build 20.9-b04, mixed mode)
//他人的64位JDK6:
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)
关于android-2.3.7_r1的编译,大致同前一篇《尝试编译android-4.0.4_r2.1》没什么区别 http://blog.youkuaiyun.com/niyufeng/article/details/8040028
主要就是andorid-2.3.7_r1的补丁和android-4.0.4_r2.1有所不同:
000-gcc4.6.x.patch
#由于使用gcc 4.6.x,最好换为4.4的gcc
--- android-2.3.7_r1/build/core/combo/HOST_linux-x86.mk.orig 2012-10-03 18:54:52.805379013 +0800
+++ android-2.3.7_r1/build/core/combo/HOST_linux-x86.mk 2012-10-03 18:56:28.773376791 +0800
@@ -58,6 +58,6 @@
-include $(call select-android-config-h,linux-x86)
# Disable new longjmp in glibc 2.11 and later. See bug 2967937.
-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
HOST_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
--- android-2.3.7_r1/frameworks/base/libs/utils/Android.mk.orig 2012-10-03 19:01:32.273369759 +0800
+++ android-2.3.7_r1/frameworks/base/libs/utils/Android.mk 2012-10-03 19:02:27.041368492 +0800
@@ -57,7 +57,7 @@
LOCAL_MODULE:= libutils
-LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
+LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
LOCAL_C_INCLUDES += external/zlib
ifeq ($(HOST_OS),windows)
001-HOST_JDK_IS_64BIT_VERSION.patch
--- android-2.3.7_r1/external/clearsilver/cgi/Android.mk.orig 2012-10-03 18:38:25.705401876 +0800
+++ android-2.3.7_r1/external/clearsilver/cgi/Android.mk 2012-10-03 18:39:17.349400681 +0800
@@ -12,6 +12,6 @@
LOCAL_CFLAGS := -fPIC
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif
--- android-2.3.7_r1/external/clearsilver/java-jni/Android.mk.orig 2012-10-03 18:39:47.649399978 +0800
+++ android-2.3.7_r1/external/clearsilver/java-jni/Android.mk 2012-10-03 18:41:01.369398272 +0800
@@ -33,6 +33,6 @@
LOCAL_CFLAGS := -fPIC
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif
--- android-2.3.7_r1/external/clearsilver/util/Android.mk.orig 2012-10-03 18:42:44.305395886 +0800
+++ android-2.3.7_r1/external/clearsilver/util/Android.mk 2012-10-03 18:43:06.273395377 +0800
@@ -17,6 +17,6 @@
LOCAL_CFLAGS := -fPIC
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif
--- android-2.3.7_r1/external/clearsilver/cs/Android.mk.orig 2012-10-03 18:44:29.141393459 +0800
+++ android-2.3.7_r1/external/clearsilver/cs/Android.mk 2012-10-03 18:44:49.297392991 +0800
@@ -8,6 +8,6 @@
LOCAL_CFLAGS := -fPIC
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif
或者001-HOST_JDK_IS_64BIT_VERSION.patch为:(也可以直接不使用001-HOST_JDK_IS_64BIT_VERSION.patch,android编译时能正确判断)
--- android-2.3.7_r1/external/clearsilver/cgi/Android.mk.orig 2012-10-03 18:38:25.705401876 +0800
+++ android-2.3.7_r1/external/clearsilver/cgi/Android.mk 2012-10-03 18:39:17.349400681 +0800
@@ -13,8 +13,8 @@
LOCAL_CFLAGS := -fPIC
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
endif
# We use the host compilers because the Linux SDK build
# uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/java-jni/Android.mk.orig 2012-10-03 18:39:47.649399978 +0800
+++ android-2.3.7_r1/external/clearsilver/java-jni/Android.mk 2012-10-03 18:41:01.369398272 +0800
@@ -34,8 +34,8 @@
LOCAL_CFLAGS += -fPIC
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
endif
# We use the host compilers because the Linux SDK build
# uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/util/Android.mk.orig 2012-10-03 18:42:44.305395886 +0800
+++ android-2.3.7_r1/external/clearsilver/util/Android.mk 2012-10-03 18:43:06.273395377 +0800
@@ -18,8 +18,8 @@
LOCAL_CFLAGS := -fPIC
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
endif
# We use the host compilers because the Linux SDK build
# uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/cs/Android.mk.orig 2012-10-03 18:44:29.141393459 +0800
+++ android-2.3.7_r1/external/clearsilver/cs/Android.mk 2012-10-03 18:44:49.297392991 +0800
@@ -9,8 +9,8 @@
LOCAL_CFLAGS := -fPIC
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
endif
# We use the host compilers because the Linux SDK build
# uses a 32-bit toolchain that can't handle -m64
这是原始prebuilt/android-arm/kernel/kernel-qemu内核:
这是自己编译的goldfish内核: