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