forked from riscv-software-src/riscv-isa-sim
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
1 parent
157143b
commit 2efea60
Showing
6 changed files
with
325 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# =========================================================================== | ||
# https://www.gnu.org/software/autoconf-archive/ax_append_flag.html | ||
# =========================================================================== | ||
# | ||
# SYNOPSIS | ||
# | ||
# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) | ||
# | ||
# DESCRIPTION | ||
# | ||
# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space | ||
# added in between. | ||
# | ||
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. | ||
# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains | ||
# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly | ||
# FLAG. | ||
# | ||
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. | ||
# | ||
# LICENSE | ||
# | ||
# Copyright (c) 2008 Guido U. Draheim <[email protected]> | ||
# Copyright (c) 2011 Maarten Bosmans <[email protected]> | ||
# | ||
# Copying and distribution of this file, with or without modification, are | ||
# permitted in any medium without royalty provided the copyright notice | ||
# and this notice are preserved. This file is offered as-is, without any | ||
# warranty. | ||
|
||
#serial 8 | ||
|
||
AC_DEFUN([AX_APPEND_FLAG], | ||
[dnl | ||
AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF | ||
AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) | ||
AS_VAR_SET_IF(FLAGS,[ | ||
AS_CASE([" AS_VAR_GET(FLAGS) "], | ||
[*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], | ||
[ | ||
AS_VAR_APPEND(FLAGS,[" $1"]) | ||
AC_RUN_LOG([: FLAGS="$FLAGS"]) | ||
]) | ||
], | ||
[ | ||
AS_VAR_SET(FLAGS,[$1]) | ||
AC_RUN_LOG([: FLAGS="$FLAGS"]) | ||
]) | ||
AS_VAR_POPDEF([FLAGS])dnl | ||
])dnl AX_APPEND_FLAG |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# =========================================================================== | ||
# https://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html | ||
# =========================================================================== | ||
# | ||
# SYNOPSIS | ||
# | ||
# AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) | ||
# | ||
# DESCRIPTION | ||
# | ||
# For every FLAG1, FLAG2 it is checked whether the linker works with the | ||
# flag. If it does, the flag is added FLAGS-VARIABLE | ||
# | ||
# If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is | ||
# used. During the check the flag is always added to the linker's flags. | ||
# | ||
# If EXTRA-FLAGS is defined, it is added to the linker's default flags | ||
# when the check is done. The check is thus made with the flags: "LDFLAGS | ||
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to | ||
# issue an error when a bad flag is given. | ||
# | ||
# INPUT gives an alternative input source to AC_COMPILE_IFELSE. | ||
# | ||
# NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG. | ||
# Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS. | ||
# | ||
# LICENSE | ||
# | ||
# Copyright (c) 2011 Maarten Bosmans <[email protected]> | ||
# | ||
# Copying and distribution of this file, with or without modification, are | ||
# permitted in any medium without royalty provided the copyright notice | ||
# and this notice are preserved. This file is offered as-is, without any | ||
# warranty. | ||
|
||
#serial 7 | ||
|
||
AC_DEFUN([AX_APPEND_LINK_FLAGS], | ||
[AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) | ||
AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) | ||
for flag in $1; do | ||
AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3], [$4]) | ||
done | ||
])dnl AX_APPEND_LINK_FLAGS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# =========================================================================== | ||
# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html | ||
# =========================================================================== | ||
# | ||
# SYNOPSIS | ||
# | ||
# AX_REQUIRE_DEFINED(MACRO) | ||
# | ||
# DESCRIPTION | ||
# | ||
# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have | ||
# been defined and thus are available for use. This avoids random issues | ||
# where a macro isn't expanded. Instead the configure script emits a | ||
# non-fatal: | ||
# | ||
# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found | ||
# | ||
# It's like AC_REQUIRE except it doesn't expand the required macro. | ||
# | ||
# Here's an example: | ||
# | ||
# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) | ||
# | ||
# LICENSE | ||
# | ||
# Copyright (c) 2014 Mike Frysinger <[email protected]> | ||
# | ||
# Copying and distribution of this file, with or without modification, are | ||
# permitted in any medium without royalty provided the copyright notice | ||
# and this notice are preserved. This file is offered as-is, without any | ||
# warranty. | ||
|
||
#serial 2 | ||
|
||
AC_DEFUN([AX_REQUIRE_DEFINED], [dnl | ||
m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) | ||
])dnl AX_REQUIRE_DEFINED |
Oops, something went wrong.