Created
November 13, 2012 16:36
-
-
Save dinocore1/4066825 to your computer and use it in GitHub Desktop.
Build objc support for Android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary files libobjc2-1.6.1/.Makefile.swp and libobjc2-1.6.1_new/.Makefile.swp differ | |
diff -rupN libobjc2-1.6.1/Makefile libobjc2-1.6.1_new/Makefile | |
--- libobjc2-1.6.1/Makefile 2012-03-24 12:43:01.000000000 -0400 | |
+++ libobjc2-1.6.1_new/Makefile 2012-11-08 12:36:26.000000000 -0500 | |
@@ -73,19 +73,19 @@ all: $(LIBOBJC).a $(LIBOBJCXX).so.$(VERS | |
$(LIBOBJCXX).so.$(VERSION): $(LIBOBJC).so.$(VERSION) $(OBJCXX_OBJECTS) | |
$(SILENT)echo Linking shared Objective-C++ runtime library... | |
- $(SILENT)$(CXX) -shared \ | |
+ $(SILENT)$(CXX) $(CXXFLAGS) -shared \ | |
-Wl,-soname=$(LIBOBJCXX).so.$(MAJOR_VERSION) \ | |
-o $@ $(OBJCXX_OBJECTS) | |
$(LIBOBJC).so.$(VERSION): $(OBJECTS) | |
$(SILENT)echo Linking shared Objective-C runtime library... | |
- $(SILENT)$(CC) -shared -rdynamic \ | |
+ $(SILENT)$(CC) $(CFLAGS) -shared -rdynamic \ | |
-Wl,-soname=$(LIBOBJC).so.$(MAJOR_VERSION) \ | |
-o $@ $(OBJECTS) | |
$(LIBOBJC).a: $(OBJECTS) | |
$(SILENT)echo Linking static Objective-C runtime library... | |
- $(SILENT)ld -r -s -o $@ $(OBJECTS) | |
+ $(SLIENT)$(CC) $(CFLAGS) -Wl,-r,-s -o $@ $(OBJECTS) | |
.cc.o: Makefile | |
$(SILENT)echo Compiling `basename $<`... | |
diff -rupN libobjc2-1.6.1/lock.h libobjc2-1.6.1_new/lock.h | |
--- libobjc2-1.6.1/lock.h 2011-08-09 08:57:20.000000000 -0400 | |
+++ libobjc2-1.6.1_new/lock.h 2012-11-08 00:26:59.000000000 -0500 | |
@@ -24,8 +24,8 @@ typedef pthread_mutex_t mutex_t; | |
// mutexes, use that, otherwise fall back to the portable version | |
# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP | |
# define INIT_LOCK(x) x = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP | |
-# elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER) | |
-# define INIT_LOCK(x) x = PTHREAD_RECURSIVE_MUTEX_INITIALIZER | |
+//# elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER) | |
+//# define INIT_LOCK(x) x = PTHREAD_RECURSIVE_MUTEX_INITIALIZER | |
# else | |
# define INIT_LOCK(x) init_recursive_mutex(&(x)) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# requires android ndkr8b or above | |
.PHONY: check-ndk clean | |
LIBOBJC2_MAKEFILE := libobjc2-1.6.1/Makefile | |
X86SYSROOT := $(shell pwd)/androidtoolchain-x86 | |
ARMSYSROOT := $(shell pwd)/androidtoolchain-arm | |
GCC_X86 := $(X86SYSROOT)/bin/i686-android-linux-gcc | |
GCC_ARM := $(ARMSYSROOT)/bin/arm-linux-androideabi-gcc | |
LLVM_CONFIGURE := llvm/configure | |
CLANG_MAKEFILE := llvm/tools/clang/Makefile | |
CLANG_ARM := $(ARMSYSROOT)/bin/arm-linux-androideabi-clang | |
CLANGPP_ARM := $(ARMSYSROOT)/bin/arm-linux-androideabi-clang++ | |
CLANG_X86 := $(X86SYSROOT)/bin/i686-linux-android-clang | |
CLANGPP_X86 := $(X86SYSROOT)/bin/i686-linux-android-clang++ | |
CPPFLAGS_ARM := \ | |
--sysroot $(ARMSYSROOT)/sysroot \ | |
-I$(ARMSYSROOT)/arm-linux-androideabi/include/c++/4.6 \ | |
-I$(ARMSYSROOT)/arm-linux-androideabi/include/c++/4.6/arm-linux-androideabi | |
CPPFLAGS_X86 := \ | |
--sysroot $(X86SYSROOT)/sysroot \ | |
-I$(X86SYSROOT)/i686-linux-android/include/c++/4.6 \ | |
-I$(X86SYSROOT)/i686-linux-android/include/c++/4.6/i686-linux-android | |
#-nostdlib -lc | |
#-nostdlib -lstdc++ | |
check-ndk: | |
ifndef ANDROID_NDK | |
$(error ANDROID_NDK is undefined) | |
endif | |
clean: | |
-rm -rf $(ARMSYSROOT) | |
-rm -rf $(X86SYSROOT) | |
-rm -rf libobjc2-1.6.1 | |
-rm -rf llvm | |
ANDROID_BUILDTOOLCHAIN := $(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh | |
$(ANDROID_BUILDTOOLCHAIN) : check-ndk | |
$(GCC_X86) : $(ANDROID_BUILDTOOLCHAIN) | |
$(ANDROID_BUILDTOOLCHAIN) --platform=android-9 --install-dir=$(X86SYSROOT) --arch=x86 | |
touch $(GCC_X86) | |
$(GCC_ARM) : $(ANDROID_BUILDTOOLCHAIN) | |
$(ANDROID_BUILDTOOLCHAIN) --platform=android-9 --install-dir=$(ARMSYSROOT) --arch=arm | |
touch $(GCC_ARM) | |
$(LLVM_CONFIGURE): | |
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm | |
$(CLANG_MAKEFILE): $(LLVM_CONFIGURE) | |
cd llvm/tools && \ | |
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang | |
$(CLANG_ARM) $(CLANGPP_ARM): $(LLVM_CONFIGURE) $(CLANG_MAKEFILE) $(GCC_ARM) | |
cd llvm && \ | |
./configure --prefix="$(ARMSYSROOT)" --enable-optimized --enable-targets=arm --target=arm-linux-androideabi && \ | |
make -j4 install | |
$(CLANG_X86) $(CLANGPP_X86): $(LLVM_CONFIGURE) $(CLANG_MAKEFILE) $(GCC_X86) | |
cd llvm && \ | |
./configure --prefix="$(X86SYSROOT)" --enable-optimized --enable-targets=x86 --target=i686-linux-android && \ | |
make -j4 install | |
$(LIBOBJC2_MAKEFILE): | |
wget http://download.gna.org/gnustep/libobjc2-1.6.1.tgz | |
tar -xzvf libobjc2-1.6.1.tgz | |
cd libobjc2-1.6.1 && patch -p1 < ../libobjc2_00001.patch | |
$(ARMSYSROOT)/sysroot/usr/lib/libobjc.a: $(LIBOBJC2_MAKEFILE) $(CLANG_ARM) $(CLANGPP_ARM) $(GCC_ARM) | |
cd libobjc2-1.6.1 && \ | |
CC="$(CLANG_ARM)" \ | |
CXX="$(CLANGPP_ARM)" \ | |
CFLAGS="$(CPPFLAGS_ARM) -Wl,--allow-multiple-definition" \ | |
CXXFLAGS="$(CPPFLAGS_ARM)" \ | |
ASMFLAGS="" \ | |
PREFIX="$(ARMSYSROOT)/sysroot/usr" \ | |
make -f Makefile install | |
$(X86SYSROOT)/sysroot/usr/lib/libobjc.a: $(LIBOBJC2_MAKEFILE) $(CLANG_X86) $(CLANGPP_X86) $(GCC_ARM) | |
cd libobjc2-1.6.1 && \ | |
CC="$(CLANG_X86)" \ | |
CXX="$(CLANGPP_X86)" \ | |
CFLAGS="$(CFLAGS_X86)" \ | |
CXXFLAGS="$(CXXFLAGS_X86)" \ | |
CPPFLAGS="-D__STDC_HOSTED__ \ | |
-D__ANDROID__ -DANDROID -D__linux__ -D__ELF__ \ | |
-U__USER_LABEL_PREFIX__ -D__USER_LABEL_PREFIX__= \ | |
-D__compiler_offsetof=__builtin_offsetof -v" \ | |
ASMFLAGS="" \ | |
PREFIX="$(X86SYSROOT)/sysroot/usr" \ | |
make -f Makefile install | |
teststring: $(CLANG_X86) $(X86SYSROOT)/sysroot/usr/lib/libobjc.a | |
$(CLANG_X86) $(CFLAGS_X86) -lobjc -v -o teststring teststring.m | |
GNUSTEP_MAKE_CONFIGURE := gnustep-make-2.6.2/configure | |
GNUSTEP_CONFIG_ARM := $(ARMSYSROOT)/bin/gnustep-config | |
CONFIG_SUB := tools/config/config.sub | |
CONFIG_GUESS := tools/config/config.guess | |
$(CONFIG_SUB) $(CONFIG_GUESS): | |
git clone http://git.savannah.gnu.org/r/config.git/ tools/config | |
gnustep-make-2.6.2.tar.gz: | |
wget ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-make-2.6.2.tar.gz | |
$(GNUSTEP_MAKE_CONFIGURE): gnustep-make-2.6.2.tar.gz | |
tar -xzvf gnustep-make-2.6.2.tar.gz | |
touch $(GNUSTEP_MAKE_CONFIGURE) | |
$(GNUSTEP_CONFIG_ARM): $(CLANG_ARM) $(CLANGPP_ARM) $(GNUSTEP_MAKE_CONFIGURE) $(CONFIG_SUB) $(CONFIG_GUESS) | |
cp $(CONFIG_SUB) gnustep-make-2.6.2/ | |
cp $(CONFIG_GUESS) gnustep-make-2.6.2/ | |
cd gnustep-make-2.6.2 && \ | |
CC="$(CLANG_ARM)" \ | |
CXX="$(CLANGPP_ARM)" \ | |
CFLAGS="$(CPPFLAGS_ARM)" \ | |
./configure --prefix="$(ARMSYSROOT)" --host="arm-linux-androideabi" && \ | |
make install | |
gnustep-base-1.24.0.tar.gz: | |
wget ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-base-1.24.0.tar.gz | |
GNUSTEP_BASE_CONFIGURE := gnustep-base-1.24.0/configure | |
$(GNUSTEP_BASE_CONFIGURE): gnustep-base-1.24.0.tar.gz | |
tar -zxvf gnustep-base-1.24.0.tar.gz | |
touch $(GNUSTEP_BASE_CONFIGURE) | |
GNUSTEP_BASE_LIB_ARM := $(ARMSYSROOT)/sysroot/usr/lib/libgnustep-base.a | |
$(GNUSTEP_BASE_LIB_ARM): $(GNUSTEP_BASE_CONFIGURE) $(GNUSTEP_CONFIG_ARM) $(CLANG_ARM) $(CLANGPP_ARM) $(CONFIG_SUB) $(CONFIG_GUESS) $(ARMSYSROOT)/sysroot/usr/lib/libobjc.a | |
cp $(CONFIG_SUB) gnustep-base-1.24.0/ | |
cp $(CONFIG_GUESS) gnustep-base-1.24.0/ | |
. $(ARMSYSROOT)/share/GNUstep/Makefiles/GNUstep.sh && \ | |
cd gnustep-base-1.24.0 && \ | |
CC="$(CLANG_ARM)" \ | |
CXX="$(CLANGPP_ARM)" \ | |
CPPFLAGS="$(CPPFLAGS_ARM)" \ | |
CFLAGS="-lobjc --verbose" \ | |
CXXFLAGS="-lstdc++ -lobjc" \ | |
./configure --prefix="$(ARMSYSROOT)" --host="arm-linux-androideabi" --enable-nxconstantstring && \ | |
make install | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment