diff options
author | Dan Liew <daniel.liew@imperial.ac.uk> | 2017-09-29 09:58:56 +0100 |
---|---|---|
committer | Dan Liew <daniel.liew@imperial.ac.uk> | 2017-10-04 22:28:52 +0100 |
commit | ba660bfd6903ac909815fd0d8204e7bf03197ce8 (patch) | |
tree | 39bf877641ee4edb49310724d8b4481d4e60d43c | |
parent | 12f0e2cd11e4bb9e0aa829f95bb437bee0e929cb (diff) | |
download | klee-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.txt | 17 | ||||
-rw-r--r-- | README-CMake.md | 5 | ||||
-rw-r--r-- | runtime/CMakeLists.txt | 6 |
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 |