Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking Android C-code and ARM Assembler

I have written an Android app. It uses a main C-code module and a linked-in C-code module. Now I want to replace the linked-in module with an ARM assembler module. Anyone have a simple example?

like image 596
Roger Mester Avatar asked Mar 22 '11 11:03

Roger Mester


3 Answers

Here's an example of Android.mk file that will build sourcetree containing assembly. To see a complete example check the hello-neon sample distributed in the NDK package.

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm  # remove this if you want thumb mode
LOCAL_ARM_NEON := true # remove this if you want armv5 mode

LOCAL_CFLAGS :=  -std=c99 -pedantic -v

LOCAL_SRC_FILES := # list your C, C++ and assembly sources here.
           # assembly source files ends with extension .S
           # add .arm after the extension if you want to compile in armv5 mode (default is thumb)
           # add .arm.neon to compile in armv7 mode

LOCAL_C_INCLUDES := $(LOCAL_PATH)

LOCAL_LDLIBS := -llog

LOCAL_MODULE := #the name of your shared library

include $(BUILD_SHARED_LIBRARY)
like image 134
ognian Avatar answered Nov 08 '22 17:11

ognian


I wrote a tutorial to do exactly this. http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html

ARM assembly in Android isn't difficult, but there are many moving pieces: you need an assembly source, a C stub, a Makefile, and Java stub "native" methods that call the underlying assembly code.

You could download the source code from the link above, and see how it works. Once you have one working example, it is easy to poke and make it fit your need.

like image 31
Vikram Avatar answered Nov 08 '22 17:11

Vikram


I Saw the article by vikram I have an opinion that for beginners, it is better to build and run assembler code in Android using android source code.

e.g. you can create a module with the specification "BUILD_EXECUTABLE" in the Android.mk

You can have a main function inside the C code and have the assembler code built along with main.c

You can add such a module even under gingebread/frameworks/base/<mymodule>

like image 1
raja Avatar answered Nov 08 '22 17:11

raja