Skip to content

Commit e389df0

Browse files
authored
Merge pull request #124 from fferflo/add_cmake
Add modern cmake
2 parents 41a131e + 97109f1 commit e389df0

File tree

13 files changed

+131
-44
lines changed

13 files changed

+131
-44
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,6 @@ examples/*/build
3737

3838
# Libtensorflow
3939
libtensorflow
40+
41+
# Downloaded model
42+
examples/efficientnet/model

CMakeLists.txt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
2+
project(cppflow LANGUAGES CXX)
3+
4+
include(GNUInstallDirs)
5+
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake)
6+
7+
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/modules")
8+
9+
10+
# Library target
11+
find_package(tensorflow REQUIRED)
12+
add_library(cppflow INTERFACE)
13+
target_include_directories(cppflow
14+
INTERFACE
15+
${tensorflow_INCLUDE_DIRS}
16+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
17+
$<INSTALL_INTERFACE:include>
18+
)
19+
target_compile_features(cppflow INTERFACE cxx_std_17)
20+
target_link_libraries(cppflow INTERFACE
21+
${tensorflow_LIBRARIES}
22+
)
23+
install(
24+
TARGETS cppflow
25+
EXPORT install_targets
26+
)
27+
28+
29+
# Build examples
30+
option(BUILD_EXAMPLES "Build examples" ON)
31+
if(BUILD_EXAMPLES)
32+
add_subdirectory(examples)
33+
endif()
34+
35+
36+
# Install headers
37+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
38+
39+
40+
# Install targets file
41+
install(EXPORT install_targets
42+
FILE
43+
${PROJECT_NAME}Targets.cmake
44+
NAMESPACE
45+
${PROJECT_NAME}::
46+
DESTINATION
47+
${INSTALL_CONFIGDIR}
48+
)
49+
50+
51+
# Install cppflowConfig.cmake
52+
include(CMakePackageConfigHelpers)
53+
configure_package_config_file(
54+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
55+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
56+
INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
57+
)
58+
install(FILES
59+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
60+
DESTINATION ${INSTALL_CONFIGDIR}
61+
)
62+
63+
64+
# Install find modules
65+
install(DIRECTORY cmake/modules/ DESTINATION ${INSTALL_CONFIGDIR}/modules)

cmake/cppflowConfig.cmake.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
get_filename_component(cppflow_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
2+
3+
if(NOT TARGET cppflow::cppflow)
4+
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${cppflow_CMAKE_DIR}/modules")
5+
find_package(tensorflow REQUIRED)
6+
include("${cppflow_CMAKE_DIR}/cppflowTargets.cmake")
7+
endif()

cmake/modules/Findtensorflow.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
find_path(tensorflow_INCLUDE_DIRS
2+
NAMES tensorflow/c/c_api.h
3+
)
4+
mark_as_advanced(tensorflow_INCLUDE_DIRS)
5+
6+
find_library(tensorflow_LIBRARIES
7+
NAMES tensorflow
8+
)
9+
mark_as_advanced(tensorflow_LIBRARIES)
10+
11+
12+
if(NOT tensorflow_INCLUDE_DIRS)
13+
message(STATUS "Could NOT find tensorflow/c/c_api.h")
14+
endif()
15+
if(NOT tensorflow_LIBRARIES)
16+
message(STATUS "Could NOT find tensorflow library")
17+
endif()
18+
19+
include(FindPackageHandleStandardArgs)
20+
find_package_handle_standard_args(tensorflow DEFAULT_MSG tensorflow_INCLUDE_DIRS tensorflow_LIBRARIES)

examples/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
add_subdirectory(eager_op_multithread)
2+
add_subdirectory(efficientnet)
3+
add_subdirectory(load_model)
4+
add_subdirectory(multi_input_output)
5+
add_subdirectory(tensor)
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(example)
2+
project(eager_op_multithread)
33

4-
find_library(TENSORFLOW_LIB tensorflow HINT $ENV{HOME}/libtensorflow2/lib)
54
find_package(Threads REQUIRED)
65

7-
set(CMAKE_CXX_STANDARD 17)
8-
96
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=thread")
107
#set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=thread")
118

12-
add_executable(example main.cpp)
13-
target_include_directories(example PRIVATE ../../include $ENV{HOME}/libtensorflow2/include)
14-
target_link_libraries(example "${TENSORFLOW_LIB}" Threads::Threads)
9+
add_executable(eager_op_multithread main.cpp)
10+
target_link_libraries(eager_op_multithread Threads::Threads cppflow)
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(example)
2+
project(efficientnet)
33

4-
find_library(TENSORFLOW_LIB tensorflow HINT $ENV{HOME}/libtensorflow2/lib)
5-
6-
set(CMAKE_CXX_STANDARD 17)
7-
8-
add_executable(example main.cpp)
9-
target_include_directories(example PRIVATE ../../include $ENV{HOME}/libtensorflow2/include)
10-
target_link_libraries (example "${TENSORFLOW_LIB}")
4+
add_executable(efficientnet main.cpp)
5+
target_link_libraries(efficientnet cppflow)
6+
target_compile_definitions(efficientnet PUBLIC
7+
CAT_PATH="${CMAKE_CURRENT_SOURCE_DIR}/my_cat.jpg"
8+
MODEL_PATH="${CMAKE_CURRENT_SOURCE_DIR}/model"
9+
)

examples/efficientnet/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
int main() {
77

8-
auto input = cppflow::decode_jpeg(cppflow::read_file(std::string("../my_cat.jpg")));
8+
auto input = cppflow::decode_jpeg(cppflow::read_file(std::string(CAT_PATH)));
99
input = cppflow::cast(input, TF_UINT8, TF_FLOAT);
1010
input = cppflow::expand_dims(input, 0);
11-
cppflow::model model("../model");
11+
cppflow::model model(std::string(MODEL_PATH));
1212
auto output = model(input);
1313

1414
std::cout << "It's a tiger cat: " << cppflow::arg_max(output, 1) << std::endl;
15-
15+
1616
return 0;
1717
}

examples/load_model/CMakeLists.txt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(example)
2+
project(load_model)
33

4-
find_library(TENSORFLOW_LIB tensorflow HINT $ENV{HOME}/libtensorflow2/lib)
5-
6-
set(CMAKE_CXX_STANDARD 17)
74
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
85
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -lasan")
96

10-
add_executable(example main.cpp)
11-
target_include_directories(example PRIVATE ../../include $ENV{HOME}/libtensorflow2/include)
12-
target_link_libraries (example "${TENSORFLOW_LIB}")
7+
add_executable(load_model main.cpp)
8+
target_link_libraries(load_model cppflow)
9+
target_compile_definitions(load_model PUBLIC
10+
MODEL_PATH="${CMAKE_CURRENT_SOURCE_DIR}/model"
11+
)

examples/load_model/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
int main() {
88

99
auto input = cppflow::fill({10, 5}, 1.0f);
10-
cppflow::model model("../model");
10+
cppflow::model model(std::string(MODEL_PATH));
1111
auto output = model(input);
12-
12+
1313
std::cout << output << std::endl;
1414

1515
auto values = output.get_data<float>();

0 commit comments

Comments
 (0)