about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorDan Liew <daniel.liew@imperial.ac.uk>2017-09-29 09:58:56 +0100
committerDan Liew <daniel.liew@imperial.ac.uk>2017-10-04 22:28:52 +0100
commitba660bfd6903ac909815fd0d8204e7bf03197ce8 (patch)
tree39bf877641ee4edb49310724d8b4481d4e60d43c
parent12f0e2cd11e4bb9e0aa829f95bb437bee0e929cb (diff)
downloadklee-ba660bfd6903ac909815fd0d8204e7bf03197ce8.tar.gz
[CMake] Add global clean target `clean_all`. Fixes #718.
This target invokes the `clean` target but is also intended for use by
other cleaning targets. The `clean_runtime` target is now declared as a
dependency of `clean-all` so that the runtime is cleaned as well.
-rw-r--r--CMakeLists.txt17
-rw-r--r--README-CMake.md5
-rw-r--r--runtime/CMakeLists.txt6
3 files changed, 25 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ed031459..32933e7c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -490,6 +490,23 @@ else()
 endif()
 
 ################################################################################
+# Global clean target
+################################################################################
+# CMake already uses the "clean" target name but it doesn't clean everything
+# unfortunately. We can't modify the target so we provide our own "clean_all"
+# target that runs clean. Other rules for performing clean up should declare
+# that "clean_all" depends on those rules.
+add_custom_target(clean_all
+  # Invoke CMake's own clean target
+  COMMAND
+    "${CMAKE_COMMAND}"
+    "--build"
+    "${CMAKE_BINARY_DIR}"
+    "--target"
+    "clean"
+)
+
+################################################################################
 # KLEE runtime support
 ################################################################################
 # This is set here and not in `runtime` because `config.h` needs to be generated.
diff --git a/README-CMake.md b/README-CMake.md
index daa1e90c..a2f2da5f 100644
--- a/README-CMake.md
+++ b/README-CMake.md
@@ -6,7 +6,10 @@ its autoconf/Makefile based build system.
 ## Useful top level targets
 
 * `check` - Build and run all tests.
-* `clean` - Clean the build tree. Note this won't clean the runtime build.
+* `clean` - Invoke CMake's built-in target to clean the build tree.  Note this
+  won't invoke the `clean_*` targets. It is advised that the `clean_all` target
+  is used instead.
+* `clean_all` - Run all clean targets.
 * `clean_runtime` - Clean the runtime build tree.
 * `docs` - Build documentation
 * `edit_cache` - Show cmake/ccmake/cmake-gui interface for chaning configure options.
diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt
index c90cbda0..2a056d9f 100644
--- a/runtime/CMakeLists.txt
+++ b/runtime/CMakeLists.txt
@@ -115,13 +115,15 @@ ExternalProject_Add_Step(BuildKLEERuntimes RuntimeBuild
 )
 
 # Target for cleaning the bitcode build system
-# FIXME: Invoke `make clean` does not invoke this target. It's also weird
-# that `ExternalProject` provides no way to do a clean.
+# NOTE: Invoking `make clean` does not invoke this target.
+# Instead the user needs to invoke the `clean_all` target.
+# It's also weird that `ExternalProject` provides no way to do a clean.
 add_custom_target(clean_runtime
   COMMAND ${ENV_BINARY} MAKEFLAGS="" ${MAKE_BINARY} -f Makefile.cmake.bitcode clean
   WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
   ${ADD_CUSTOM_COMMAND_USES_TERMINAL_ARG}
 )
+add_dependencies(clean_all clean_runtime)
 
 ###############################################################################
 # Runtime install