Roger Mester
Roger Mester

Reputation: 71

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?

Upvotes: 7

Views: 7651

Answers (3)

raja
raja

Reputation: 21

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>

Upvotes: 1

Vikram
Vikram

Reputation: 204

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.

Upvotes: 5

ognian
ognian

Reputation: 11541

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)

Upvotes: 6

Related Questions