aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnji Cooper <ngie@FreeBSD.org>2019-03-29 18:13:44 +0000
committerEnji Cooper <ngie@FreeBSD.org>2019-03-29 18:13:44 +0000
commit9a41926bfb664dd77659d1615ba55d75c2c530a8 (patch)
tree22e8924bf0eae4d597df29297ed7d3533c32f5a9
parent5d00c5a6571cdf533228338fa7ca532c91af1d66 (diff)
downloadsrc-9a41926bfb664dd77659d1615ba55d75c2c530a8.tar.gz
src-9a41926bfb664dd77659d1615ba55d75c2c530a8.zip
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
Notes
Notes: svn path=/head/; revision=345704
-rw-r--r--lib/clang/llvm.build.mk2
-rw-r--r--lib/libc++/Makefile4
-rw-r--r--lib/libc++experimental/Makefile4
-rw-r--r--lib/libc++fs/Makefile4
-rw-r--r--lib/libc/tests/stdlib/Makefile4
-rw-r--r--lib/libclang_rt/Makefile.inc2
-rw-r--r--lib/libcxxrt/Makefile4
-rw-r--r--lib/libgcc_eh/Makefile.inc4
-rw-r--r--lib/libomp/Makefile2
-rw-r--r--lib/ofed/libibnetdisc/Makefile3
-rw-r--r--share/mk/bsd.progs.mk4
-rw-r--r--share/mk/bsd.sys.mk13
-rw-r--r--share/mk/googletest.test.inc.mk4
-rw-r--r--usr.bin/dtc/Makefile2
-rw-r--r--usr.sbin/pmc/Makefile3
15 files changed, 28 insertions, 31 deletions
diff --git a/lib/clang/llvm.build.mk b/lib/clang/llvm.build.mk
index 71c0b17d4fdf..333574904417 100644
--- a/lib/clang/llvm.build.mk
+++ b/lib/clang/llvm.build.mk
@@ -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++
diff --git a/lib/libc++/Makefile b/lib/libc++/Makefile
index 50a747c8cfce..d83c4f81c016 100644
--- a/lib/libc++/Makefile
+++ b/lib/libc++/Makefile
@@ -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
diff --git a/lib/libc++experimental/Makefile b/lib/libc++experimental/Makefile
index 8d1e4b58bbe2..53c33018b535 100644
--- a/lib/libc++experimental/Makefile
+++ b/lib/libc++experimental/Makefile
@@ -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>
diff --git a/lib/libc++fs/Makefile b/lib/libc++fs/Makefile
index a89c5d6821d4..ede7d1687d4d 100644
--- a/lib/libc++fs/Makefile
+++ b/lib/libc++fs/Makefile
@@ -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>
diff --git a/lib/libc/tests/stdlib/Makefile b/lib/libc/tests/stdlib/Makefile
index 9f7afa112491..4a08f8557d08 100644
--- a/lib/libc/tests/stdlib/Makefile
+++ b/lib/libc/tests/stdlib/Makefile
@@ -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
diff --git a/lib/libclang_rt/Makefile.inc b/lib/libclang_rt/Makefile.inc
index 1c27a2d83885..067e370fe977 100644
--- a/lib/libclang_rt/Makefile.inc
+++ b/lib/libclang_rt/Makefile.inc
@@ -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
diff --git a/lib/libcxxrt/Makefile b/lib/libcxxrt/Makefile
index 5332024b44a1..49d632650c35 100644
--- a/lib/libcxxrt/Makefile
+++ b/lib/libcxxrt/Makefile
@@ -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>
diff --git a/lib/libgcc_eh/Makefile.inc b/lib/libgcc_eh/Makefile.inc
index 5c8af2141382..39cccec7e6d9 100644
--- a/lib/libgcc_eh/Makefile.inc
+++ b/lib/libgcc_eh/Makefile.inc
@@ -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"
diff --git a/lib/libomp/Makefile b/lib/libomp/Makefile
index bd8fd7769f0a..c0f1cc1c6db7 100644
--- a/lib/libomp/Makefile
+++ b/lib/libomp/Makefile
@@ -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
diff --git a/lib/ofed/libibnetdisc/Makefile b/lib/ofed/libibnetdisc/Makefile
index f66e58f4b0c0..08dbb8861407 100644
--- a/lib/ofed/libibnetdisc/Makefile
+++ b/lib/ofed/libibnetdisc/Makefile
@@ -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>
diff --git a/share/mk/bsd.progs.mk b/share/mk/bsd.progs.mk
index b4ba16dc5993..36043ef94860 100644
--- a/share/mk/bsd.progs.mk
+++ b/share/mk/bsd.progs.mk
@@ -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}
diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk
index f2c78a0c2426..836f23a62c14 100644
--- a/share/mk/bsd.sys.mk
+++ b/share/mk/bsd.sys.mk
@@ -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)
diff --git a/share/mk/googletest.test.inc.mk b/share/mk/googletest.test.inc.mk
index 84959658bdbd..98f0e6a6fbe3 100644
--- a/share/mk/googletest.test.inc.mk
+++ b/share/mk/googletest.test.inc.mk
@@ -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.
diff --git a/usr.bin/dtc/Makefile b/usr.bin/dtc/Makefile
index a834f622601f..92769609d034 100644
--- a/usr.bin/dtc/Makefile
+++ b/usr.bin/dtc/Makefile
@@ -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
diff --git a/usr.sbin/pmc/Makefile b/usr.sbin/pmc/Makefile
index 090134711b92..44ee356bde18 100644
--- a/usr.sbin/pmc/Makefile
+++ b/usr.sbin/pmc/Makefile
@@ -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