1# 2# Copyright 2016 The TensorFlow Authors. All Rights Reserved. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16cmake_minimum_required(VERSION 3.4.1) 17include(ExternalProject) 18 19# TENSORFLOW_ROOT_DIR: 20# root directory of tensorflow repo 21# used for shared source files and pre-built libs 22get_filename_component(TENSORFLOW_ROOT_DIR ../../../.. ABSOLUTE) 23set(PREBUILT_DIR ${TENSORFLOW_ROOT_DIR}/tensorflow/contrib/makefile/gen) 24 25add_library(lib_proto STATIC IMPORTED ) 26set_target_properties(lib_proto PROPERTIES IMPORTED_LOCATION 27 ${PREBUILT_DIR}/protobuf/lib/libprotobuf.a) 28 29add_library(lib_nsync STATIC IMPORTED ) 30set_target_properties(lib_nsync PROPERTIES IMPORTED_LOCATION 31 ${TARGET_NSYNC_LIB}/lib/libnsync.a) 32 33add_library(lib_tf STATIC IMPORTED ) 34set_target_properties(lib_tf PROPERTIES IMPORTED_LOCATION 35 ${PREBUILT_DIR}/lib/libtensorflow-core.a) 36# Change to compile flags should be replicated into bazel build file 37# TODO: Consider options other than -O2 for binary size. 38# e.g. -Os for gcc, and -Oz for clang. 39set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIS_SLIM_BUILD \ 40 -std=c++14 -fno-rtti -fno-exceptions \ 41 -O2 -Wno-narrowing -fomit-frame-pointer \ 42 -mfpu=neon -mfloat-abi=softfp -fPIE -fPIC \ 43 -ftemplate-depth=900 \ 44 -DGOOGLE_PROTOBUF_NO_RTTI \ 45 -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER") 46 47set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} \ 48 -Wl,--allow-multiple-definition \ 49 -Wl,--whole-archive \ 50 -fPIE -pie -v") 51file(GLOB tensorflow_inference_sources 52 ${CMAKE_CURRENT_SOURCE_DIR}/../jni/*.cc) 53file(GLOB java_api_native_sources 54 ${TENSORFLOW_ROOT_DIR}/tensorflow/java/src/main/native/*.cc) 55 56add_library(tensorflow_inference SHARED 57 ${tensorflow_inference_sources} 58 ${TENSORFLOW_ROOT_DIR}/tensorflow/c/tf_status_helper.cc 59 ${TENSORFLOW_ROOT_DIR}/tensorflow/c/checkpoint_reader.cc 60 ${TENSORFLOW_ROOT_DIR}/tensorflow/c/test_op.cc 61 ${TENSORFLOW_ROOT_DIR}/tensorflow/c/c_api.cc 62 ${java_api_native_sources}) 63 64# Include libraries needed for hello-jni lib 65target_link_libraries(tensorflow_inference 66 android 67 dl 68 log 69 m 70 z 71 lib_tf 72 lib_proto 73 lib_nsync) 74 75include_directories( 76 ${PREBUILT_DIR}/proto 77 ${PREBUILT_DIR}/protobuf/include 78 ${TENSORFLOW_ROOT_DIR}/tensorflow/contrib/makefile/downloads/eigen 79 ${TENSORFLOW_ROOT_DIR} 80 ${CMAKE_CURRENT_SOURCE_DIR}/..) 81