add_subdirectory for cmake tensorflow lite fails on subsequent runs

487 Views Asked by At

I am trying to include tensorflow-lite in a project per the minimal example here: Build TensorFlow Lite with CMake. Specifically, I'm trying to add_subdirectory the CMakeLists.txt for tflite, as recommended.

This works when the project is first built, but if I change my top-level CMakeLists.txt for any reason (adding a test or linking something to a different target, say), then the build fails with the following:

-- Setting build type to Release, for debug builds use'-DCMAKE_BUILD_TYPE=Debug'.
CMake Warning at build/abseil-cpp/CMakeLists.txt:70 (message):
  A future Abseil release will default ABSL_PROPAGATE_CXX_STD to ON for CMake
  3.8 and up.  We recommend enabling this option to ensure your project still
  builds correctly.


-- Standard libraries to link to explicitly: none
-- The Fortran compiler identification is GNU 9.4.0
-- Could NOT find CLANG_FORMAT: Found unsuitable version "0.0", but required is exact version "9" (found CLANG_FORMAT_EXECUTABLE-NOTFOUND)
-- 
-- Configured Eigen 3.4.90
-- 
-- Proceeding with version: 2.0.6.v2.0.6
-- CMAKE_CXX_FLAGS:  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -faligned-new -Werror=implicit-fallthrough=2 -Wunused-result -Werror=unused-result -Wunused-parameter -Werror=unused-parameter -fsigned-char
CMake Error at build/cpuinfo/CMakeLists.txt:262 (ADD_SUBDIRECTORY):
  ADD_SUBDIRECTORY not given a binary directory but the given source
  directory "/opt/------/workspace/------/build/clog-source"
  is not a subdirectory of
  "/opt/------/workspace/------/build/cpuinfo".  When
  specifying an out-of-tree source a binary directory must be explicitly
  specified.


CMake Error at build/cpuinfo/CMakeLists.txt:265 (SET_PROPERTY):
  SET_PROPERTY could not find TARGET clog.  Perhaps it has not yet been
  created.


-- Configuring incomplete, errors occurred!
See also "/opt/------/workspace/------/build/CMakeFiles/CMakeOutput.log".
See also "/opt/------/workspace/------/build/CMakeFiles/CMakeError.log".

(Those dashes aren't real paths, they're just to mask sensitive info.)

Just to reiterate, it DOES configure and build correctly the first time, but reruns of cmake .. will fail.

I've tried this on a couple of platforms and got the same result. You should be able to reproduce with a minimal CMakeLists.txt containing add_subdirectory and some helloworld target to link tensorflow-lite.

I tried giving the add_subdirectory for clog a binary location but just got a cascade of new errors, and at that point my CMake know-how definitely runs out.

1

There are 1 best solutions below

2
On

The issue is due to the same cmake variable CLOG_SOURCE_DIR used in both xnnpack and cpuinfo.

In xnnpack, it uses a cmake script to download, configure and build the clog. In cpuinfo, it add as a subdirectory. So they use different ways to add dependency. We need to fix this issue in either xnnpack or cpuinfo but as a walkaround, we can change the CLOG_SOURCE_DIR in either project to a different name (e.g. CLOG_SOURCE_DIR1) then this problem will go away.