~ chicken-core (master) 8ddac9e65019b5a6e3fc3b07a928501a0e6e73a6


commit 8ddac9e65019b5a6e3fc3b07a928501a0e6e73a6
Author:     Felix Winkelmann <felix.winkelmann@bevuta.com>
AuthorDate: Sun Sep 13 22:56:45 2026 +0200
Commit:     Felix Winkelmann <felix.winkelmann@bevuta.com>
CommitDate: Sun Sep 13 22:56:45 2026 +0200

    add separate variable for .c file optimization options (runtime, utf)

diff --git a/configure b/configure
index 5672f80a..44cae9b3 100755
--- a/configure
+++ b/configure
@@ -265,6 +265,7 @@ test -n "$static" && echo "STATICBUILD = 1" >> config.make
 test -n "$CC" && echo "C_COMPILER = $cccmd" >> config.make
 test -n "$linker" && echo "LINKER = $linker" >> config.make
 test -n "$CFLAGS" && echo "C_COMPILER_OPTIMIZATION_OPTIONS = $CFLAGS" >> config.make
+test -n "$CFLAGS" && echo "RUNTIME_OPTIMIZATION_OPTIONS = $CFLAGS" >> config.make
 test -n "$host" && echo "HOSTSYSTEM = $host" >> config.make
 test -n "$target" && echo "TARGETSYSTEM = $target" >> config.make
 test -n "$pprefix" && echo "PROGRAM_PREFIX = $pprefix" >> config.make
diff --git a/defaults.make b/defaults.make
index 8a40c92f..64d05654 100644
--- a/defaults.make
+++ b/defaults.make
@@ -132,10 +132,10 @@ C_COMPILER_OPTIONS += -DC_ENABLE_PTABLES
 endif
 
 ifdef DEBUGBUILD
-ifeq ($(C_COMPILER),gcc)
 C_COMPILER_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused
+RUNTIME_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused
 endif
-endif
+RUNTIME_OPTIMIZATION_OPTIONS ?= -O2
 C_COMPILER_BUILD_RUNTIME_OPTIONS ?= -DC_BUILDING_LIBCHICKEN
 C_COMPILER_SHARED_OPTIONS ?= -fPIC -DPIC
 LINKER_EXECUTABLE_OPTIONS ?= -L.
diff --git a/rules.make b/rules.make
index 25c2e852..05f80c38 100644
--- a/rules.make
+++ b/rules.make
@@ -38,7 +38,8 @@ LIBCHICKEN_SCHEME_OBJECTS_1 = \
        extras lolevel tcp srfi-4 continuation $(POSIXFILE) internal \
        irregex scheduler debugger-client profiler stub expand modules \
        chicken-syntax chicken-ffi-syntax build-version r7lib
-LIBCHICKEN_OBJECTS_1 = $(LIBCHICKEN_SCHEME_OBJECTS_1) runtime utf
+LIBCHICKEN_C_OBJECTS_1 = runtime utf
+LIBCHICKEN_OBJECTS_1 = $(LIBCHICKEN_SCHEME_OBJECTS_1) $(LIBCHICKEN_C_OBJECTS_1)
 LIBCHICKEN_SHARED_OBJECTS = $(LIBCHICKEN_OBJECTS_1:=$(O))
 LIBCHICKEN_STATIC_OBJECTS = $(LIBCHICKEN_OBJECTS_1:=-static$(O)) \
 	eval-modules-static$(O)
@@ -93,11 +94,22 @@ $(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
 	  $$(INCLUDES)
 endef
 
+define declare-shared-library-c-object
+$(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	  $$(C_COMPILER_COMPILE_OPTION) $$(RUNTIME_OPTIMIZATION_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) \
+	  $$(C_COMPILER_BUILD_RUNTIME_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
+	  $$(INCLUDES)
+endef
+
 # The above meta-rule is reused in the setup API stuff below, so we alias it
 declare-libchicken-object = $(declare-shared-library-object)
+declare-libchicken-c-object = $(declare-shared-library-c-object)
 
-$(foreach obj, $(LIBCHICKEN_OBJECTS_1),\
+$(foreach obj, $(LIBCHICKEN_SCHEME_OBJECTS_1),\
           $(eval $(call declare-libchicken-object,$(obj))))
+$(foreach obj, $(LIBCHICKEN_C_OBJECTS_1),\
+          $(eval $(call declare-libchicken-c-object,$(obj))))
 
 # static versions
 
@@ -110,10 +122,22 @@ $(1)-static$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
 	  $$(INCLUDES)
 endef
 
+define declare-static-library-c-object
+$(1)-static$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	  $$(C_COMPILER_COMPILE_OPTION) $$(RUNTIME_OPTIMIZATION_OPTIONS) \
+	  $$(C_COMPILER_STATIC_OPTIONS) \
+	  $$(C_COMPILER_BUILD_RUNTIME_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
+	  $$(INCLUDES)
+endef
+
 declare-static-libchicken-object = $(declare-static-library-object)
+declare-static-libchicken-c-object = $(declare-static-library-c-object)
 
-$(foreach obj, $(LIBCHICKEN_OBJECTS_1),\
+$(foreach obj, $(LIBCHICKEN_SCHEME_OBJECTS_1),\
           $(eval $(call declare-static-libchicken-object,$(obj))))
+$(foreach obj, $(LIBCHICKEN_C_OBJECTS_1),\
+          $(eval $(call declare-static-libchicken-c-object,$(obj))))
 
 $(eval $(call declare-static-libchicken-object,eval-modules))
 
Trap