Skip to content

Instantly share code, notes, and snippets.

@dinocore1
Created November 13, 2012 16:36
Show Gist options
  • Save dinocore1/4066825 to your computer and use it in GitHub Desktop.
Save dinocore1/4066825 to your computer and use it in GitHub Desktop.
Build objc support for Android
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))
# 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