From fd104d603dca35a6850b40aed8647f80502dea36 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9D=B4=EC=B6=98=EC=84=9D/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 4 Apr 2018 09:34:13 +0900 Subject: [PATCH] Enable googletest for unittesting (#398) 0. Support arm-cross, x64-native, arm-native, and tizen-obs build 1. Introduce googletest at top level 2. Add simple test tflite_test.cc : this should be removed 3. Add howto doc --- CMakeLists.txt | 34 ++++++++++++++++++++++++++++++++++ docs/HowToAddUnittest.md | 27 +++++++++++++++++++++++++++ packaging/nnfw.spec | 2 ++ tools/tflite_run/CMakeLists.txt | 12 ++++++++++++ tools/tflite_run/src/tflite_test.cc | 6 ++++++ 5 files changed, 81 insertions(+) create mode 100644 docs/HowToAddUnittest.md create mode 100644 tools/tflite_run/src/tflite_test.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e30b50..4697b3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,40 @@ set(NNFW_ACL_INCLUDES ${NNFW_ACL_FOLDER} ${NNFW_ACL_FOLDER}/include) set(NNFW_ACL_LIBS arm_compute_graph arm_compute arm_compute_core) +# +# GTest support +# +if(NOT "${TARGET_OS}" STREQUAL "tizen") + include(ExternalProject) + # Download and install GoogleTest + ExternalProject_Add( + googletest + URL http://npuarchive.mooo.com/archive/nnfw/gtest/release-1.8.0.zip + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/googletest + # Disable install step + INSTALL_COMMAND "" + LOG_DOWNLOAD 1 + LOG_BUILD 1 + LOG_CONFIGURE 1 + CMAKE_ARGS + -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/config/config_${TARGET_ARCH}-linux.cmake + ) + ExternalProject_Get_Property(googletest source_dir binary_dir) + + # include and link path for all sub project + include_directories(${source_dir}/googletest/include/) + link_directories(${binary_dir}/googlemock/gtest/) +endif(NOT "${TARGET_OS}" STREQUAL "tizen") + +# tizen obs build support gtest, but tizen-cross not yet prepared +# TODO : gtest for tizen-cross build +if("${TARGET_OS}" STREQUAL "tizen" AND BUILD_IS_NATIVE) + enable_testing() + find_package(GTest REQUIRED) + include_directories(${GTEST_INCLUDE_DIR}) +endif() + + add_subdirectory(externals) add_subdirectory(tools) add_subdirectory(src) diff --git a/docs/HowToAddUnittest.md b/docs/HowToAddUnittest.md new file mode 100644 index 0000000..6612f15 --- /dev/null +++ b/docs/HowToAddUnittest.md @@ -0,0 +1,27 @@ +# How to Add Unittest using gtest(googletest) + +### 1. make own test code +``` +#include "gtest/gtest.h" + +TEST(TFLite_test_case, simple_test) +{ + EXPECT_EQ(1, 1); +} +``` + +### 2. Add dependancy on `googletest` to your test executable +``` +add_executable($YOURTEST_TARGET yourtest1.cc yourtest2.cc) +add_dependencies($YOURTEST_TARGET googletest) +``` + +### 3. Link test executable against libgtest.a and libgtest_main.a (+ pthread) +``` +target_link_libraries($YOURTEST_TARGET libgtest.a libgtest_main.a pthread) +``` + +### 4. Install test executable into Product/out/unittest +``` +install(TARGETS $YOURTEST_TARGET DESTINATION unittest) +``` diff --git a/packaging/nnfw.spec b/packaging/nnfw.spec index 3b228e5..6b49434 100644 --- a/packaging/nnfw.spec +++ b/packaging/nnfw.spec @@ -11,6 +11,7 @@ Source1: %{name}.manifest BuildRequires: cmake BuildRequires: boost-devel BuildRequires: libarmcl-devel +BuildRequires: gtest-devel Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig @@ -48,6 +49,7 @@ BUILD_TYPE=%{build_type} INSTALL_PATH=%{buildroot}%{install_prefix} TARGET_ARCH= %defattr(-,root,root,-) %{install_prefix}/lib/* %{install_prefix}/bin/* +%{install_prefix}/unittest/* %changelog * Thu Mar 15 2018 Chunseok Lee diff --git a/tools/tflite_run/CMakeLists.txt b/tools/tflite_run/CMakeLists.txt index c255200..4bbad96 100644 --- a/tools/tflite_run/CMakeLists.txt +++ b/tools/tflite_run/CMakeLists.txt @@ -9,3 +9,15 @@ target_link_libraries(tflite_run tensorflow_lite) target_link_libraries(tflite_run boost_program_options boost_system boost_filesystem) install(TARGETS tflite_run DESTINATION bin) + +# TEST BUILD + +## Add test cpp file +add_executable(tflite_test + src/tflite_test.cc) +add_dependencies(tflite_test googletest) +## Link test executable against gtest & gtest_main +target_link_libraries(tflite_test libgtest.a libgtest_main.a pthread) + +## install test binary for packaging +install(TARGETS tflite_test DESTINATION unittest) diff --git a/tools/tflite_run/src/tflite_test.cc b/tools/tflite_run/src/tflite_test.cc new file mode 100644 index 0000000..fcaa5ac --- /dev/null +++ b/tools/tflite_run/src/tflite_test.cc @@ -0,0 +1,6 @@ +#include "gtest/gtest.h" + +TEST(TFLite_test_case, simple_test) +{ + EXPECT_EQ(1, 1); +} -- 2.7.4