* [PATCH 1/4] configure: cleanup invocation of submodule Make
2020-09-20 9:30 [PATCH 0/4] configure: bugfixes and cleanups for CFLAGS Paolo Bonzini
@ 2020-09-20 9:30 ` Paolo Bonzini
2020-09-20 23:00 ` Richard Henderson
2020-09-20 9:30 ` [PATCH 2/4] configure: cleanup CFLAGS and LDFLAGS for submodules Paolo Bonzini
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2020-09-20 9:30 UTC (permalink / raw)
To: qemu-devel
Move common command line options to SUBDIR_MAKEFLAGS, thus simplifying
the rules themselves.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index 897246d77c..57fb63832f 100644
--- a/Makefile
+++ b/Makefile
@@ -137,7 +137,12 @@ configure: ;
.PHONY: all clean distclean install \
recurse-all dist msi FORCE
-SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet)
+SUBMODULE_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS)
+SUBDIR_MAKEFLAGS = $(if $(V),,--no-print-directory --quiet) \
+ PKG_CONFIG="$(PKG_CONFIG)" \
+ CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
+ CFLAGS="$(SUBMODULE_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" \
+ ARFLAGS="$(ARFLAGS)"
include $(SRC_PATH)/tests/Makefile.include
@@ -146,12 +151,12 @@ Makefile: $(addsuffix /all, $(SUBDIRS))
# LIBFDT_lib="": avoid breaking existing trees with objects requiring -fPIC
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_lib=""
-DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(SRC_PATH)/dtc/libfdt
.PHONY: dtc/all
dtc/all: .git-submodule-status dtc/libfdt
- $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt,)
+ $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) \
+ CPPFLAGS="$(DTC_CPPFLAGS)" $(SUBDIR_MAKEFLAGS) libfdt,)
dtc/%: .git-submodule-status
@mkdir -p $@
@@ -161,7 +166,7 @@ dtc/%: .git-submodule-status
# Therefore we replicate some of the logic in the sub-makefile.
# Remove all the extra -Warning flags that QEMU uses that Capstone doesn't;
# no need to annoy QEMU developers with such things.
-CAP_CFLAGS = $(patsubst -W%,,$(CFLAGS) $(QEMU_CFLAGS)) $(CAPSTONE_CFLAGS)
+CAP_CFLAGS := $(patsubst -W%,,$(SUBMODULE_CFLAGS)) $(CAPSTONE_CFLAGS)
CAP_CFLAGS += -DCAPSTONE_USE_SYS_DYN_MEM
CAP_CFLAGS += -DCAPSTONE_HAS_ARM
CAP_CFLAGS += -DCAPSTONE_HAS_ARM64
@@ -169,16 +174,17 @@ CAP_CFLAGS += -DCAPSTONE_HAS_POWERPC
CAP_CFLAGS += -DCAPSTONE_HAS_X86
.PHONY: capstone/all
+capstone/all: SUBMODULE_CFLAGS = $(CAP_CFLAGS)
capstone/all: .git-submodule-status
- $(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))
+ $(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone \
+ CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" \
+ $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))
.PHONY: slirp/all
slirp/all: .git-submodule-status
$(call quiet-command,$(MAKE) -C $(SRC_PATH)/slirp \
- BUILD_DIR="$(BUILD_DIR)/slirp" \
- PKG_CONFIG="$(PKG_CONFIG)" \
- CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
- CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)")
+ BUILD_DIR="$(BUILD_DIR)/slirp" \
+ $(SUBDIR_MAKEFLAGS))
ROM_DIRS = $(addprefix pc-bios/, $(ROMS))
ROM_DIRS_RULES=$(foreach t, all clean, $(addsuffix /$(t), $(ROM_DIRS)))
--
2.26.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] configure: cleanup CFLAGS and LDFLAGS for submodules
2020-09-20 9:30 [PATCH 0/4] configure: bugfixes and cleanups for CFLAGS Paolo Bonzini
2020-09-20 9:30 ` [PATCH 1/4] configure: cleanup invocation of submodule Make Paolo Bonzini
@ 2020-09-20 9:30 ` Paolo Bonzini
2020-09-20 23:10 ` Richard Henderson
2020-09-20 9:30 ` [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS Paolo Bonzini
2020-09-20 9:30 ` [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson Paolo Bonzini
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2020-09-20 9:30 UTC (permalink / raw)
To: qemu-devel
The -g and -O2 flags that configure adds to CFLAGS are only used by submodules,
so do not put anymore the confusing CFLAGS variable in config-host.mak and
replace it with more explicit SUBMODULE_CFLAGS variable.
There was also no equivalent SUBMODULE_LDFLAGS variable, add it. This would
theoretically help with LTO if we want -g and -O2 options on the command line.
I say "theoretically" because submodules should not be linking anything; but
since we were passing an "LD" variable we might as well get its flags right.
CFLAGS are now synthesized in the configuration summary as a quick way to present
--enable-debug and --enable-debug-info.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile | 3 +--
configure | 13 +++++++++----
meson.build | 3 ++-
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index 57fb63832f..3367ca520c 100644
--- a/Makefile
+++ b/Makefile
@@ -137,11 +137,10 @@ configure: ;
.PHONY: all clean distclean install \
recurse-all dist msi FORCE
-SUBMODULE_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS)
SUBDIR_MAKEFLAGS = $(if $(V),,--no-print-directory --quiet) \
PKG_CONFIG="$(PKG_CONFIG)" \
CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
- CFLAGS="$(SUBMODULE_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" \
+ CFLAGS="$(SUBMODULE_CFLAGS)" LDFLAGS="$(SUBMODULE_LDFLAGS)" \
ARFLAGS="$(ARFLAGS)"
include $(SRC_PATH)/tests/Makefile.include
diff --git a/configure b/configure
index ffc28e392f..5fabc77fb3 100755
--- a/configure
+++ b/configure
@@ -6108,12 +6108,16 @@ elif test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
debug=no
fi
+
+SUBMODULE_CFLAGS=-Wall
+SUBMODULE_LDFLAGS=
if test "$debug_info" = "yes"; then
- CFLAGS="-g $CFLAGS"
- LDFLAGS="-g $LDFLAGS"
+ SUBMODULE_CFLAGS="$SUBMODULE_CFLAGS -g"
+ SUBMODULE_LDFLAGS="$SUBMODULE_LDFLAGS -g"
fi
if test "$debug" = "no"; then
- CFLAGS="-O2 $CFLAGS"
+ SUBMODULE_CFLAGS="$SUBMODULE_CFLAGS -O2"
+ SUBMODULE_LDFLAGS="$SUBMODULE_LDFLAGS -O2"
fi
case "$ARCH" in
@@ -7288,7 +7292,8 @@ echo "RANLIB=$ranlib" >> $config_host_mak
echo "NM=$nm" >> $config_host_mak
echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
echo "WINDRES=$windres" >> $config_host_mak
-echo "CFLAGS=$CFLAGS" >> $config_host_mak
+echo "SUBMODULE_CFLAGS=$CFLAGS \$(QEMU_CFLAGS) $SUBMODULE_CFLAGS" >> $config_host_mak
+echo "SUBMODULE_LDFLAGS=$LDFLAGS \$(QEMU_LDFLAGS) $SUBMODULE_LDFLAGS" >> $config_host_mak
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 1b1cde8725..1099f2a87c 100644
--- a/meson.build
+++ b/meson.build
@@ -1476,7 +1476,8 @@ if targetos == 'darwin'
summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
endif
summary_info += {'ARFLAGS': config_host['ARFLAGS']}
-summary_info += {'CFLAGS': config_host['CFLAGS']}
+summary_info += {'CFLAGS': '-O' + get_option('optimization')
+ + (get_option('debug') ? ' -g' : '')}
summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
summary_info += {'make': config_host['MAKE']}
--
2.26.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] configure: cleanup CFLAGS and LDFLAGS for submodules
2020-09-20 9:30 ` [PATCH 2/4] configure: cleanup CFLAGS and LDFLAGS for submodules Paolo Bonzini
@ 2020-09-20 23:10 ` Richard Henderson
0 siblings, 0 replies; 10+ messages in thread
From: Richard Henderson @ 2020-09-20 23:10 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 9/20/20 2:30 AM, Paolo Bonzini wrote:
> The -g and -O2 flags that configure adds to CFLAGS are only used by submodules,
> so do not put anymore the confusing CFLAGS variable in config-host.mak and
> replace it with more explicit SUBMODULE_CFLAGS variable.
>
> There was also no equivalent SUBMODULE_LDFLAGS variable, add it. This would
> theoretically help with LTO if we want -g and -O2 options on the command line.
> I say "theoretically" because submodules should not be linking anything; but
> since we were passing an "LD" variable we might as well get its flags right.
>
> CFLAGS are now synthesized in the configuration summary as a quick way to present
> --enable-debug and --enable-debug-info.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS
2020-09-20 9:30 [PATCH 0/4] configure: bugfixes and cleanups for CFLAGS Paolo Bonzini
2020-09-20 9:30 ` [PATCH 1/4] configure: cleanup invocation of submodule Make Paolo Bonzini
2020-09-20 9:30 ` [PATCH 2/4] configure: cleanup CFLAGS and LDFLAGS for submodules Paolo Bonzini
@ 2020-09-20 9:30 ` Paolo Bonzini
2020-09-20 23:20 ` Richard Henderson
2020-09-20 9:30 ` [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson Paolo Bonzini
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2020-09-20 9:30 UTC (permalink / raw)
To: qemu-devel
If the CFLAGS, CXXFLAGS or LDFLAGS variables are present in the environment,
any modification made within the configure script is passed down to Meson.
This is particularly undesirable for the "-pie" option, since it overrides
"-shared" and thus messes up the linker flags for shared modules.
Using a separate variable therefore fixes the bug, while clarifying that
the scope of these CFLAGS is just the configure script.
Reported-by: Frederic Bezies
Analyzed-by: Toolybird
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index 5fabc77fb3..9a0bbd2a69 100755
--- a/configure
+++ b/configure
@@ -155,7 +155,7 @@ update_cxxflags() {
# options which some versions of GCC's C++ compiler complain about
# because they only make sense for C programs.
QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
- CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
+ CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
for arg in $QEMU_CFLAGS; do
case $arg in
-Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
@@ -170,13 +170,14 @@ update_cxxflags() {
compile_object() {
local_cflags="$1"
- do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
+ do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
}
compile_prog() {
local_cflags="$1"
local_ldflags="$2"
- do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
+ do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
+ $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
}
# symbolically link $1 to $2. Portable version of "ln -sf".
@@ -632,7 +633,10 @@ QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
-CFLAGS="-std=gnu99 -Wall"
+
+# Flags that are needed during configure but later taken care of by Meson
+CONFIGURE_CFLAGS="-std=gnu99 -Wall"
+CONFIGURE_LDFLAGS=
check_define() {
@@ -960,7 +964,7 @@ if test "$mingw32" = "yes" ; then
EXESUF=".exe"
HOST_DSOSUF=".dll"
# MinGW needs -mthreads for TLS and macro _MT.
- CFLAGS="-mthreads $CFLAGS"
+ CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
write_c_skeleton;
prefix="/qemu"
qemu_suffix=""
@@ -2230,7 +2234,7 @@ fi
if test "$static" = "yes"; then
if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
- CFLAGS="-fPIE -DPIE $CFLAGS"
+ CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
@@ -2240,11 +2244,11 @@ if test "$static" = "yes"; then
pie="no"
fi
elif test "$pie" = "no"; then
- CFLAGS="$CFLAGS_NOPIE $CFLAGS"
- LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
+ CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
+ CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
- CFLAGS="-fPIE -DPIE $CFLAGS"
- LDFLAGS="-pie $LDFLAGS"
+ CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
+ CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
error_exit "PIE not available due to missing toolchain support"
@@ -3808,7 +3812,7 @@ EOF
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
if cc_has_warning_flag "-Wno-unknown-attributes"; then
glib_cflags="-Wno-unknown-attributes $glib_cflags"
- CFLAGS="-Wno-unknown-attributes $CFLAGS"
+ CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
fi
fi
@@ -3828,7 +3832,7 @@ EOF
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
if cc_has_warning_flag "-Wno-unused-function"; then
glib_cflags="$glib_cflags -Wno-unused-function"
- CFLAGS="$CFLAGS -Wno-unused-function"
+ CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
fi
fi
@@ -6359,7 +6363,7 @@ EOF
update_cxxflags
- if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
+ if do_cxx $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
# C++ compiler $cxx works ok with C compiler $cc
:
else
--
2.26.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS
2020-09-20 9:30 ` [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS Paolo Bonzini
@ 2020-09-20 23:20 ` Richard Henderson
0 siblings, 0 replies; 10+ messages in thread
From: Richard Henderson @ 2020-09-20 23:20 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 9/20/20 2:30 AM, Paolo Bonzini wrote:
> If the CFLAGS, CXXFLAGS or LDFLAGS variables are present in the environment,
> any modification made within the configure script is passed down to Meson.
> This is particularly undesirable for the "-pie" option, since it overrides
> "-shared" and thus messes up the linker flags for shared modules.
>
> Using a separate variable therefore fixes the bug, while clarifying that
> the scope of these CFLAGS is just the configure script.
>
> Reported-by: Frederic Bezies
> Analyzed-by: Toolybird
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson
2020-09-20 9:30 [PATCH 0/4] configure: bugfixes and cleanups for CFLAGS Paolo Bonzini
` (2 preceding siblings ...)
2020-09-20 9:30 ` [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS Paolo Bonzini
@ 2020-09-20 9:30 ` Paolo Bonzini
2020-09-20 23:52 ` Richard Henderson
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2020-09-20 9:30 UTC (permalink / raw)
To: qemu-devel
Environment variables like CFLAGS are easy to accidentally change. Meson
warns if that happens, but in a project with a lot of configuration that
is easy to lose. It is also surprising behavior since meson caches -D
options and remembers those on reconfiguration (which we rely on,
since configure options become -D options).
By placing the user-provided CFLAGS, CXXFLAGS and LDFLAGS in the
cross file, we at least get consistent behavior. These environment
variables are still ugly and not really recommended, but there are
distros that rely on them. For the gory details, refer to
https://github.com/mesonbuild/meson/issues/4664.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ++++
meson.build | 14 ++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index 9a0bbd2a69..952a7479ab 100755
--- a/configure
+++ b/configure
@@ -7794,6 +7794,10 @@ meson_quote() {
echo "# Automatically generated by configure - do not modify" > $cross
echo "[properties]" >> $cross
test -z "$cxx" && echo "link_language = 'c'" >> $cross
+echo "c_args = $(meson_quote $CFLAGS)" >> $cross
+echo "cpp_args = $(meson_quote $CXXFLAGS)" >> $cross
+echo "c_link_args = $(meson_quote $LDFLAGS)" >> $cross
+echo "cpp_link_args = $(meson_quote $LDFLAGS)" >> $cross
echo "[binaries]" >> $cross
echo "c = $(meson_quote $cc)" >> $cross
test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
diff --git a/meson.build b/meson.build
index 1099f2a87c..4d6ef64adf 100644
--- a/meson.build
+++ b/meson.build
@@ -1476,8 +1476,18 @@ if targetos == 'darwin'
summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
endif
summary_info += {'ARFLAGS': config_host['ARFLAGS']}
-summary_info += {'CFLAGS': '-O' + get_option('optimization')
- + (get_option('debug') ? ' -g' : '')}
+summary_info += {'CFLAGS': ' '.join(get_option('c_args')
+ + ['-O' + get_option('optimization')]
+ + (get_option('debug') ? ['-g'] : []))}
+if link_language == 'cpp'
+ summary_info += {'CXXFLAGS': ' '.join(get_option('cpp_args')
+ + ['-O' + get_option('optimization')]
+ + (get_option('debug') ? ['-g'] : []))}
+endif
+link_args = get_option(link_language + '_link_args')
+if link_args.length() > 0
+ summary_info += {'LDFLAGS': ' '.join(link_args)}
+endif
summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
summary_info += {'make': config_host['MAKE']}
--
2.26.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson
2020-09-20 9:30 ` [PATCH 4/4] configure: consistently pass CFLAGS/CXXFLAGS/LDFLAGS to meson Paolo Bonzini
@ 2020-09-20 23:52 ` Richard Henderson
0 siblings, 0 replies; 10+ messages in thread
From: Richard Henderson @ 2020-09-20 23:52 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 9/20/20 2:30 AM, Paolo Bonzini wrote:
> Environment variables like CFLAGS are easy to accidentally change. Meson
> warns if that happens, but in a project with a lot of configuration that
> is easy to lose. It is also surprising behavior since meson caches -D
> options and remembers those on reconfiguration (which we rely on,
> since configure options become -D options).
>
> By placing the user-provided CFLAGS, CXXFLAGS and LDFLAGS in the
> cross file, we at least get consistent behavior. These environment
> variables are still ugly and not really recommended, but there are
> distros that rely on them. For the gory details, refer to
> https://github.com/mesonbuild/meson/issues/4664.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 4 ++++
> meson.build | 14 ++++++++++++--
> 2 files changed, 16 insertions(+), 2 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] configure: do not clobber environment CFLAGS/CXXFLAGS/LDFLAGS
2020-10-05 13:56 [PATCH 0/4] Convert remaining submodules to meson, cleanup env var handling Paolo Bonzini
@ 2020-10-05 13:56 ` Paolo Bonzini
0 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2020-10-05 13:56 UTC (permalink / raw)
To: qemu-devel; +Cc: marcandre.lureau, richard.henderson
If the CFLAGS, CXXFLAGS or LDFLAGS variables are present in the environment,
any modification made within the configure script is passed down to Meson.
This is particularly undesirable for the "-pie" option, since it overrides
"-shared" and thus messes up the linker flags for shared modules.
Using a separate variable therefore fixes the bug, while clarifying that
the scope of these CFLAGS is just the configure script.
We also do not need to pass those variables in config-host.mak; they
were only used for printing the summary now that all submodules are
built with handwritten Meson rules). For now synthesize CFLAGS in the
configuration summary, the next patch will also pass them in a cleaner
way using the cross file.
Reported-by: Frederic Bezies
Analyzed-by: Toolybird
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200923092617.1593722-4-pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 38 +++++++++++++++++---------------------
meson.build | 3 ++-
2 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/configure b/configure
index 2fdb4339e8..1b173276ea 100755
--- a/configure
+++ b/configure
@@ -155,7 +155,7 @@ update_cxxflags() {
# options which some versions of GCC's C++ compiler complain about
# because they only make sense for C programs.
QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
- CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
+ CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
for arg in $QEMU_CFLAGS; do
case $arg in
-Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
@@ -170,13 +170,14 @@ update_cxxflags() {
compile_object() {
local_cflags="$1"
- do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
+ do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
}
compile_prog() {
local_cflags="$1"
local_ldflags="$2"
- do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
+ do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
+ $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
}
# symbolically link $1 to $2. Portable version of "ln -sf".
@@ -537,7 +538,10 @@ QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
-CFLAGS="-std=gnu99 -Wall"
+
+# Flags that are needed during configure but later taken care of by Meson
+CONFIGURE_CFLAGS="-std=gnu99 -Wall"
+CONFIGURE_LDFLAGS=
check_define() {
@@ -851,7 +855,7 @@ if test "$mingw32" = "yes" ; then
EXESUF=".exe"
HOST_DSOSUF=".dll"
# MinGW needs -mthreads for TLS and macro _MT.
- CFLAGS="-mthreads $CFLAGS"
+ CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
write_c_skeleton;
prefix="/qemu"
qemu_suffix=""
@@ -2109,7 +2113,7 @@ fi
if test "$static" = "yes"; then
if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
- CFLAGS="-fPIE -DPIE $CFLAGS"
+ CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
@@ -2119,11 +2123,11 @@ if test "$static" = "yes"; then
pie="no"
fi
elif test "$pie" = "no"; then
- CFLAGS="$CFLAGS_NOPIE $CFLAGS"
- LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
+ CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
+ CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
- CFLAGS="-fPIE -DPIE $CFLAGS"
- LDFLAGS="-pie $LDFLAGS"
+ CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
+ CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
error_exit "PIE not available due to missing toolchain support"
@@ -3667,7 +3671,7 @@ EOF
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
if cc_has_warning_flag "-Wno-unknown-attributes"; then
glib_cflags="-Wno-unknown-attributes $glib_cflags"
- CFLAGS="-Wno-unknown-attributes $CFLAGS"
+ CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
fi
fi
@@ -3687,7 +3691,7 @@ EOF
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
if cc_has_warning_flag "-Wno-unused-function"; then
glib_cflags="$glib_cflags -Wno-unused-function"
- CFLAGS="$CFLAGS -Wno-unused-function"
+ CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
fi
fi
@@ -5814,13 +5818,6 @@ elif test "$fortify_source" = "yes" ; then
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
debug=no
fi
-if test "$debug_info" = "yes"; then
- CFLAGS="-g $CFLAGS"
- LDFLAGS="-g $LDFLAGS"
-fi
-if test "$debug" = "no"; then
- CFLAGS="-O2 $CFLAGS"
-fi
case "$ARCH" in
alpha)
@@ -6043,7 +6040,7 @@ EOF
update_cxxflags
- if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
+ if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
# C++ compiler $cxx works ok with C compiler $cc
:
else
@@ -6953,7 +6950,6 @@ echo "RANLIB=$ranlib" >> $config_host_mak
echo "NM=$nm" >> $config_host_mak
echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
echo "WINDRES=$windres" >> $config_host_mak
-echo "CFLAGS=$CFLAGS" >> $config_host_mak
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 426b73d31f..d9377f371d 100644
--- a/meson.build
+++ b/meson.build
@@ -1758,7 +1758,8 @@ if targetos == 'darwin'
summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
endif
summary_info += {'ARFLAGS': config_host['ARFLAGS']}
-summary_info += {'CFLAGS': config_host['CFLAGS']}
+summary_info += {'CFLAGS': '-O' + get_option('optimization')
+ + (get_option('debug') ? ' -g' : '')}
summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
summary_info += {'make': config_host['MAKE']}
--
2.26.2
^ permalink raw reply related [flat|nested] 10+ messages in thread