From d410a83207bdf63ead87a145f97377b7eb1f96bf Mon Sep 17 00:00:00 2001 From: Andrew Harp Date: Thu, 7 Sep 2017 14:55:29 -0700 Subject: Android: make it possible to build TF with NDK 13+. The default compiler was switched from gcc to clang in 13b, which introduced a number of small incompatibilities. PiperOrigin-RevId: 167915928 --- WORKSPACE | 1 - tensorflow/contrib/android/BUILD | 1 + tensorflow/contrib/android/cmake/CMakeLists.txt | 1 + tensorflow/contrib/makefile/Makefile | 4 +++- tensorflow/examples/android/BUILD | 1 + tensorflow/examples/android/README.md | 4 ++-- tensorflow/tensorflow.bzl | 4 +++- tensorflow/tools/ci_build/Dockerfile.android | 2 +- 8 files changed, 12 insertions(+), 6 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index a0fe67bf31..69e300439d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -27,7 +27,6 @@ load("//tensorflow:workspace.bzl", "tf_workspace") # path = "", #) # -# Android NDK r12b is recommended (higher may cause issues with Bazel) #android_ndk_repository( # name="androidndk", # path="", diff --git a/tensorflow/contrib/android/BUILD b/tensorflow/contrib/android/BUILD index 0833790e99..9c62d014ed 100644 --- a/tensorflow/contrib/android/BUILD +++ b/tensorflow/contrib/android/BUILD @@ -79,6 +79,7 @@ cc_binary( ], linkopts = if_android([ "-landroid", + "-ldl", "-llog", "-lm", "-z defs", diff --git a/tensorflow/contrib/android/cmake/CMakeLists.txt b/tensorflow/contrib/android/cmake/CMakeLists.txt index 11e2128d72..25ada5ba27 100644 --- a/tensorflow/contrib/android/cmake/CMakeLists.txt +++ b/tensorflow/contrib/android/cmake/CMakeLists.txt @@ -62,6 +62,7 @@ add_library(tensorflow_inference SHARED # Include libraries needed for hello-jni lib target_link_libraries(tensorflow_inference android + dl log m z diff --git a/tensorflow/contrib/makefile/Makefile b/tensorflow/contrib/makefile/Makefile index 30897bb202..5cd6cca6a1 100644 --- a/tensorflow/contrib/makefile/Makefile +++ b/tensorflow/contrib/makefile/Makefile @@ -243,6 +243,7 @@ ifeq ($(TARGET),ANDROID) CXXFLAGS +=\ --sysroot $(NDK_ROOT)/platforms/android-21/arch-arm \ -Wno-narrowing \ +-fomit-frame-pointer \ -march=armv7-a \ -mfloat-abi=softfp \ -mfpu=neon \ @@ -267,7 +268,8 @@ $(TARGET_NSYNC_LIB) \ -lprotobuf \ -llog \ -lz \ --lm +-lm \ +-ldl LD := $(NDK_ROOT)/toolchains/arm-linux-androideabi-4.9/prebuilt/$(OS_PATH)-x86_64/arm-linux-androideabi/bin/ld diff --git a/tensorflow/examples/android/BUILD b/tensorflow/examples/android/BUILD index 2347e6b023..46df5973e8 100644 --- a/tensorflow/examples/android/BUILD +++ b/tensorflow/examples/android/BUILD @@ -29,6 +29,7 @@ cc_binary( defines = ["STANDALONE_DEMO_LIB"], linkopts = [ "-landroid", + "-ldl", "-ljnigraphics", "-llog", "-lm", diff --git a/tensorflow/examples/android/README.md b/tensorflow/examples/android/README.md index 883f8e664f..dda6e94f4b 100644 --- a/tensorflow/examples/android/README.md +++ b/tensorflow/examples/android/README.md @@ -124,8 +124,8 @@ the Android NDK and SDK must be installed on your system. 1. Install the latest version of Bazel as per the instructions [on the Bazel website](https://bazel.build/versions/master/docs/install.html). 2. The Android NDK is required to build the native (C/C++) TensorFlow code. The - current recommended version is 12b, which may be found - [here](https://developer.android.com/ndk/downloads/older_releases.html#ndk-12b-downloads). + current recommended version is 14b, which may be found + [here](https://developer.android.com/ndk/downloads/older_releases.html#ndk-14b-downloads). 3. The Android SDK and build tools may be obtained [here](https://developer.android.com/tools/revisions/build-tools.html), or alternatively as part of [Android diff --git a/tensorflow/tensorflow.bzl b/tensorflow/tensorflow.bzl index f0301937fb..e3af7faeb8 100644 --- a/tensorflow/tensorflow.bzl +++ b/tensorflow/tensorflow.bzl @@ -167,11 +167,13 @@ def tf_copts(): "-fno-exceptions", "-ftemplate-depth=900", ]) + if_cuda(["-DGOOGLE_CUDA=1"]) + if_mkl(["-DINTEL_MKL=1", "-fopenmp",]) + if_android_arm( - ["-mfpu=neon", "-fomit-frame-pointer"]) + if_linux_x86_64(["-msse3"]) + select({ + ["-mfpu=neon"]) + if_linux_x86_64(["-msse3"]) + select({ clean_dep("//tensorflow:android"): [ "-std=c++11", "-DTF_LEAN_BINARY", "-O2", + "-Wno-narrowing", + "-fomit-frame-pointer", ], clean_dep("//tensorflow:darwin"): [], clean_dep("//tensorflow:windows"): WIN_COPTS, diff --git a/tensorflow/tools/ci_build/Dockerfile.android b/tensorflow/tools/ci_build/Dockerfile.android index c6679f7882..3d67f6eeeb 100644 --- a/tensorflow/tools/ci_build/Dockerfile.android +++ b/tensorflow/tools/ci_build/Dockerfile.android @@ -41,7 +41,7 @@ RUN cd ${ANDROID_DEV_HOME} && \ echo y | android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION} # Install Android NDK. -ENV ANDROID_NDK_FILENAME android-ndk-r12b-linux-x86_64.zip +ENV ANDROID_NDK_FILENAME android-ndk-r14b-linux-x86_64.zip ENV ANDROID_NDK_URL https://dl.google.com/android/repository/${ANDROID_NDK_FILENAME} ENV ANDROID_NDK_HOME ${ANDROID_DEV_HOME}/ndk ENV PATH ${PATH}:${ANDROID_NDK_HOME} -- cgit v1.2.3