CXXSTD is the C++ analogue to CSTD.

CXXSTD defaults to `-std=c++11` with supporting compilers; `-std=gnu++98`,
otherwise for older versions of g++.

This change standardizes the CXXSTD variable, originally added to
googletest.test.inc.mk as part of r345203.

As part of this effort, convert all `CXXFLAGS+= -std=*` calls to use `CXXSTD`.

Notes:

This value is not sanity checked in bsd.sys.mk, however, given the two
most used C++ compilers on FreeBSD (clang++ and g++) support both modes, it is
likely to work with both toolchains. This method will be refined in the future
to support more variants of C++, as not all versions of clang++ and g++ (for
instance) support C++14, C++17, etc.

Any manual appending of `-std=*` to `CXXFLAGS` should be replaced with CXXSTD.
Example:

Before this commit:
```
CXXFLAGS+=	-std=c++14
```

After this commit:
```
CXXSTD=	c++14
```

Reviewed by:	asomers
Approved by:	emaste (mentor)
MFC after:	1 month
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D19732
This commit is contained in:
Enji Cooper 2019-03-29 18:13:44 +00:00
parent 5d00c5a657
commit 9a41926bfb
15 changed files with 28 additions and 31 deletions

View File

@ -95,7 +95,7 @@ CFLAGS+= -ffunction-sections
CFLAGS+= -fdata-sections
LDFLAGS+= -Wl,--gc-sections
CXXFLAGS+= -std=c++11
CXXSTD?= c++11
CXXFLAGS+= -fno-exceptions
CXXFLAGS+= -fno-rtti
CXXFLAGS.clang+= -stdlib=libc++

View File

@ -76,9 +76,7 @@ CFLAGS+= -nostdinc++
CFLAGS+= -nostdlib
CFLAGS+= -D_LIBCPP_BUILDING_LIBRARY
CFLAGS+= -DLIBCXXRT
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+= -std=c++11
.endif
CXXSTD= c++11
LIBADD+= cxxrt
INCSGROUPS= STD EXP EXT

View File

@ -20,8 +20,6 @@ CXXFLAGS+= -nostdinc++
CXXFLAGS+= -nostdlib
CXXFLAGS+= -D_LIBCPP_BUILDING_LIBRARY
CXXFLAGS+= -DLIBCXXRT
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+= -std=c++14
.endif
CXXSTD= c++14
.include <bsd.lib.mk>

View File

@ -22,8 +22,6 @@ CXXFLAGS+= -nostdinc++
CXXFLAGS+= -nostdlib
CXXFLAGS+= -D_LIBCPP_BUILDING_LIBRARY
CXXFLAGS+= -DLIBCXXRT
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+= -std=c++14
.endif
CXXSTD= c++14
.include <bsd.lib.mk>

View File

@ -50,8 +50,8 @@ PROGS+= h_getopt h_getopt_long
CFLAGS+= -I${.CURDIR}
CXXFLAGS.cxa_thread_atexit_test+= -std=c++11
CXXFLAGS.cxa_thread_atexit_nothr_test+= -std=c++11
CXXSTD.cxa_thread_atexit_test= c++11
CXXSTD.cxa_thread_atexit_nothr_test= c++11
LIBADD.cxa_thread_atexit_test+= pthread
.for t in h_getopt h_getopt_long

View File

@ -41,4 +41,4 @@ CFLAGS+= -funwind-tables
CXXFLAGS+= -fvisibility-inlines-hidden
CXXFLAGS+= -fvisibility=hidden
CFLAGS+= -I${CRTSRC}/lib
CXXFLAGS+= -std=c++11
CXXSTD= c++11

View File

@ -22,9 +22,7 @@ SRCS+= libelftc_dem_gnu3.c\
WARNS= 0
CFLAGS+= -isystem ${SRCDIR} -nostdinc++
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+= -std=c++11
.endif
CXXSTD= c++11
VERSION_MAP= ${.CURDIR}/Version.map
.include <bsd.lib.mk>

View File

