Message ID | CALfaEa0MirxK6ESnepptGLiugYZBOSQVxe=R72h+c_-GBXkYzQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
Adding Peter Maydell in the cc and removing Claudio Fontana (It fails sending to that address) Bruno. 2017-06-02 14:07 GMT+01:00 Bruno Dominguez <bru.dominguez@gmail.com>: > There was no possibility to add specific cxx flags using the configure > file. So A new entrance has been created to support it. > > Duplication of information in configure and rules.mak. Taking > QEMU_CFLAGS and add them to QEMU_CXXFLAGS, now the value of > QEMU_CXXFLAGS is stored in config-host.mak, so there is no need for > it. > > The makefile for libvixl was adding flags for QEMU_CXXFLAGS in > QEMU_CFLAGS because of the addition in rules.mak. That was removed, so > adding them where it should be. > > ----- > Signed-off-by: Bruno Dominguez <bru.dominguez@gmail.com> > ----- > > diff --git a/configure b/configure > index 0586ec9..2fff3cc 100755 > --- a/configure > +++ b/configure > @@ -91,7 +91,8 @@ update_cxxflags() { > # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those > # options which some versions of GCC's C++ compiler complain about > # because they only make sense for C programs. > - QEMU_CXXFLAGS= > + QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS" > + > for arg in $QEMU_CFLAGS; do > case $arg in > -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ > @@ -102,6 +103,8 @@ update_cxxflags() { > ;; > esac > done > + > + > } > > compile_object() { > @@ -344,6 +347,9 @@ for opt do > --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" > EXTRA_CFLAGS="$optarg" > ;; > + --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" > + EXTRA_CXXFLAGS="$optarg" > + ;; > --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg" > EXTRA_LDFLAGS="$optarg" > ;; > @@ -787,6 +793,8 @@ for opt do > ;; > --extra-cflags=*) > ;; > + --extra-cxxflags=*) > + ;; > --extra-ldflags=*) > ;; > --enable-debug-info) > @@ -1304,6 +1312,7 @@ Advanced options (experts only): > --cxx=CXX use C++ compiler CXX [$cxx] > --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] > --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS > + --extra-cxxflags=CXXFLAGS append extra CXX compiler flags QEMU_CXXFLAGS > --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS > --make=MAKE use specified make [$make] > --install=INSTALL use specified install [$install] > @@ -1489,37 +1498,6 @@ if test "$bogus_os" = "yes"; then > error_exit "Unrecognized host OS $targetos" > fi > > -# Check that the C++ compiler exists and works with the C compiler > -if has $cxx; then > - cat > $TMPC <<EOF > -int c_function(void); > -int main(void) { return c_function(); } > -EOF > - > - compile_object > - > - cat > $TMPCXX <<EOF > -extern "C" { > - int c_function(void); > -} > -int c_function(void) { return 42; } > -EOF > - > - update_cxxflags > - > - if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then > - # C++ compiler $cxx works ok with C compiler $cc > - : > - else > - echo "C++ compiler $cxx does not work with C compiler $cc" > - echo "Disabling C++ specific optional code" > - cxx= > - fi > -else > - echo "No C++ compiler available; disabling C++ specific optional code" > - cxx= > -fi > - > gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" > gcc_flags="-Wformat-security -Wformat-y2k -Winit-self > -Wignored-qualifiers $gcc_flags" > gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" > @@ -5063,6 +5041,38 @@ EOF > fi > fi > > +# Check that the C++ compiler exists and works with the C compiler. > +# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the > end to don't miss any other that could be added. > +if has $cxx; then > + cat > $TMPC <<EOF > +int c_function(void); > +int main(void) { return c_function(); } > +EOF > + > + compile_object > + > + cat > $TMPCXX <<EOF > +extern "C" { > + int c_function(void); > +} > +int c_function(void) { return 42; } > +EOF > + > + update_cxxflags > + > + if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then > + # C++ compiler $cxx works ok with C compiler $cc > + : > + else > + echo "C++ compiler $cxx does not work with C compiler $cc" > + echo "Disabling C++ specific optional code" > + cxx= > + fi > +else > + echo "No C++ compiler available; disabling C++ specific optional code" > + cxx= > +fi > + > echo_version() { > if test "$1" = "yes" ; then > echo "($2)" > @@ -5268,6 +5278,7 @@ if test "$mingw32" = "no" ; then > fi > echo "qemu_helperdir=$libexecdir" >> $config_host_mak > echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak > +echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak > echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak > echo "qemu_localedir=$qemu_localedir" >> $config_host_mak > echo "libs_softmmu=$libs_softmmu" >> $config_host_mak > @@ -5906,6 +5917,7 @@ 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 > echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak > if test "$sparse" = "yes" ; then > echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak > diff --git a/disas/libvixl/Makefile.objs b/disas/libvixl/Makefile.objs > index bbe7695..dbf7def 100644 > --- a/disas/libvixl/Makefile.objs > +++ b/disas/libvixl/Makefile.objs > @@ -6,6 +6,6 @@ libvixl_OBJS = vixl/utils.o \ > > # The -Wno-sign-compare is needed only for gcc 4.6, which complains about > # some signed-unsigned equality comparisons which later gcc versions do not. > -$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CFLAGS := > -I$(SRC_PATH)/disas/libvixl $(QEMU_CFLAGS) -Wno-sign-compare > +$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CXXFLAGS := > -I$(SRC_PATH)/disas/libvixl $(QEMU_CXXFLAGS) -Wno-sign-compare > > common-obj-$(CONFIG_ARM_A64_DIS) += $(libvixl_OBJS) > diff --git a/rules.mak b/rules.mak > index 1c0eabb..2a2fb72 100644 > --- a/rules.mak > +++ b/rules.mak > @@ -20,9 +20,6 @@ MAKEFLAGS += -rR > %.mak: > clean-target: > > -# Flags for C++ compilation > -QEMU_CXXFLAGS = -D__STDC_LIMIT_MACROS $(filter-out > -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs > -Wold-style-declaration -Wold-style-definition -Wredundant-decls, > $(QEMU_CFLAGS)) > - > # Flags for dependency generation > QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d > > > Bruno
On Fri, Jun 02, 2017 at 02:07:26PM +0100, Bruno Dominguez wrote: > There was no possibility to add specific cxx flags using the configure > file. So A new entrance has been created to support it. > > Duplication of information in configure and rules.mak. Taking > QEMU_CFLAGS and add them to QEMU_CXXFLAGS, now the value of > QEMU_CXXFLAGS is stored in config-host.mak, so there is no need for > it. > > The makefile for libvixl was adding flags for QEMU_CXXFLAGS in > QEMU_CFLAGS because of the addition in rules.mak. That was removed, so > adding them where it should be. > > ----- > Signed-off-by: Bruno Dominguez <bru.dominguez@gmail.com> > ----- Please follow the code submission guidelines: http://wiki.qemu.org/Contribute/SubmitAPatch * The commit message (email subject) should have a prefix describing the affected component. Use "git log ./configure" for inspiration. I suggest the following: configure: split c and cxx extra flags * Use git-format-patch(1) so that your patch applies cleanly. Your email has: ---- Signed-off-by: ... ---- This is not the format recognized by tools. Instead the Signed-off-by: should be part of the commit description (no '----') and then a line with just three hyphens ('---') denotes the end of the commit description: Signed-off-by: ... --- * The email must not be line-wrapped since that breaks the patch. If you use git-send-email(1) to submit patches then this is taken care of automatically. > @@ -1304,6 +1312,7 @@ Advanced options (experts only): > --cxx=CXX use C++ compiler CXX [$cxx] > --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] > --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS > + --extra-cxxflags=CXXFLAGS append extra CXX compiler flags QEMU_CXXFLAGS For consistency with the --cxx= option description: s/CXX compiler/C++ compiler/ > @@ -1489,37 +1498,6 @@ if test "$bogus_os" = "yes"; then > error_exit "Unrecognized host OS $targetos" > fi > > -# Check that the C++ compiler exists and works with the C compiler > -if has $cxx; then > - cat > $TMPC <<EOF > -int c_function(void); > -int main(void) { return c_function(); } > -EOF > - > - compile_object > - > - cat > $TMPCXX <<EOF > -extern "C" { > - int c_function(void); > -} > -int c_function(void) { return 42; } > -EOF > - > - update_cxxflags > - > - if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then > - # C++ compiler $cxx works ok with C compiler $cc > - : > - else > - echo "C++ compiler $cxx does not work with C compiler $cc" > - echo "Disabling C++ specific optional code" > - cxx= > - fi > -else > - echo "No C++ compiler available; disabling C++ specific optional code" > - cxx= > -fi > - Why move this code? > > Bruno > This signature will break tools that apply the patch. It's easiest to use git-send-email(1) to avoid problems like this.
2017-06-06 10:28 GMT+01:00 Stefan Hajnoczi <stefanha@gmail.com>: > On Fri, Jun 02, 2017 at 02:07:26PM +0100, Bruno Dominguez wrote: >> There was no possibility to add specific cxx flags using the configure >> file. So A new entrance has been created to support it. >> >> Duplication of information in configure and rules.mak. Taking >> QEMU_CFLAGS and add them to QEMU_CXXFLAGS, now the value of >> QEMU_CXXFLAGS is stored in config-host.mak, so there is no need for >> it. >> >> The makefile for libvixl was adding flags for QEMU_CXXFLAGS in >> QEMU_CFLAGS because of the addition in rules.mak. That was removed, so >> adding them where it should be. >> >> ----- >> Signed-off-by: Bruno Dominguez <bru.dominguez@gmail.com> >> ----- > > Please follow the code submission guidelines: > http://wiki.qemu.org/Contribute/SubmitAPatch > > * The commit message (email subject) should have a prefix describing > the affected component. Use "git log ./configure" for inspiration. > I suggest the following: > > configure: split c and cxx extra flags > > * Use git-format-patch(1) so that your patch applies cleanly. Your > email has: > > ---- > Signed-off-by: ... > ---- > > This is not the format recognized by tools. Instead the > Signed-off-by: should be part of the commit description (no '----') > and then a line with just three hyphens ('---') denotes the end of > the commit description: > > Signed-off-by: ... > --- > > * The email must not be line-wrapped since that breaks the patch. If > you use git-send-email(1) to submit patches then this is taken care > of automatically. > ok, will give it another go. >> @@ -1304,6 +1312,7 @@ Advanced options (experts only): >> --cxx=CXX use C++ compiler CXX [$cxx] >> --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] >> --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS >> + --extra-cxxflags=CXXFLAGS append extra CXX compiler flags QEMU_CXXFLAGS > > For consistency with the --cxx= option description: > > s/CXX compiler/C++ compiler/ > will do. >> @@ -1489,37 +1498,6 @@ if test "$bogus_os" = "yes"; then >> error_exit "Unrecognized host OS $targetos" >> fi >> >> -# Check that the C++ compiler exists and works with the C compiler >> -if has $cxx; then >> - cat > $TMPC <<EOF >> -int c_function(void); >> -int main(void) { return c_function(); } >> -EOF >> - >> - compile_object >> - >> - cat > $TMPCXX <<EOF >> -extern "C" { >> - int c_function(void); >> -} >> -int c_function(void) { return 42; } >> -EOF >> - >> - update_cxxflags >> - >> - if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then >> - # C++ compiler $cxx works ok with C compiler $cc >> - : >> - else >> - echo "C++ compiler $cxx does not work with C compiler $cc" >> - echo "Disabling C++ specific optional code" >> - cxx= >> - fi >> -else >> - echo "No C++ compiler available; disabling C++ specific optional code" >> - cxx= >> -fi >> - > > Why move this code? > the configure file adds "-fPIE -DPIE" to QEMU_CFLAGS around line 1570. Where QEMU_CXXFLAGS is placed is not taken it, hence this flag is not tested with the c++ compiler and breaks the build later on for not existing. Because QEMU_CXXFLAGS was reassigned again in rules.mak this was hidden.
On Tue, Jun 6, 2017 at 10:45 AM, Bruno Dominguez <bru.dominguez@gmail.com> wrote: > 2017-06-06 10:28 GMT+01:00 Stefan Hajnoczi <stefanha@gmail.com>: >> On Fri, Jun 02, 2017 at 02:07:26PM +0100, Bruno Dominguez wrote: >>> @@ -1489,37 +1498,6 @@ if test "$bogus_os" = "yes"; then >>> error_exit "Unrecognized host OS $targetos" >>> fi >>> >>> -# Check that the C++ compiler exists and works with the C compiler >>> -if has $cxx; then >>> - cat > $TMPC <<EOF >>> -int c_function(void); >>> -int main(void) { return c_function(); } >>> -EOF >>> - >>> - compile_object >>> - >>> - cat > $TMPCXX <<EOF >>> -extern "C" { >>> - int c_function(void); >>> -} >>> -int c_function(void) { return 42; } >>> -EOF >>> - >>> - update_cxxflags >>> - >>> - if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then >>> - # C++ compiler $cxx works ok with C compiler $cc >>> - : >>> - else >>> - echo "C++ compiler $cxx does not work with C compiler $cc" >>> - echo "Disabling C++ specific optional code" >>> - cxx= >>> - fi >>> -else >>> - echo "No C++ compiler available; disabling C++ specific optional code" >>> - cxx= >>> -fi >>> - >> >> Why move this code? >> > > the configure file adds "-fPIE -DPIE" to QEMU_CFLAGS around line 1570. > Where QEMU_CXXFLAGS is placed is not taken it, hence this flag is not > tested with the c++ compiler and breaks the build later on for not > existing. Because QEMU_CXXFLAGS was reassigned again in rules.mak this > was hidden. Thanks for explaining. Stefan
diff --git a/configure b/configure index 0586ec9..2fff3cc 100755 --- a/configure +++ b/configure @@ -91,7 +91,8 @@ update_cxxflags() { # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those # options which some versions of GCC's C++ compiler complain about # because they only make sense for C programs. - QEMU_CXXFLAGS= + QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS" + for arg in $QEMU_CFLAGS; do case $arg in -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ @@ -102,6 +103,8 @@ update_cxxflags() { ;; esac done + + } compile_object() { @@ -344,6 +347,9 @@ for opt do --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" EXTRA_CFLAGS="$optarg" ;; + --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" + EXTRA_CXXFLAGS="$optarg" + ;; --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg" EXTRA_LDFLAGS="$optarg" ;; @@ -787,6 +793,8 @@ for opt do ;; --extra-cflags=*) ;; + --extra-cxxflags=*) + ;; --extra-ldflags=*) ;; --enable-debug-info) @@ -1304,6 +1312,7 @@ Advanced options (experts only): --cxx=CXX use C++ compiler CXX [$cxx] --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS + --extra-cxxflags=CXXFLAGS append extra CXX compiler flags QEMU_CXXFLAGS --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS --make=MAKE use specified make [$make] --install=INSTALL use specified install [$install] @@ -1489,37 +1498,6 @@ if test "$bogus_os" = "yes"; then error_exit "Unrecognized host OS $targetos" fi -# Check that the C++ compiler exists and works with the C compiler -if has $cxx; then - cat > $TMPC <<EOF -int c_function(void); -int main(void) { return c_function(); } -EOF - - compile_object - - cat > $TMPCXX <<EOF -extern "C" { - int c_function(void); -} -int c_function(void) { return 42; } -EOF - - update_cxxflags - - if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then - # C++ compiler $cxx works ok with C compiler $cc - : - else - echo "C++ compiler $cxx does not work with C compiler $cc" - echo "Disabling C++ specific optional code" - cxx= - fi -else - echo "No C++ compiler available; disabling C++ specific optional code" - cxx= -fi - gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags" gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" @@ -5063,6 +5041,38 @@ EOF fi fi +# Check that the C++ compiler exists and works with the C compiler. +# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. +if has $cxx; then + cat > $TMPC <<EOF +int c_function(void); +int main(void) { return c_function(); } +EOF + + compile_object + + cat > $TMPCXX <<EOF +extern "C" { + int c_function(void); +} +int c_function(void) { return 42; } +EOF + + update_cxxflags + + if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then + # C++ compiler $cxx works ok with C compiler $cc + : + else + echo "C++ compiler $cxx does not work with C compiler $cc" + echo "Disabling C++ specific optional code" + cxx= + fi +else + echo "No C++ compiler available; disabling C++ specific optional code" + cxx= +fi + echo_version() { if test "$1" = "yes" ; then echo "($2)" @@ -5268,6 +5278,7 @@ if test "$mingw32" = "no" ; then fi echo "qemu_helperdir=$libexecdir" >> $config_host_mak echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak +echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak echo "qemu_localedir=$qemu_localedir" >> $config_host_mak echo "libs_softmmu=$libs_softmmu" >> $config_host_mak @@ -5906,6 +5917,7 @@ 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 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak if test "$sparse" = "yes" ; then echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak diff --git a/disas/libvixl/Makefile.objs b/disas/libvixl/Makefile.objs index bbe7695..dbf7def 100644 --- a/disas/libvixl/Makefile.objs +++ b/disas/libvixl/Makefile.objs @@ -6,6 +6,6 @@ libvixl_OBJS = vixl/utils.o \ # The -Wno-sign-compare is needed only for gcc 4.6, which complains about # some signed-unsigned equality comparisons which later gcc versions do not. -$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CFLAGS := -I$(SRC_PATH)/disas/libvixl $(QEMU_CFLAGS) -Wno-sign-compare +$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CXXFLAGS := -I$(SRC_PATH)/disas/libvixl $(QEMU_CXXFLAGS) -Wno-sign-compare common-obj-$(CONFIG_ARM_A64_DIS) += $(libvixl_OBJS) diff --git a/rules.mak b/rules.mak index 1c0eabb..2a2fb72 100644 --- a/rules.mak +++ b/rules.mak @@ -20,9 +20,6 @@ MAKEFLAGS += -rR %.mak: clean-target: -# Flags for C++ compilation -QEMU_CXXFLAGS = -D__STDC_LIMIT_MACROS $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wredundant-decls, $(QEMU_CFLAGS)) - # Flags for dependency generation QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d
There was no possibility to add specific cxx flags using the configure file. So A new entrance has been created to support it. Duplication of information in configure and rules.mak. Taking QEMU_CFLAGS and add them to QEMU_CXXFLAGS, now the value of QEMU_CXXFLAGS is stored in config-host.mak, so there is no need for it. The makefile for libvixl was adding flags for QEMU_CXXFLAGS in QEMU_CFLAGS because of the addition in rules.mak. That was removed, so adding them where it should be. ----- Signed-off-by: Bruno Dominguez <bru.dominguez@gmail.com> ----- Bruno