diff options
author | Lai Wei-Chih <Robert.Lai@mediatek.com> | 2015-01-06 15:22:15 +0800 |
---|---|---|
committer | Lai Wei-Chih <Robert.Lai@mediatek.com> | 2015-01-16 14:49:15 +0800 |
commit | 4c2c6ce2e19631291f8b39b34bf94f03d7986194 (patch) | |
tree | af24f6394438982028d3fb026e1e1c962928c468 | |
parent | ba70313fc325eaaaf5aca87cef09a753446f8cca (diff) | |
download | ndk-4c2c6ce2e19631291f8b39b34bf94f03d7986194.tar.gz |
Misc fix for abcc.
Change-Id: I994283f8182a0162f9a02be6a9087735ec8195ff
-rwxr-xr-x | build/tools/build-device-llvm.sh | 14 | ||||
-rw-r--r-- | tests/abcc/jni/Abcc.h | 6 | ||||
-rw-r--r-- | tests/abcc/jni/Android.mk | 5 | ||||
-rw-r--r-- | tests/abcc/jni/device/Abcc_device.cpp | 14 | ||||
-rw-r--r-- | tests/abcc/src/compiler/abcc/AbccService.java | 6 | ||||
-rw-r--r-- | toolchains/llvm-3.5/setup.mk | 6 |
6 files changed, 35 insertions, 16 deletions
diff --git a/build/tools/build-device-llvm.sh b/build/tools/build-device-llvm.sh index 35006cefd..d0ac46316 100755 --- a/build/tools/build-device-llvm.sh +++ b/build/tools/build-device-llvm.sh @@ -162,7 +162,7 @@ for abi in $ABIS; do fi toolchain_prefix=`get_default_toolchain_prefix_for_arch $arch` toolchain_name=`get_toolchain_name_for_arch $arch $GCCVER` - CFLAGS="-fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections" + CFLAGS="-fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -fPIE" case $abi in armeabi) # No -mthumb, because ./llvm/lib/Target/ARM/ARMJITInfo.cpp now contain inline assembly @@ -171,7 +171,7 @@ for abi in $ABIS; do ;; armeabi-v7a|armeabi-v7a-hard) CFLAGS=$CFLAGS" -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" - if [ "$arbi" = "armeabi-v7a-hard" ]; then + if [ "$abi" = "armeabi-v7a-hard" ]; then CFLAGS=$CFLAGS" -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -Wl,--no-warn-mismatch -lm_hard" fi ;; @@ -194,14 +194,15 @@ for abi in $ABIS; do run cp -f $BUILD_OUT/ndk-standalone-$arch/$toolchain_prefix/lib/lib${STL}_shared.so $TOOLCHAIN_BUILD_PREFIX/$abi fi - CC=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-gcc - CXX=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-g++ - export CC CXX + CC="$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-gcc $CFLAGS" + CXX="$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-g++ $CFLAGS" + LDFLAGS="-fPIE -pie" + export CC CXX LDFLAGS EXTRA_LLVM_CONFIG="" EXTRA_MCLINKER_CONFIG="" if [ "$SHARED" = "yes" ]; then - EXTRA_LLVM_CONFIG="--enable-shared --with-extra-ld-options=-l${STL}_shared" + EXTRA_LLVM_CONFIG="--enable-shared --with-extra-ld-options=\"-l${STL}_shared\"" EXTRA_MCLINKER_CONFIG="--with-llvm-shared-lib=$LLVM_BUILD_OUT/Release/lib/libLLVM-${DEFAULT_LLVM_VERSION}.so" fi @@ -216,7 +217,6 @@ for abi in $ABIS; do --with-clang-srcdir=/dev/null \ --disable-assertions \ --disable-terminfo \ - --with-extra-options="$CFLAGS" \ $EXTRA_LLVM_CONFIG fail_panic "Couldn't configure llvm toolchain for ABI $abi" diff --git a/tests/abcc/jni/Abcc.h b/tests/abcc/jni/Abcc.h index a9c53a772..9ea565d0b 100644 --- a/tests/abcc/jni/Abcc.h +++ b/tests/abcc/jni/Abcc.h @@ -21,7 +21,13 @@ #include <map> #include <string> #include <vector> + +// Always use latest llvm for on-device abcc +#if ON_DEVICE +#include "llvm_35.h" +#else #include "llvm_version.h" +#endif namespace abcc { diff --git a/tests/abcc/jni/Android.mk b/tests/abcc/jni/Android.mk index c3b184a76..f665fd1f4 100644 --- a/tests/abcc/jni/Android.mk +++ b/tests/abcc/jni/Android.mk @@ -21,6 +21,7 @@ SYSTEM_PREBUILT_PACKAGE ?= true LOCAL_MODULE := libjni_abcc LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_C_INCLUDES := $(LOCAL_PATH)/device +LOCAL_CFLAGS += -DON_DEVICE=1 LOCAL_SRC_FILES := \ Abcc.cpp \ device/Abcc_device.cpp \ @@ -35,8 +36,8 @@ include external/stlport/libstlport.mk include $(BUILD_SHARED_LIBRARY) else # SYSTEM_PREBUILT_PACKAGE -LOCAL_CFLAGS += -DON_DEVICE=1 -LOCAL_CFLAGS += -DENABLE_PARALLEL_LLVM_CG=1 +#FIXME: parallel llvm codegen is not yet ported to llvm-3.5 +#LOCAL_CFLAGS += -DENABLE_PARALLEL_LLVM_CG=1 LOCAL_CFLAGS += -DVERBOSE=0 LOCAL_LDLIBS := -llog LOCAL_STATIC_LIBRARIES := cpufeatures diff --git a/tests/abcc/jni/device/Abcc_device.cpp b/tests/abcc/jni/device/Abcc_device.cpp index b0aecdc49..ea0906c48 100644 --- a/tests/abcc/jni/device/Abcc_device.cpp +++ b/tests/abcc/jni/device/Abcc_device.cpp @@ -33,6 +33,12 @@ using namespace abcc; # define CURRENT_ABI "x86" #elif defined(__mips__) # define CURRENT_ABI "mips" +#elif defined(__aarch64__) +# define CURRENT_ABI "arm64-v8a" +#elif defined(__x86_64__) +# define CURRENT_ABI "x86_64" +#elif defined(__mips64) +# define CURRENT_ABI "mips64" #else # error "Unsupport target abi" #endif @@ -103,6 +109,7 @@ void DeviceBitcodeCompiler::getBitcodeFiles() { std::vector<std::string> bc_files,lib_files; DIR *dp = opendir(mWorkingDir.c_str()); if (!dp) { + LOGE("Error opening working dir: %s", mWorkingDir.c_str()); mRet = RET_FAIL_PREPARE_BITCODE; return; } @@ -193,7 +200,12 @@ void DeviceBitcodeCompiler::prepareToolchain() { cmd += " " + mSysroot + "/usr/bin/ld.mcld"; cmd += " -L" + mWorkingDir; cmd += " -L" + mSysroot + "/usr/lib"; - cmd += " -L/system/lib"; + + if (mAbi == TargetAbi::X86_64 || mAbi == TargetAbi::ARM64_V8A || mAbi == TargetAbi::MIPS64) + cmd += " -L/system/lib64"; + else + cmd += " -L/system/lib"; + mExecutableToolsPath[(unsigned)CMD_LINK] = cmd; cmd = " @" + mSysroot + "/usr/lib/libportable.wrap " + mSysroot + "/usr/lib/libportable.a"; diff --git a/tests/abcc/src/compiler/abcc/AbccService.java b/tests/abcc/src/compiler/abcc/AbccService.java index 193acbddd..303c26cf3 100644 --- a/tests/abcc/src/compiler/abcc/AbccService.java +++ b/tests/abcc/src/compiler/abcc/AbccService.java @@ -264,12 +264,6 @@ public class AbccService extends IntentService { private native int genLibs(String working_dir, String sysroot); static { - // Distinguish whether this is a system prebuilt apk or an updated apk - // ApplicationInfo info = getApplicationInfo(); - // FIXME: We cannot access ApplicationInfo in static context, how to prevent magic path? - if (new File("/data/data/compiler.abcc/lib/libjni_abcc.so").exists()) System.loadLibrary("jni_abcc"); - else - System.load("/system/lib/libjni_abcc.so"); } } diff --git a/toolchains/llvm-3.5/setup.mk b/toolchains/llvm-3.5/setup.mk index 80cf10986..f31219d5d 100644 --- a/toolchains/llvm-3.5/setup.mk +++ b/toolchains/llvm-3.5/setup.mk @@ -224,6 +224,12 @@ include $(NDK_ROOT)/toolchains/mips64el-linux-android-clang3.5/setup.mk else +# if unknown ABI ends with 64 suffix then use le64 +ifneq ($(filter %64,$(APP_ABI)),) +UNKNOWN_ABI_64 := true +NDK_APP_DST_DIR := $(NDK_APP_LIBS_OUT)/$(TARGET_ARCH_ABI)64 +endif + TARGET_OBJ_EXTENSION := .bc TARGET_LIB_EXTENSION := .a TARGET_SONAME_EXTENSION := .bc |