aboutsummaryrefslogtreecommitdiffhomepage
path: root/runtime/Makefile.cmake.bitcode.rules
diff options
context:
space:
mode:
authorCristian Cadar <c.cadar@imperial.ac.uk>2016-12-09 12:20:49 +0000
committerGitHub <noreply@github.com>2016-12-09 12:20:49 +0000
commitd7b03c98210d056bdc9cbf75156c6758b0dfa712 (patch)
treea9928caaf478c75a2f9ed940d9cc36fc4c6e5b5a /runtime/Makefile.cmake.bitcode.rules
parentc1c06b5f8e6579e3d0921b7ea5a828410986fbc5 (diff)
parente1255fbb2728eef85d995782ce72bea9f7179d35 (diff)
downloadklee-d7b03c98210d056bdc9cbf75156c6758b0dfa712.tar.gz
Merge pull request #535 from delcypher/cmake_fix_bitcode_rebuild_on_flag_change
[CMake] Fix bugs in the Makefile bitcode build system
Diffstat (limited to 'runtime/Makefile.cmake.bitcode.rules')
-rw-r--r--runtime/Makefile.cmake.bitcode.rules21
1 files changed, 19 insertions, 2 deletions
diff --git a/runtime/Makefile.cmake.bitcode.rules b/runtime/Makefile.cmake.bitcode.rules
index 27abde54..8261ce99 100644
--- a/runtime/Makefile.cmake.bitcode.rules
+++ b/runtime/Makefile.cmake.bitcode.rules
@@ -9,7 +9,7 @@
# This files defines the rules used for the bitcode build system. They are
# inspired by LLVM's old Makefile build system.
#===------------------------------------------------------------------------===#
-.PHONY: all build_at_level clean debug_vars
+.PHONY: all build_at_level clean debug_vars force
CURRENT_DIR:= $(shell pwd)
@@ -25,6 +25,7 @@ endif
# Any changes to the files listed here will trigger a rebuild of the sources
ADDITIONAL_BUILD_DEPS := $(CURRENT_DIR)/Makefile.cmake.bitcode \
$(RUNTIME_CMAKE_BINARY_DIR)/Makefile.cmake.bitcode.config \
+ $(RUNTIME_CMAKE_BINARY_DIR)/Makefile.cmake.bitcode.rules \
$(RUNTIME_CMAKE_BINARY_DIR)/Makefile.cmake.bitcode
# Handle VERBOSE
@@ -78,8 +79,14 @@ C_SRCS_NO_DIR := $(notdir $(C_SRCS))
BC_FILES_NO_DIR := $(C_SRCS_NO_DIR:.c=.bc)
BC_FILES := $(addprefix $(LOCAL_BUILD_DIR)/,$(BC_FILES_NO_DIR))
+# Path to file that stores the flags used for LLVMCC.
+# If the build flags are changed this should trigger
+# a change to the this file which will force a recompile
+# of all sources
+LLVMCC_FLAGS_FILE := $(LOCAL_BUILD_DIR)/LLVMCC_FLAGS
+
# All bitcode files have these additional dependencies
-$(BC_FILES) : $(ADDITIONAL_BUILD_DEPS)
+$(BC_FILES) : $(ADDITIONAL_BUILD_DEPS) $(LLVMCC_FLAGS_FILE)
# Include dependency information generated by previous
# compiler invocations if they exist
@@ -91,6 +98,15 @@ $(LOCAL_BUILD_DIR)/%.bc : $(SRC_DIR)/%.c
$(Verb) $(MKDIR) -p $(LOCAL_BUILD_DIR)
$(Verb) $(LLVMCC) $(LLVMCC.Flags) $(LLVMCC.Warnings) $< -c -o $@ -MP -MMD -MF $(LOCAL_BUILD_DIR)/$*.dep
+# $(LLVMCC_FLAGS_FILE) depends on `force` which will force the rule to
+# rerun every build. However the rule will only update the file when the
+# compile flags change which means we will trigger a rebuild when the compile
+# flags change.
+LLVMCC_FLAGS_FOR_FILE := $(LLVMCC) $(LLVMCC.Flags) $(LLVMCC.Warnings)
+$(LLVMCC_FLAGS_FILE): force
+ $(Verb) $(MKDIR) -p "$(dir $(LLVMCC_FLAGS_FILE))"
+ $(Verb)echo "$(LLVMCC_FLAGS_FOR_FILE)" | $(CMP) -s - $@ || echo "$(LLVMCC_FLAGS_FOR_FILE)" > $@
+
clean::
@echo "Removing bitcode files"
$(Verb) $(RM) -f $(BC_FILES)
@@ -154,6 +170,7 @@ debug_vars:
@echo "IS_RELEASE := $(IS_RELEASE)"
@echo "LOCAL_BUILD_DIR := $(LOCAL_BUILD_DIR)"
@echo "LLVMCC := $(LLVMCC)"
+ @echo "LLVMCC_FLAGS_FILE := $(LLVMCC_FLAGS_FILE)"
@echo "LLVMCC.Flags := $(LLVMCC.Flags)"
@echo "LLVMCC.ExtraFlags := $(LLVMCC.ExtraFlags)"
@echo "LLVMCC.Warnings := $(LLVMCC.Warnings)"