@ -27,10 +27,8 @@ CXXFLAGS.${file}+= -fno-exceptions -funwind-tables
.endfor
CFLAGS+= -I${UNWINDINCDIR} -I${.CURDIR} -D_LIBUNWIND_IS_NATIVE_ONLY
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+= -std=c++11
.endif
CXXFLAGS+= -fno-rtti
CXXSTD= c++11
STATIC_CXXFLAGS+= -fvisibility=hidden -fPIC
# Probably need to just move this earlier or use CXXFLAGS
.if ${MK_DIRDEPS_BUILD} == "yes"

View File

@ -53,9 +53,9 @@ CFLAGS+= -I${ITTSRC}
CFLAGS+= -ffunction-sections
CFLAGS+= -fdata-sections
CXXFLAGS+= -fvisibility-inlines-hidden
CXXFLAGS+= -std=c++11
CXXFLAGS+= -fno-exceptions
CXXFLAGS+= -fno-rtti
CXXSTD= c++11
LDFLAGS+= -Wl,--warn-shared-textrel
LDFLAGS+= -Wl,--gc-sections

View File

@ -31,9 +31,6 @@ LIBADD= osmcomp ibmad ibumad
CFLAGS+= -DHAVE_CONFIG_H=1
CFLAGS+= -I${_spath}
CFLAGS+= -I${SYSROOT:U${DESTDIR}}/${INCLUDEDIR}/infiniband
.if ${COMPILER_FEATURES:Mc++11}
CXXFLAGS+= -std=c++11
.endif
VERSION_MAP= ${_spath}/libibnetdisc.map
.include <bsd.lib.mk>

View File

@ -22,8 +22,8 @@ PROGS += ${PROGS_CXX}
.if defined(PROG)
# just one of many
PROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE DPSRCS MAN NO_WERROR \
PROGNAME SRCS STRIP WARNS
PROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE CSTD CXXSTD DPSRCS MAN \
NO_WERROR PROGNAME SRCS STRIP WARNS
PROG_VARS += CFLAGS CXXFLAGS DEBUG_FLAGS DPADD INTERNALPROG LDADD LIBADD \
LINKS LDFLAGS MLINKS ${PROG_OVERRIDE_VARS}
.for v in ${PROG_VARS:O:u}

View File

@ -24,6 +24,19 @@ CFLAGS+= -std=iso9899:1999
.else # CSTD
CFLAGS+= -std=${CSTD}
.endif # CSTD
.if ${COMPILER_FEATURES:Mc++11}
CXXSTD?= c++11
.elif ${COMPILER_TYPE} == "gcc"
# Prior versions of g++ support C++98 with GNU extensions by default.
CXXSTD?= gnu++98
.else
# Assume that the compiler supports at least C++98.
CXXSTD?= c++98
.endif
CXXFLAGS+= -std=${CXXSTD}
# CXXSTD
# -pedantic is problematic because it also imposes namespace restrictions
#CFLAGS+= -pedantic
.if defined(WARNS)

View File

@ -1,13 +1,9 @@
# $FreeBSD$
# XXX: this should be defined in bsd.sys.mk
CXXSTD?= c++11
GTESTS_CXXFLAGS+= -DGTEST_HAS_POSIX_RE=1
GTESTS_CXXFLAGS+= -DGTEST_HAS_PTHREAD=1
GTESTS_CXXFLAGS+= -DGTEST_HAS_STREAM_REDIRECTION=1
GTESTS_CXXFLAGS+= -frtti
GTESTS_CXXFLAGS+= -std=${CXXSTD}
# XXX: src.libnames.mk should handle adding this directory for libgtest's,
# libgmock's, etc, headers.

View File

@ -6,7 +6,7 @@ MAN= dtc.1
WARNS?= 3
CXXFLAGS+= -std=c++11 -fno-rtti -fno-exceptions
CXXFLAGS+= -fno-rtti -fno-exceptions
NO_SHARED?=NO

View File

@ -6,7 +6,8 @@
PROG_CXX= pmc
MAN=
WARNS?= 3
CXXFLAGS+= -O0 -std=c++14
CXXFLAGS+= -O0
CXXSTD= c++14
CWARNFLAGS.gcc+= -Wno-redundant-decls
LIBADD= kvm pmc m ncursesw pmcstat elf