Merge pull request #2216 from jwillemsen/jwi-cxxversionchecks
[ACE_TAO.git] / ACE / include / makeinclude / platform_gcc_clang_common.GNU
blob2e29d5d4f4922823ec55f39c687f888673797388
1 # Shared Logic for GCC and Clang
3 FLAGS_C_CC += -Wall -Wextra -Wpointer-arith
4 CCFLAGS += -Wnon-virtual-dtor
6 # Suppress "Creating *.a" Message
7 ARFLAGS += -c
9 ifeq ($(shared_libs), 1)
10   ifneq ($(static_libs_only), 1)
11     # Add all symbols to the dynamic symbol table.  Needed to enable
12     # dynamic_cast<> for shared libraries. (see
13     # http://gcc.gnu.org/faq.html#dso)
15     ifeq ($(GNU_LD),1)
16       # Make sure this version of ld supports the -E option.
17       ifneq ($(mingw32),1)
18         LD_EXPORT_DEFINED := $(shell sh -c '$(LD_FOR_VERSION_TEST) -E 2>&1 | grep -E -i "(option|flag)" /dev/null; echo $$?')
19       else
20         LD_EXPORT_DEFINED := $(shell $(LD_FOR_VERSION_TEST) -E 2>&1 | grep -c -i -e '(option|flag)')
21         ifeq ($(LD_EXPORT_DEFINED),0)
22           LD_EXPORT_DEFINED:=1
23         else
24           LD_EXPORT_DEFINED:=0
25         endif
26       endif # mingw32
27       ifeq ($(LD_EXPORT_DEFINED),1)
28         LDFLAGS += -Wl,-E
29       endif # LD_EXPORT_DEFINED = 1
30     endif # GNU ld
32     # Take advantage of g++ visibility attributes to generate
33     # improved shared library binaries.
34     ifneq ($(no_hidden_visibility),1)
35       CCFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
36     else
37       CPPFLAGS += -DACE_HAS_CUSTOM_EXPORT_MACROS=0
38     endif # no_hidden_visibility
39   else
40     # Explicitly disable g++ visibility attributes since
41     # they are only meant for use when building shared libraries.
42     no_hidden_visibility = 1
43     CPPFLAGS += -DACE_HAS_CUSTOM_EXPORT_MACROS=0
44   endif # static_libs_only
45 else
46   # Explicitly disable g++ visibility attributes since
47   # they are only meant for use when building shared libraries.
48   no_hidden_visibility = 1
49   CPPFLAGS += -DACE_HAS_CUSTOM_EXPORT_MACROS=0
50 endif # shared_libs
52 ifneq ($(c++std),)
53   CCFLAGS += -std=$(c++std)
54 endif
56 ifeq ($(c++20),1)
57   CCFLAGS += -std=c++20
58 else
59   ifeq ($(c++17),1)
60     CCFLAGS += -std=c++17
61   else
62     ifeq ($(c++14),1)
63       CCFLAGS += -std=c++14
64     endif # c++14
65   endif #c++17
66 endif #c++20
68 # If no option has been specified, set templates to automatic
69 # version of the compiler.
71 templates ?= automatic
73 # The correct flags to pass to the linker for ELF dynamic shared library
74 # versioning.
75 # If the platform file didn't already set versioned_so, default to 1.
76 versioned_so ?= 1
77 with_ld ?=
78 ifneq ($(versioned_so),0)
79   SOFLAGS += -Wl,-h -Wl,$(SONAME)
80 endif
82 ifeq ($(versioned_so),2)
83   FLAGS_C_CC += -DACE_VERSIONED_SO=2
84 endif
86 static_libs_only ?=
88 ifeq ($(GNU_LD),1)
89   STATIC_LINK_FLAG ?= -static
90 endif # GNU_LD
92 ifeq ($(openmp),1)
93   FLAGS_C_CC += -fopenmp
94   LDFLAGS += -fopenmp
95 endif