From 29cac2081438cc1fcf7b056170d373fb75604d04 Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Thu, 27 Aug 2020 00:36:27 +0000
Subject: [PATCH] Fix #85: Let each x86 configs set optimization level

Add `COPT` variable in `Config.x86_common` to set the optimization
level (defaulting to `-O2`).  Then each `Config.x86` file can set
`COPT` as desired if the default doesn't work.

Thus, `Config.x86_linux` sets `COPT` to `-O1`, but others can use the
default value.  See issue #68.
---
 src/lisp/Config.x86_common       | 9 +++++----
 src/lisp/Config.x86_darwin       | 1 +
 src/lisp/Config.x86_linux        | 4 ++++
 src/lisp/Config.x86_linux_clang  | 1 +
 src/lisp/Config.x86_netbsd       | 1 +
 src/lisp/Config.x86_solaris_sunc | 1 +
 6 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/lisp/Config.x86_common b/src/lisp/Config.x86_common
index d5537657b..946808012 100644
--- a/src/lisp/Config.x86_common
+++ b/src/lisp/Config.x86_common
@@ -45,10 +45,11 @@ endif
 CPPFLAGS := $(CPP_DEFINE_OPTIONS) $(CPP_INCLUDE_OPTIONS) 
 CFLAGS += -Wstrict-prototypes -Wall -g -fno-omit-frame-pointer
 
-# gcc 8.1.1 and 8.3.1 (and probably anything after 8.1.1?) won't
-# produce a working lisp with -O2.  Just use -O1.
-CFLAGS += -O1
-ASFLAGS = -g 
+# Default optimization level.  This can be changed in the individual
+# configs.
+COPT = -O2
+
+ASFLAGS = -g
 
 ASSEM_SRC = x86-assem.S
 ARCH_SRC = x86-arch.c
diff --git a/src/lisp/Config.x86_darwin b/src/lisp/Config.x86_darwin
index 0c1640413..448e634e1 100644
--- a/src/lisp/Config.x86_darwin
+++ b/src/lisp/Config.x86_darwin
@@ -6,6 +6,7 @@ include Config.x86_common
 # you have the SDK available.
 MIN_VER = -mmacosx-version-min=10.6
 
+CFLAGS += $(COPT)
 CPPFLAGS += -DDARWIN $(MIN_VER) -m32
 CFLAGS += -g3 -mtune=generic
 ASFLAGS += -g3 $(MIN_VER)
diff --git a/src/lisp/Config.x86_linux b/src/lisp/Config.x86_linux
index 457a24a34..b99168394 100644
--- a/src/lisp/Config.x86_linux
+++ b/src/lisp/Config.x86_linux
@@ -1,6 +1,10 @@
 # -*- Mode: makefile -*-
 include Config.x86_common
 
+# gcc 8.1.1 and 8.3.1 (and probably anything after 8.1.1?) won't
+# produce a working lisp with -O2.  Just use -O1.
+COPT = -O1
+CFLAGS += $(COPT)
 CPPFLAGS += -m32 -D__NO_CTYPE -D_GNU_SOURCE
 CFLAGS += -rdynamic  -march=pentium4 -mfpmath=sse -mtune=generic
 
diff --git a/src/lisp/Config.x86_linux_clang b/src/lisp/Config.x86_linux_clang
index cbfb4306a..df4708222 100644
--- a/src/lisp/Config.x86_linux_clang
+++ b/src/lisp/Config.x86_linux_clang
@@ -3,6 +3,7 @@ include Config.x86_common
 
 CC = clang
 CPPFLAGS += -m32 -D__NO_CTYPE -D_GNU_SOURCE
+CFLAGS += $(COPT)
 CFLAGS += -march=pentium4 -mfpmath=sse -mtune=generic
 
 UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
diff --git a/src/lisp/Config.x86_netbsd b/src/lisp/Config.x86_netbsd
index beb93c23d..529b057a0 100644
--- a/src/lisp/Config.x86_netbsd
+++ b/src/lisp/Config.x86_netbsd
@@ -1,6 +1,7 @@
 # -*- Mode: makefile -*-
 include Config.x86_common
 
+CFLAGS += $(COPT)
 CPPFLAGS += -march=pentium4 -mfpmath=sse
 
 UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
diff --git a/src/lisp/Config.x86_solaris_sunc b/src/lisp/Config.x86_solaris_sunc
index 0c137ae4f..b2c623955 100644
--- a/src/lisp/Config.x86_solaris_sunc
+++ b/src/lisp/Config.x86_solaris_sunc
@@ -2,6 +2,7 @@
 include Config.sparc_common
 
 CC = cc -xlibmieee -g
+CFLAGS += $(COPT)
 CFLAGS += -Di386
 CPP = cc -E
 DEPEND_FLAGS = -xM1
-- 
GitLab