aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorRupert Swarbrick <rswarbrick@lowrisc.org>2020-02-27 13:20:41 +0000
committerChih-Min Chao <chihmin.chao@sifive.com>2020-03-03 22:48:23 -0800
commitf281edfa38264c4435396ce4e80eb69a295356cf (patch)
treec0b85a58342bc34a91923a22572d6ff1ef77a8d4 /configure.ac
parent4d72b9b5eeb34bd99272f231cf653602d9ded10d (diff)
downloadspike-f281edfa38264c4435396ce4e80eb69a295356cf.zip
spike-f281edfa38264c4435396ce4e80eb69a295356cf.tar.gz
spike-f281edfa38264c4435396ce4e80eb69a295356cf.tar.bz2
Allow overriding CFLAGS and similar when building
Before this patch, I don't think it was possible to change (say) CFLAGS as part of running the make command. Nor did setting them when running configure do anything. Getting this right is a little fiddly: for example, see Automake's approach at [1] ("AM_CFLAGS" and friends). This patch adds an "mcppbs-" prefix, and sets things up properly for CFLAGS, CPPFLAGS, CXXFLAGS and LDFLAGS. Note that the bulk of the patch is either the auto-generated configure script or the ax_*.m4 files vendored in from the autoconf archive (needed to handle --export-dynamic correctly without trashing settings from the user running configure). What's supposed to happen is as follows: - Base compilation flags that should apply to everything (standard optimisation flags, warning flags etc.) are defined in Makefile.in. - When the user runs configure, they can set compilation flags on the command line. These end up as environment variables in the shell script. - Compilation flags that can only be decided when we run configure (this is currently just whether we support -Wl,--export-dynamic) are appended to the configure-time LDFLAGS environment variable. - At the end of the configure script, these environment variables are spliced into Makefile.in to fill out the corresponding @<varname>@ entries. - When running make, the user might again override compilation flags. These will get appended to the flags found so far. As a concrete example: mkdir build cd build ../configure CXXFLAGS='-O3' make CXXFLAGS='-O0' will result in c++ compile commands that look like this: g++ -MMD -MP \ -DPREFIX=\"/usr/local\" -Wall -Wno-unused -g -O2 -std=c++11 \ -O3 \ -O0 \ -I. -I.. -I../fesvr -I../riscv -I../dummy_rocc -I../softfloat \ -I../spike_main -fPIC -c ../fesvr/elfloader.cc (I've added some newlines to wrap the long line). Note that we have the base flags from Makefile.in (called $(default-CXXFLAGS) there) first. Then we have the -O3 from the configure command. Finally we have the -O0 from the Make command line. And I can finally run "make CXXFLAGS='-O0 -g3'". Phew! [1] https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac7
1 files changed, 4 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index a6f52d8..49e2e0d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,7 +43,10 @@ AC_CONFIG_AUX_DIR([scripts])
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
+m4_include(ax_require_defined.m4)
+m4_include(ax_append_flag.m4)
m4_include(ax_check_link_flag.m4)
+m4_include(ax_append_link_flags.m4)
#-------------------------------------------------------------------------
# Checks for programs
@@ -84,9 +87,7 @@ AC_CHECK_TYPE([__int128_t], AC_SUBST([HAVE_INT128],[yes]))
# Default compiler flags
#-------------------------------------------------------------------------
-AC_SUBST([CFLAGS], ["-Wall -Wno-unused -g -O2"])
-AC_SUBST([CXXFLAGS],["-Wall -Wno-unused -g -O2 -std=c++11"])
-AX_CHECK_LINK_FLAG([-Wl,--export-dynamic], [LDFLAGS="-Wl,--export-dynamic"])
+AX_APPEND_LINK_FLAGS([-Wl,--export-dynamic])
#-------------------------------------------------------------------------
# MCPPBS subproject list