2010년 10월 18일 월요일

Android (froyo) full source compile on Snow Leopard (MacOS 10.6)

Conditions

MacOS 10.6 (named "Snow Leopard")

Intel/x86 machine


Create new case-sensitive disk image

how to: http://sites.google.com/a/android.com/opensource/download


Install the XCode version 2.4 or later

how to: http://developer.apple.com


Install MacPorts and modify your .bash_profile file.

how to: http://sites.google.com/a/android.com/opensource/download


Note: Please, check the version of gmake

If the version of installed gmake is 3.82, you should downgrade to 3.81

how to:

>sudo port installed gmake

>sudo port install subversion

>svn co -r 71288 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake

>cd gmake

>sudo port install +gmake

The following ports are currently installed:

gmake @3.81_0 (active)

gmake @3.82_0


Install Java-1.5.0 for Leopard

how-to:

>curl -o java.1.5.0-leopard.tar.gz http://www.cs.washington.edu/homes/isdal/snow_leopard_workaround/java.1.5.0-leopard.tar.gz

>tar -xvzf java.1.5.0-leopard.tar.gz

>sudo mv 1.5.0 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard

>cd /System/Library/Frameworks/JavaVM.framework/Versions/

>sudo rm 1.5.0

>sudo ln -s 1.5.0-leopard 1.5.0

>open /Applications/Utilities/Java\ Preferences.app


Change the preference to as shown in the image below.

You would have to drag and drop different Java version to change the preference.


Install Repo and get Android source files

how to: http://sites.google.com/a/android.com/opensource/download


Build

how to: http://sites.google.com/a/android.com/opensource/download


Solving errors:

case 1:

/Developer/SDKs/MacOSX10.4u.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory

In file included from external/qemu/elff/dwarf_die.h:21,

from external/qemu/elff/elf_file.h:20,

from external/qemu/elff/dwarf_cu.cc:20:

external/qemu/elff/elf_alloc.h: In static member function ‘static void* DwarfAllocBase::operator new(size_t)’:

external/qemu/elff/elf_alloc.h:156: warning: ‘operator new’ must not return NULL unless it is declared ‘throw()’ (or -fcheck-new is in effect)

make: *** [out/host/darwin-x86/obj/STATIC_LIBRARIES/emulator-elff_intermediates/elff/dwarf_cu.o] Error 1


solution

>vi external/qemu/Makefile.android

find

MY_CFLAGS += -mdynamic-no-pic

replace

MY_CFLAGS += -mdynamic-no-pic -I /Developer/usr/lib/gcc/i686-apple-darwin10/4.0.1/include/


case 2:

external/v8/src/arm/assembler-arm-inl.h: In constructor

‘v8::internal::Operand::Operand(const v8::internal::ExternalReference&)’:

external/v8/src/arm/assembler-arm-inl.h:172: error: cast from ‘v8::internal::byte*’ to ‘int32_t’ loses precision

In file included from external/v8/src/macro-assembler.h:87,

from external/v8/src/ic-inl.h:33,

from external/v8/src/assembler.cc:39:

external/v8/src/arm/assembler-arm-inl.h: In constructor

‘v8::internal::Operand::Operand(const char*)’:

external/v8/src/arm/assembler-arm-inl.h:165: error: cast from ‘const char*’ to ‘int32_t’ loses precision

external/v8/src/arm/assembler-arm-inl.h: In constructor

‘v8::internal::Operand::Operand(const v8::internal::ExternalReference&)’:

external/v8/src/arm/assembler-arm-inl.h:172: error: cast from ‘v8::internal::byte*’ to ‘int32_t’ loses precision


Solution

>vi build/core/config.mk

find

PREBUILT_IS_PRESENT := $(if $(wildcard prebuilt/Android.mk),true)

replace

PREBUILT_IS_PRESENT := $(if $(wildcard prebuilt/Android.mk),true)

ifeq ($(HOST_OS),darwin)

HOST_GLOBAL_CFLAGS += -arch i386

HOST_GLOBAL_CPPFLAGS += -arch i386

HOST_GLOBAL_LDFLAGS += -arch i386

endif


case 3:
ld: warning: in out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a, file is not of required architecture
Undefined symbols:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [out/host/darwin-x86/obj/EXECUTABLES/acp_intermediates/acp] Error 1


Solution

>vi build/core/combo/darwin-x86.mk

or

>vi build/core/combo/HOST_darwin-x86.mk

find

$(HOST_CXX) \
-dynamiclib -single_module -read_only_relocs suppress \
$(HOST_GLOBAL_LD_DIRS) \

replace

$(HOST_CXX) \
-dynamiclib -single_module -read_only_relocs suppress \
$(HOST_GLOBAL_LD_DIRS) \

$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(HOST_GLOBAL_LDFLAGS) \
) \


find

$(HOST_CXX) \
-Wl,-dynamic -headerpad_max_install_names \
$(HOST_GLOBAL_LD_DIRS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \

replace

$(HOST_CXX) \
-Wl,-dynamic -headerpad_max_install_names \
$(HOST_GLOBAL_LD_DIRS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \

$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(HOST_GLOBAL_LDFLAGS) \
) \

댓글 없음: