~ chicken-core (chicken-5) fb814d66b47d570a4a34cab60941b26f6e07f944


commit fb814d66b47d570a4a34cab60941b26f6e07f944
Author:     Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Sat Jan 21 20:18:01 2012 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Mon Jan 23 05:48:30 2012 +0100

    Add option to enable profiling more easily for specific compilation objects

diff --git a/README b/README
index 8d0d0679..2d529456 100644
--- a/README
+++ b/README
@@ -217,6 +217,15 @@
 	  LLVM version of gcc and with "clang", the LLVM-based C compiler,
 	  just set C_COMPILER to "llvm-gcc" or "clang".
 
+	PROFILE_OBJECTS=
+	  This variable allows you to profile (parts of) Chicken itself.
+	  Just pass in a whitespace-separated list of objects, without
+	  the .scm-extension.  (An "object" here is an individual
+	  .scm-file which gets compiled to a .c-file)
+	  To build with profiling support, run "make spotless" first.
+	  Be warned that this is a highly experimental option and
+	  profiling doesn't work for every component of Chicken.
+
     2.5. Uninstalling Chicken
 
         To remove CHICKEN from your file-system, enter (probably as
diff --git a/defaults.make b/defaults.make
index 03a014d8..474f9cd7 100644
--- a/defaults.make
+++ b/defaults.make
@@ -285,6 +285,8 @@ CHICKEN_PROGRAM_OPTIONS += -no-trace
 CHICKEN_COMPILER_OPTIONS += -no-trace
 endif
 
+CHICKEN_PROGRAM_OPTIONS += $(if $(PROFILE_OBJECTS),-profile)
+
 # targets
 
 CHICKEN_PROGRAM = $(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
diff --git a/rules.make b/rules.make
index 7ec86133..7fc04e8a 100644
--- a/rules.make
+++ b/rules.make
@@ -494,7 +494,11 @@ endef
 $(foreach lib, $(SETUP_API_OBJECTS_1),\
           $(eval $(call declare-emitted-import-lib-dependency,$(lib))))
 
-bootstrap-lib = $(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@
+define profile-flags
+$(if $(filter $(basename $(1)),$(PROFILE_OBJECTS)),-profile)
+endef
+
+bootstrap-lib = $(CHICKEN) $(call profile-flags, $@) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@
 
 library.c: $(SRCDIR)library.scm $(SRCDIR)banner.scm $(SRCDIR)common-declarations.scm
 	$(bootstrap-lib)
Trap