summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2016-07-05 14:45:54 +0200
committerMichael Brown2016-07-05 14:49:51 +0200
commit5430465185ba037c1f9c06cd3ec486b56dafb539 (patch)
treeb7fd666b6c4d4a8ca89692c47e886ef5daa9e3a2
parent[libc] Allow assertions to be globally enabled or disabled (diff)
downloadipxe-5430465185ba037c1f9c06cd3ec486b56dafb539.tar.gz
ipxe-5430465185ba037c1f9c06cd3ec486b56dafb539.tar.xz
ipxe-5430465185ba037c1f9c06cd3ec486b56dafb539.zip
[profile] Allow profiling to be globally enabled or disabled
As with assertions, profiling is enabled for objects built with any debug level (including an explicit debug level of zero). Allow profiling to be globally enabled or disabled by adding PROFILE=1 or PROFILE=0 respectively to the build command line. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/Makefile.housekeeping27
-rw-r--r--src/include/ipxe/profile.h2
2 files changed, 29 insertions, 0 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index a02acc8d..f09db372 100644
--- a/src/Makefile.housekeeping
+++ b/src/Makefile.housekeeping
@@ -747,6 +747,33 @@ include/assert.h : $(ASSERT_LIST)
.PRECIOUS : include/assert.h
+# (Single-element) list of profiling configuration
+#
+PROFILE_LIST := $(BIN)/.profile.list
+ifeq ($(wildcard $(PROFILE_LIST)),)
+PROFILE_OLD := <invalid>
+else
+PROFILE_OLD := $(shell cat $(PROFILE_LIST))
+endif
+ifneq ($(PROFILE_OLD),$(PROFILE))
+$(shell $(ECHO) "$(PROFILE)" > $(PROFILE_LIST))
+endif
+
+$(PROFILE_LIST) : $(MAKEDEPS)
+
+VERYCLEANUP += $(PROFILE_LIST)
+
+# Profiling configuration
+#
+ifneq ($(PROFILE),)
+CFLAGS += -DPROFILING=$(PROFILE)
+endif
+
+include/ipxe/profile.h : $(PROFILE_LIST)
+ $(Q)$(TOUCH) $@
+
+.PRECIOUS : include/ipxe/profile.h
+
# These files use .incbin inline assembly to include a binary file.
# Unfortunately ccache does not detect this dependency and caches
# builds even when the binary file has changed.
diff --git a/src/include/ipxe/profile.h b/src/include/ipxe/profile.h
index b6d2b19e..2c69e120 100644
--- a/src/include/ipxe/profile.h
+++ b/src/include/ipxe/profile.h
@@ -12,11 +12,13 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <bits/profile.h>
#include <ipxe/tables.h>
+#ifndef PROFILING
#ifdef NDEBUG
#define PROFILING 0
#else
#define PROFILING 1
#endif
+#endif
/**
* A data structure for storing profiling information