paulscode
New member
- Thread Starter
- #41
I'm thinking my somewhat uneducated attempt to translate the information from the original makefiles into NDK's special Android.mk files may be related. The console output when building linkage_arm.s looks like this:
In particular, the interesting message here is "arm-eabi-gcc: unrecognized option '-XLinker'". The LDFLAGS options from my Android.mk file are:
I don't actually know what some of these are for. The XLinker stuff was from my attempt to translate information from Ari64's makefile:
The --arm_linus --gnu option was a suggestion from that webpage Richard42 posted (but it didn't help, unfortunately). The rest of the options were in the file autogenerated by Pelya's SDL port. Perhaps someone with more NDK experience like Chaoz can see a problem here (let me know if you need more information).
For reference, here the entire Android.mk file I'm using for the core library (its pretty messy at the moment):
Code:
Compile thumb : core <= /home/paul/workspace/mupen64plus/project/jni/../jni/core/src/r4300/new_dynarec/linkage_arm.s
arm-eabi-gcc: unrecognized option '-XLinker'
/home/paul/bin/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc
-I/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/include -fpic
-mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums
-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__
-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer
-fno-strict-aliasing -finline-limit=64 -I/home/paul/workspace/mupen64plus/project/jni/../jni/core
-DANDROID -I/home/paul/workspace/mupen64plus/project/jni/../jni/core/../stlport/stlport
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/debugger
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/memory
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/main
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/main/zip
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/r4300
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/r4300/x86
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/r4300/new_dynarec
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/api
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/plugin
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/osal
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/../sdl-1.2/include
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/../sdl_mixer/include
-I/home/paul/workspace/mupen64plus/project/jni/../jni/core/../sdl_image/include
-DNEW_DYNAREC -DDYNAREC -D__arm__ -O3 -Wa,--noexecstack -O2 -DNDEBUG -g -c -MMD -MP -MF
/home/paul/workspace/mupen64plus/project/obj/local/armeabi/objs/core/src/r4300/new_dynarec/linkage_arm.s.d
/home/paul/workspace/mupen64plus/project/jni/../jni/core/src/r4300/new_dynarec/linkage_arm.s
-o /home/paul/workspace/mupen64plus/project/obj/local/armeabi/objs/core/src/r4300/new_dynarec/linkage_arm.s
arm-eabi-gcc: unrecognized option '-XLinker'
SharedLibrary : libcore.so
/home/paul/bin/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc
-nostdlib -Wl,-soname,libcore.so -Wl,-shared,-Bsymbolic
/home/paul/workspace/mupen64plus/project/obj/local/armeabi/objs/core/src/api/callbacks.o
...EDITED...
/home/paul/workspace/mupen64plus/project/obj/local/armeabi/libsdl_image.so
/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib/libc.so
/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib/libstdc++.so
/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib/libm.so
-Lobj/local/armeabi -XLinker --section-start -Xlinker .init=0x08000000 --arm_linux --gnu
-Lobj/local/armeabi -XLinker --section-start -Xlinker .init=0x08000000 --arm_linux --gnu -Wl,
--no-undefined -Wl,-z,noexecstack
-L/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib -lGLESv1_CM -ldl -llog
-lz -Wl,-rpath-link=/home/paul/bin/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib -o
/home/paul/workspace/mupen64plus/project/obj/local/armeabi/libcore.so
/home/paul/workspace/mupen64plus/project/obj/local/armeabi/objs/core/src/r4300/new_dynarec/linkage_arm.s:
Assembler messages:
...
Code:
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz
LOCAL_LDFLAGS := -Lobj/local/armeabi
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)
LOCAL_LDFLAGS += -XLinker --section-start -Xlinker .init=0x08000000
LOCAL_LDFLAGS += --arm_linux --gnu
Code:
ifeq ($(CPU), ARM)
ifeq ($(ARCH), 32BITS)
LDFLAGS += -Xlinker --section-start -Xlinker .init=0x08000000
endif
endif
For reference, here the entire Android.mk file I'm using for the core library (its pretty messy at the moment):
Code:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := core
APPDIR := $(shell readlink $(LOCAL_PATH)/src)
SRCDIR := $(shell readlink $(LOCAL_PATH)/src)src
APP_SUBDIRS := $(patsubst $(LOCAL_PATH)/%, %, $(shell find $(LOCAL_PATH)/$(APPDIR) -path '*/.svn' -prune -o -type d -print))
ifneq ($(APPLICATION_SUBDIRS_BUILD),)
APPLICATION_SUBDIRS_BUILD_NONRECURSIVE := $(addprefix $(APPDIR)/, $(filter-out %/*, $(APPLICATION_SUBDIRS_BUILD)))
APPLICATION_SUBDIRS_BUILD_RECURSIVE := $(patsubst %/*, %, $(filter %/*,$(APPLICATION_SUBDIRS_BUILD)))
APPLICATION_SUBDIRS_BUILD_RECURSIVE := $(foreach FINDDIR, $(APPLICATION_SUBDIRS_BUILD_RECURSIVE), ...EDITED...
$(shell find $(LOCAL_PATH)/$(APPDIR)/$(FINDDIR) -path '*/.svn' -prune -o -type d -print))
APPLICATION_SUBDIRS_BUILD_RECURSIVE := $(patsubst $(LOCAL_PATH)/%, %, $(APPLICATION_SUBDIRS_BUILD_RECURSIVE) )
APP_SUBDIRS := $(APPLICATION_SUBDIRS_BUILD_NONRECURSIVE) $(APPLICATION_SUBDIRS_BUILD_RECURSIVE)
endif
LOCAL_CFLAGS :=
ifeq ($(CRYSTAX_TOOLCHAIN),)
# Paths should be on newline so launchConfigure.sh will work properly
LOCAL_CFLAGS += \
-I$(LOCAL_PATH)/../stlport/stlport
endif
# Paths should be on newline so launchConfigure.sh will work properly
LOCAL_CFLAGS += \
$(foreach D, $(APP_SUBDIRS), -I$(LOCAL_PATH)/$(D)) \
-I$(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include \
$(foreach L, $(COMPILED_LIBRARIES), -I$(LOCAL_PATH)/../$(L)/include)
#LOCAL_CFLAGS += -DNO_ASM
LOCAL_CFLAGS += -DNEW_DYNAREC
LOCAL_CFLAGS += -DDYNAREC
LOCAL_CFLAGS += -D__arm__
LOCAL_CFLAGS += $(APPLICATION_ADDITIONAL_CFLAGS)
#Change C++ file extension as appropriate
LOCAL_CPP_EXTENSION := .cpp
#LOCAL_SRC_FILES := $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.cpp))))
#LOCAL_SRC_FILES += $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.c))))
LOCAL_SRC_FILES := \
$(SRCDIR)/api/callbacks.c \
$(SRCDIR)/api/common.c \
$(SRCDIR)/api/config.c \
$(SRCDIR)/api/debugger.c \
$(SRCDIR)/api/frontend.c \
$(SRCDIR)/api/vidext.c \
$(SRCDIR)/main/main.c \
$(SRCDIR)/main/util.c \
$(SRCDIR)/main/cheat.c \
$(SRCDIR)/main/eventloop.c \
$(SRCDIR)/main/adler32.c \
$(SRCDIR)/main/md5.c \
$(SRCDIR)/main/rom.c \
$(SRCDIR)/main/ini_reader.c \
$(SRCDIR)/main/savestates.c \
$(SRCDIR)/main/zip/ioapi.c \
$(SRCDIR)/main/zip/zip.c \
$(SRCDIR)/main/zip/unzip.c \
$(SRCDIR)/memory/dma.c \
$(SRCDIR)/memory/flashram.c \
$(SRCDIR)/memory/memory.c \
$(SRCDIR)/memory/pif.c \
$(SRCDIR)/memory/tlb.c \
$(SRCDIR)/osal/dynamiclib_unix.c \
$(SRCDIR)/osal/files_unix.c \
$(SRCDIR)/plugin/plugin.c \
$(SRCDIR)/plugin/dummy_video.c \
$(SRCDIR)/plugin/dummy_audio.c \
$(SRCDIR)/plugin/dummy_input.c \
$(SRCDIR)/plugin/dummy_rsp.c \
$(SRCDIR)/r4300/r4300.c \
$(SRCDIR)/r4300/bc.c \
$(SRCDIR)/r4300/cop0.c \
$(SRCDIR)/r4300/cop1.c \
$(SRCDIR)/r4300/cop1_d.c \
$(SRCDIR)/r4300/cop1_l.c \
$(SRCDIR)/r4300/cop1_s.c \
$(SRCDIR)/r4300/cop1_w.c \
$(SRCDIR)/r4300/exception.c \
$(SRCDIR)/r4300/interupt.c \
$(SRCDIR)/r4300/profile.c \
$(SRCDIR)/r4300/pure_interp.c \
$(SRCDIR)/r4300/recomp.c \
$(SRCDIR)/r4300/special.c \
$(SRCDIR)/r4300/regimm.c \
$(SRCDIR)/r4300/tlb.c \
$(SRCDIR)/r4300/empty_dynarec.c \
$(SRCDIR)/r4300/new_dynarec/new_dynarec.c \
$(SRCDIR)/r4300/new_dynarec/fpu.c \
$(SRCDIR)/r4300/new_dynarec/linkage_arm.s \
$(SRCDIR)/r4300/new_dynarec/assem_arm.c \
$(SRCDIR)/debugger/debugger.c \
$(SRCDIR)/debugger/dbg_decoder.c \
$(SRCDIR)/debugger/dbg_memory.c \
$(SRCDIR)/debugger/dbg_breakpoints.c
ifneq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),)
LOCAL_SRC_FILES := dummy.c
endif
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_STATIC_LIBRARIES := stlport $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz
LOCAL_LDFLAGS := -Lobj/local/armeabi
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)
LOCAL_LDFLAGS += -XLinker --section-start -Xlinker .init=0x08000000
LOCAL_LDFLAGS += --arm_linux --gnu
LIBS_WITH_LONG_SYMBOLS := $(strip $(shell \
for f in $(LOCAL_PATH)/../../libs/armeabi/*.so ; do \
if echo $$f | grep "libcore[.]so" > /dev/null ; then \
continue ; \
fi ; \
if [ -e "$$f" ] ; then \
if nm -g $$f | cut -c 12- | egrep '.{128}' > /dev/null ; then \
echo $$f | grep -o 'lib[^/]*[.]so' ; \
fi ; \
fi ; \
done \
) )
ifneq "$(LIBS_WITH_LONG_SYMBOLS)" ""
$(foreach F, $(LIBS_WITH_LONG_SYMBOLS), \
$(info Library $(F): abusing symbol names are: \
$(shell nm -g $(LOCAL_PATH)/../../libs/armeabi/$(F) | cut -c 12- | egrep '.{128}' ) ) \
$(info Library $(F) contains symbol names longer than 128 bytes, \
YOUR CODE WILL DEADLOCK WITHOUT ANY WARNING when you'll access such function - \
please make this library static to avoid problems. ) )
$(error Detected libraries with too long symbol names. Remove all files under project/libs/armeabi, make these libs static, ...EDITED...
and recompile)
endif
APP_LIB_DEPENDS := $(foreach LIB, $(LOCAL_SHARED_LIBRARIES), $(abspath $(LOCAL_PATH)/../../obj/local/armeabi/lib$(LIB).so))
APP_LIB_DEPENDS += $(foreach LIB, $(LOCAL_STATIC_LIBRARIES), $(abspath $(LOCAL_PATH)/../../obj/local/armeabi/lib$(LIB).a))
include $(BUILD_SHARED_LIBRARY)
ifneq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),)
LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH)
.NOTPARALLEL: $(realpath $(LOCAL_PATH)/../../obj/local/armeabi/libcore.so) $(LOCAL_PATH)/src/libcore.so
$(shell rm $(LOCAL_PATH)/src/libcore.so) # Enforce rebuilding
# $(shell rm $(LOCAL_PATH)/../../obj/local/armeabi/*.so) # libcore.so may try to link with wrong libraries, prevent that
$(LOCAL_PATH)/src/libcore.so: $(LOCAL_PATH)/src/AndroidBuild.sh $(LOCAL_PATH)/src/AndroidAppSettings.cfg $(APP_LIB_DEPENDS)
echo Launching script $(LOCAL_PATH_SDL_APPLICATION)/AndroidBuild.sh
cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh
$(realpath $(LOCAL_PATH)/../../obj/local/armeabi/libcore.so): $(LOCAL_PATH)/src/libcore.so OVERRIDE_CUSTOM_LIB
cp -f $< $@
.PHONY: OVERRIDE_CUSTOM_LIB
OVERRIDE_CUSTOM_LIB:
endif
Last edited: