From 00cbb08cc46ea6d3635d90960890cab271c6b3ea Mon Sep 17 00:00:00 2001
From: felix <felix@call-with-current-continuation.org>
Date: Thu, 1 Aug 2013 17:12:45 +0200
Subject: [PATCH 1/2] Add set of extra options for compiler, linker and
 assembler. This allows easier customization of the
 build process for specific targets.

---
 Makefile.cygwin |    8 ++++----
 Makefile.mingw  |    8 ++++----
 defaults.make   |   15 +++++++++------
 rules.make      |   26 +++++++++++++-------------
 4 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/Makefile.cygwin b/Makefile.cygwin
index 5772caf..7bcfb0e 100644
--- a/Makefile.cygwin
+++ b/Makefile.cygwin
@@ -137,10 +137,10 @@ chicken-defaults.h:
 	echo "# define C_INSTALL_CXX \"$(CXX_COMPILER)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_CFLAGS" >>$@
-	echo "# define C_INSTALL_CFLAGS \"$(C_COMPILER_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_INSTALL_CFLAGS \"$(C_COMPILER_OPTIONS) $(C_COMPILER_EXTRA_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_LDFLAGS" >>$@
-	echo "# define C_INSTALL_LDFLAGS \"$(LINKER_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_INSTALL_LDFLAGS \"$(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_PREFIX" >>$@
 	echo "# define C_INSTALL_PREFIX \"$(PREFIX)\"" >>$@
@@ -197,10 +197,10 @@ chicken-defaults.h:
 	echo "# define C_TARGET_CXX \"$(TARGET_CXX_COMPILER)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_CFLAGS" >>$@
-	echo "# define C_TARGET_CFLAGS \"$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_TARGET_CFLAGS \"$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_EXTRA_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_LDFLAGS" >>$@
-	echo "# define C_TARGET_LDFLAGS \"$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_TARGET_LDFLAGS \"$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_EXTRA_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_FEATURES" >>$@
 	echo "# define C_TARGET_FEATURES \"$(TARGET_FEATURES)\"" >>$@
diff --git a/Makefile.mingw b/Makefile.mingw
index e34f604..8694e2d 100644
--- a/Makefile.mingw
+++ b/Makefile.mingw
@@ -143,10 +143,10 @@ endif
 	echo # define C_INSTALL_RC_COMPILER "$(RC_COMPILER)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_INSTALL_CFLAGS >>$@
-	echo # define C_INSTALL_CFLAGS "$(C_COMPILER_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)" >>$@
+	echo # define C_INSTALL_CFLAGS "$(C_COMPILER_OPTIONS) $(C_COMPILER_EXTRA_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_INSTALL_LDFLAGS >>$@
-	echo # define C_INSTALL_LDFLAGS "$(LINKER_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)" >>$@
+	echo # define C_INSTALL_LDFLAGS "$(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_INSTALL_PREFIX >>$@
 	echo # define C_INSTALL_PREFIX "$(PREFIX)" >>$@
@@ -200,10 +200,10 @@ endif
 	echo # define C_TARGET_RC_COMPILER "$(TARGET_RC_COMPILER)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_TARGET_CFLAGS >>$@
-	echo # define C_TARGET_CFLAGS "$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)" >>$@
+	echo # define C_TARGET_CFLAGS "$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_EXTRA_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_TARGET_LDFLAGS >>$@
-	echo # define C_TARGET_LDFLAGS "$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)" >>$@
+	echo # define C_TARGET_LDFLAGS "$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_EXTRA_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)" >>$@
 	echo #endif >>$@
 	echo #ifndef C_TARGET_FEATURES >>$@
 	echo # define C_TARGET_FEATURES "$(TARGET_FEATURES)" >>$@
diff --git a/defaults.make b/defaults.make
index 9bb2baf..6ef993e 100644
--- a/defaults.make
+++ b/defaults.make
@@ -128,18 +128,21 @@ endif
 
 TARGET_C_COMPILER_OPTIONS ?= $(C_COMPILER_OPTIONS)
 TARGET_C_COMPILER_OPTIMIZATION_OPTIONS ?= $(C_COMPILER_OPTIMIZATION_OPTIONS)
+TARGET_C_COMPILER_EXTRA_OPTIONS ?= $(C_COMPILER_EXTRA_OPTIONS)
 TARGET_PREFIX ?= $(PREFIX)
 TARGET_RUN_PREFIX ?= $(TARGET_PREFIX)
 TARGET_LIBRARIES ?= $(LIBRARIES)
 TARGET_LINKER_OPTIONS ?= $(LINKER_OPTIONS)
 TARGET_LINKER_OPTIMIZATION_OPTIONS ?= $(LINKER_OPTIMIZATION_OPTIONS)
+TARGET_LINKER_EXTRA_OPTIONS ?= $(LINKER_EXTRA_OPTIONS)
 TARGET_FEATURES ?=
-TARGET_LIB_NAME ?= chicken
 
 ifneq ($(TARGET_C_COMPILER),$(C_COMPILER))
 CROSS_CHICKEN = 1
+TARGET_LIB_NAME ?= chicken
 else
 CROSS_CHICKEN = 0
+TARGET_LIB_NAME ?= $(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 endif
 
 
@@ -200,7 +203,7 @@ INSTALL_PROGRAM_EXECUTABLE_OPTIONS ?= -m755
 INSTALL_PROGRAM_FILE_OPTIONS ?= -m644
 MAKEDIR_COMMAND_OPTIONS ?= -p
 endif
-ASSEMBLER_OPTIONS ?= $(C_COMPILER_OPTIONS)
+ASSEMBLER_OPTIONS ?= $(C_COMPILER_OPTIONS) $(C_COMPILER_EXTRA_OPTIONS)
 ASSEMBLER_OUTPUT_OPTION ?= -o
 ASSEMBLER_OUTPUT ?= $(ASSEMBLER_OUTPUT_OPTION) $@
 ASSEMBLER_COMPILE_OPTION ?= -c
@@ -356,10 +359,10 @@ endif
 	echo "# define C_INSTALL_RC_COMPILER \"$(RC_COMPILER)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_CFLAGS" >>$@
-	echo "# define C_INSTALL_CFLAGS \"$(C_COMPILER_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_INSTALL_CFLAGS \"$(C_COMPILER_OPTIONS) $(C_COMPILER_EXTRA_OPTIONS) $(C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_LDFLAGS" >>$@
-	echo "# define C_INSTALL_LDFLAGS \"$(LINKER_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_INSTALL_LDFLAGS \"$(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_PREFIX" >>$@
 	echo "# define C_INSTALL_PREFIX \"$(PREFIX)\"" >>$@
@@ -413,10 +416,10 @@ endif
 	echo "# define C_TARGET_RC_COMPILER \"$(TARGET_RC_COMPILER)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_CFLAGS" >>$@
-	echo "# define C_TARGET_CFLAGS \"$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_TARGET_CFLAGS \"$(TARGET_C_COMPILER_OPTIONS) $(TARGET_C_COMPILER_EXTRA_OPTIONS) $(TARGET_C_COMPILER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_LDFLAGS" >>$@
-	echo "# define C_TARGET_LDFLAGS \"$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
+	echo "# define C_TARGET_LDFLAGS \"$(TARGET_LINKER_OPTIONS) $(TARGET_LINKER_EXTRA_OPTIONS) $(TARGET_LINKER_OPTIMIZATION_OPTIONS)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_FEATURES" >>$@
 	echo "# define C_TARGET_FEATURES \"$(TARGET_FEATURES)\"" >>$@
diff --git a/rules.make b/rules.make
index 30c53fd..cb56bad 100644
--- a/rules.make
+++ b/rules.make
@@ -103,7 +103,7 @@ DISTFILES := $(sort $(DISTFILES))
 
 define declare-shared-library-object
 $(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) \
 	  $$(C_COMPILER_BUILD_RUNTIME_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
 	  $$(INCLUDES)
@@ -119,7 +119,7 @@ $(foreach obj, $(LIBCHICKEN_OBJECTS_1),\
 
 define declare-static-library-object
 $(1)-static$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) \
 	  $$(C_COMPILER_STATIC_OPTIONS) \
 	  $$(C_COMPILER_BUILD_RUNTIME_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
@@ -135,7 +135,7 @@ $(foreach obj, $(LIBCHICKEN_OBJECTS_1),\
 
 define declare-import-lib-object
 $(1).import$(O): $(1).import.c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_PTABLES_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) $$(C_COMPILER_PTABLES_OPTIONS) \
 	  -DC_SHARED $$(C_COMPILER_COMPILE_OPTION) \
 	  $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) \
 	  $$(C_COMPILER_BUILD_RUNTIME_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
@@ -156,7 +156,7 @@ $(foreach obj,$(SETUP_API_OBJECTS_1),\
 
 define declare-compiler-object
 $(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) $$< \
 	  $$(C_COMPILER_OUTPUT) $$(INCLUDES)
 endef
@@ -168,7 +168,7 @@ $(foreach obj, $(COMPILER_OBJECTS_1),\
 
 define declare-static-compiler-object
 $(1)-static$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) \
 	  $$(C_COMPILER_STATIC_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
 	  $$(INCLUDES)
@@ -188,7 +188,7 @@ endif
 
 define declare-utility-program-object
 $(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) $$(C_COMPILER_SHARED_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
 	 $$(INCLUDES) 
 endef
@@ -201,7 +201,7 @@ $(foreach obj, $(UTILITY_PROGRAM_OBJECTS_1),\
 
 define declare-always-static-utility-program-object
 $(1)$(O): $(1).c chicken.h $$(CHICKEN_CONFIG_H)
-	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) \
+	$$(C_COMPILER) $$(C_COMPILER_OPTIONS) $$(C_COMPILER_EXTRA_OPTIONS) \
 	  $$(C_COMPILER_STATIC_OPTIONS) \
 	  $$(C_COMPILER_COMPILE_OPTION) $$(C_COMPILER_OPTIMIZATION_OPTIONS) $$< $$(C_COMPILER_OUTPUT) \
 	  $$(INCLUDES)
@@ -222,7 +222,7 @@ $(foreach obj, $(ALWAYS_STATIC_UTILITY_PROGRAM_OBJECTS_1),\
 libs: $(TARGETLIBS)
 
 lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO): $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_LIBRARY_OPTIONS) $(LIBCHICKEN_SO_LINKER_OPTIONS) \
+	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_LINK_SHARED_LIBRARY_OPTIONS) $(LIBCHICKEN_SO_LINKER_OPTIONS) \
 	  $(LINKER_OUTPUT) $^ $(LIBCHICKEN_SO_LIBRARIES)
 ifdef USES_SONAME
 	ln -sf $(LIBCHICKEN_SO_FILE) $(LIBCHICKEN_SO_FILE).$(BINARYVERSION)
@@ -244,21 +244,21 @@ lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A): $(APPLY_HACK_OBJECT) $(LIBCHIC
 # import libraries and extensions
 
 %.so: %.o
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $^ $(LINKER_OUTPUT_OPTION) $@ \
+	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $^ $(LINKER_OUTPUT_OPTION) $@ \
 	  $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) \
 	  $(LIBRARIES)
 
 # executables
 
 $(CHICKEN_SHARED_EXECUTABLE): $(COMPILER_OBJECTS) $(PRIMARY_LIBCHICKEN)
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXECUTABLE_OPTIONS) $(COMPILER_OBJECTS) $(LINKER_OUTPUT) \
+	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_EXECUTABLE_OPTIONS) $(COMPILER_OBJECTS) $(LINKER_OUTPUT) \
           $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) $(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $(LIBRARIES)
 
 define declare-program-from-object
 $(1)-RC_FILE = $(if $(and $(RC_COMPILER),$(3)),$(2).rc$(O))
 
 $(1): $(2)$(O) $$(PRIMARY_LIBCHICKEN) $$($(1)-RC_FILE)
-	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_EXECUTABLE_OPTIONS) $$< \
+	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_EXTRA_OPTIONS) $$(LINKER_EXECUTABLE_OPTIONS) $$< \
           $$($(1)-RC_FILE) $$(LINKER_OUTPUT) \
           $$(LINKER_LIBRARY_PREFIX)$$(PROGRAM_PREFIX)chicken$$(PROGRAM_SUFFIX)$$(LINKER_LIBRARY_SUFFIX) \
           $$(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $$(LIBRARIES)
@@ -276,11 +276,11 @@ $(eval $(call declare-program-from-object,$(CSC_PROGRAM)$(EXE),csc))
 # static executables
 
 $(CHICKEN_STATIC_EXECUTABLE): $(COMPILER_STATIC_OBJECTS) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_STATIC_OPTIONS) $(COMPILER_STATIC_OBJECTS) $(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $(LIBRARIES)
+	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXTRA_OPTIONS) $(LINKER_STATIC_OPTIONS) $(COMPILER_STATIC_OBJECTS) $(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $(LIBRARIES)
 
 define declare-static-program-from-object
 $(1): $(2)$(O) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
-	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_STATIC_OPTIONS) $$< $$(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $$(LIBRARIES)
+	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_EXTRA_OPTIONS) $$(LINKER_STATIC_OPTIONS) $$< $$(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $$(LIBRARIES)
 endef
 
 $(eval $(call declare-program-from-object,$(CSI_STATIC_EXECUTABLE),csi))
-- 
1.7.9.5

