322 lines
9.1 KiB
Makefile
322 lines
9.1 KiB
Makefile
# -*- Makefile -*-
|
|
#
|
|
# $Id: gcc.config 638562 2008-03-18 20:52:07Z elemings $
|
|
#
|
|
# configuration file for gcc
|
|
#
|
|
##############################################################################
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed
|
|
# with this work for additional information regarding copyright
|
|
# ownership. The ASF licenses this file to you under the Apache
|
|
# License, Version 2.0 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# permissions and limitations under the License.
|
|
#
|
|
# Copyright 1999-2007 Rogue Wave Software, Inc.
|
|
#
|
|
##############################################################################
|
|
|
|
CXX = gcc
|
|
CCVER := $(shell $(CXX) -dumpversion | sed "s/[^0-9]*\([0-9.]*\).*/\1/g")
|
|
|
|
# determine the major version of gcc
|
|
CXX_MAJOR := $(shell echo "$(CCVER)" | sed "s/^\([1-9][0-9]*\).*/\1/")
|
|
CXX_MINOR := $(shell echo "$(CCVER)" | sed "s/[1-9]*\.\([0-9]*\).*/\1/")
|
|
|
|
# determine the major and minor version of the OS on AIX
|
|
ifeq ($(OSNAME),AIX)
|
|
OS_MAJOR := $(shell uname -v)
|
|
OS_MINOR := $(shell uname -r)
|
|
endif
|
|
|
|
# -W and -Wextra are the same
|
|
WARNFLAGS = -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings
|
|
|
|
# -Wno-long-long not available prior to 2.90
|
|
ifeq ($(shell [ $(CXX_MAJOR) -gt 2 -o $(CXX_MAJOR) -eq 2 \
|
|
-a $(CXX_MINOR) -ge 90 ] && echo 1), 1)
|
|
WARNFLAGS += -Wno-long-long
|
|
endif # gcc >= 2.90
|
|
|
|
# prevent (bogus?) warnings on SunOS
|
|
ifneq ($(OSNAME),SunOS)
|
|
WARNFLAGS += -Wcast-align
|
|
else
|
|
|
|
# prevent gcc 3.x warnings about #pragma ident on SunOS
|
|
ifeq ($(CXX_MAJOR),3)
|
|
ifeq ($(shell expr $(CXX_MINOR) \< 4),1)
|
|
WARNFLAGS += -Wno-unknown-pragmas
|
|
endif # gcc < 3.4
|
|
endif # gcc == 3.x
|
|
endif # !SunOS
|
|
|
|
# do not enable -Wunreachable-code: it's useless the way implemented
|
|
# ifeq ($(shell expr $(CXX_MAJOR) \> 3 \& $(CXX_MINOR) \> 3),1)
|
|
# WARNFLAGS += -Wunreachable-code
|
|
# endif # gcc > 3.3
|
|
|
|
|
|
DEPENDFLAGS = -M
|
|
|
|
# avoid adding -FPIC on IBM AIX and Cygwin where
|
|
# gcc generated code is always position independent
|
|
ifeq (,$(findstring AIX,$(OSNAME)))
|
|
ifeq (,$(findstring CYGWIN,$(OSNAME)))
|
|
PICFLAGS = -fPIC
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(OSNAME),SunOS)
|
|
# linker flags for symbol versioning
|
|
# temporarily disabled (not fully implemented)
|
|
# MAPFLAGS = -Wl,-M
|
|
endif
|
|
|
|
ifneq ($(MAPFLAGS),)
|
|
# path to mapfile (relative to $(TOPDIR)) for symbol versioning
|
|
ifneq ($(CXX_MAJOR),2)
|
|
MAPFILE = src/mapfile.$(CXX)
|
|
else
|
|
# gcc 2.x implements a different ABI than gcc 3
|
|
MAPFILE = src/mapfile.$(CXX)-$(CXX_MAJOR)
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(OSNAME),Darwin)
|
|
# no -shared option for GCC on Mac OS X (Darwin)
|
|
LDSOFLAGS = -shared
|
|
else
|
|
# Flags needed when linking the library
|
|
LDSOFLAGS = \
|
|
-dynamiclib \
|
|
-install_name $(BUILDDIR)/lib/$(LIBNAME) \
|
|
-compatibility_version 4 \
|
|
-current_version $(LIBVER)
|
|
endif
|
|
|
|
|
|
# -fPIC needed both to compile and link shared libs on HP-UX 11
|
|
ifeq ($(OSNAME),HP-UX)
|
|
LDSOFLAGS += -fPIC
|
|
endif
|
|
|
|
ifeq ($(CXX_MAJOR),3)
|
|
ifeq ($(shell [ $(CXX_MINOR) -lt 4 ] && echo 1),1)
|
|
# for gcc 3 prior to gcc 3.4 force linking with libgcc_s.so
|
|
# and avoid linking with libgcc_s.a to get stack unwinding
|
|
# due to exceptions right (see STDCXX-369)
|
|
LDSOFLAGS += -shared-libgcc
|
|
endif
|
|
endif
|
|
|
|
CXXFLAGS = -pedantic -nostdinc++
|
|
|
|
ifeq ($(CXX_MAJOR),2)
|
|
ifeq ($(shell expr $(CXX_MINOR) / 10),9)
|
|
CXXFLAGS += -fhonor-std -ftemplate-depth-32
|
|
else
|
|
CXXFLAGS += -ftemplate-depth-32
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(OSNAME),IRIX64)
|
|
ifeq ($(CXX_MAJOR),2)
|
|
# prevent (some) assembler errors caused by overly long symbol
|
|
# names (the option is not supported in gcc 3 and beyond)
|
|
CXXFLAGS += -fsquangle
|
|
endif
|
|
|
|
# disable ld warnings about libs not used to resolve any symbols
|
|
LDFLAGS += -Wl,-woff,84
|
|
endif
|
|
|
|
# prevent (some) assemler errors caused by overly long symbol names
|
|
ifeq ($(OSNAME),OSF1)
|
|
CXXFLAGS += -fsquangle
|
|
endif
|
|
|
|
CXXPRELINK =
|
|
|
|
# enable C++ C library headers (the <cname> kind)
|
|
CPPFLAGS = -I$(TOPDIR)/include/ansi
|
|
|
|
# decrease warning level to prevent annoying linker warnings
|
|
# about duplicate symbols (the linker has no concept of weak symbols)
|
|
ifeq ($(OSNAME),AIX)
|
|
LDFLAGS = -Wl,-bh:5
|
|
endif
|
|
|
|
ifneq ($(CXX_MAJOR),2)
|
|
# gcc 3.x needs to explicitly link with libsupc++ for language support
|
|
# g++ 3.x links with it as well as libstdc++ automatically
|
|
LDLIBS = -lsupc++
|
|
|
|
ifeq ($(OSNAME),Darwin)
|
|
# link with gcc_eh to resolve the _Unwind_xxx functions
|
|
# (shouldn't we link with it on all platforms?)
|
|
LDLIBS += -lgcc_eh
|
|
endif
|
|
endif # gcc > 2
|
|
|
|
# The flag(s) to use to embed a library search path into generated executables.
|
|
ifeq ($(OSNAME),Linux)
|
|
RPATH = -Wl,-R
|
|
else
|
|
ifeq ($(OSNAME),SunOS)
|
|
RPATH = -Wl,-R
|
|
else
|
|
ifeq ($(OSNAME),AIX)
|
|
ifeq ($(shell [ $(OS_MAJOR) -gt 5 -o $(OS_MAJOR) -eq 5 \
|
|
-a $(OS_MINOR) -ge 3 ] && echo 1), 1)
|
|
# -bsrv4, -R only available on AIX 5.3 and newer
|
|
RPATH = -Wl,-bsvr4,-R
|
|
endif
|
|
else
|
|
ifeq ($(OSNAME),HP-UX)
|
|
RPATH = -Wl,+b
|
|
else
|
|
ifeq ($(OSNAME),IRIX64)
|
|
RPATH = -Wl,-rpath,
|
|
else
|
|
ifeq ($(OSNAME),OSF1)
|
|
RPATH = -Wl,-rpath,
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# debug/optimization options
|
|
DEBUG_CXXFLAGS = -g
|
|
DEBUG_CPPFLAGS =
|
|
|
|
OPTMZ_CXXFLAGS = -O2
|
|
OPTMZ_CPPFLAGS =
|
|
|
|
# shared/static library options
|
|
SHARED_CXXFLAGS =
|
|
SHARED_CPPFLAGS =
|
|
SHARED_LDFLAGS =
|
|
|
|
ifeq ($(OSNAME),AIX)
|
|
SHARED_SUFFIX = .a
|
|
endif
|
|
|
|
ifeq ($(OSNAME),HP-UX)
|
|
SHARED_SUFFIX = .sl
|
|
endif
|
|
|
|
ifeq ($(OSNAME),Darwin)
|
|
SHARED_SUFFIX = .dylib
|
|
endif
|
|
|
|
ifneq ($(findstring CYGWIN,$(OSNAME)),)
|
|
SHARED_SUFFIX = .dll
|
|
SHARED_CPPFLAGS += -D_RWSHARED
|
|
LDFLAGS += -Wl,-force-exe-suffix
|
|
endif
|
|
|
|
STATIC_CXXFLAGS =
|
|
STATIC_CPPFLAGS =
|
|
STATIC_LDFLAGS =
|
|
|
|
# compiler and linker flags for thread safety
|
|
# use undocumented (though long implemented) gcc option -pthread
|
|
# which defines _REENTRANT;
|
|
# the same option is named -pthreads on Solaris
|
|
|
|
ifeq ($(findstring CYGWIN,$(OSNAME)),)
|
|
ifeq ($(OSNAME),SunOS)
|
|
MULTI_CPPFLAGS_POSIX = -pthreads
|
|
MULTI_LDFLAGS_POSIX = -pthreads
|
|
else
|
|
ifeq ($(OSNAME),IRIX64)
|
|
# no -pthreads option (or similar) on IRIX?
|
|
MULTI_CPPFLAGS_POSIX = -D_REENTRANT
|
|
MULTI_LDFLAGS_POSIX = -lpthread
|
|
else
|
|
# option doesn't exist in Darwin gcc
|
|
ifneq ($(OSNAME),Darwin)
|
|
MULTI_CPPFLAGS_POSIX = -pthread
|
|
MULTI_LDFLAGS_POSIX = -pthread
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
# on Cygwin use MingW-threads by default
|
|
# -mthreads not defines _REENTRANT
|
|
MULTI_CPPFLAGS_POSIX = -D_REENTRANT -mthreads
|
|
MULTI_LDFLAGS_POSIX = -mthreads
|
|
|
|
# link with libcatgets and libiconv
|
|
LDLIBS += -lcatgets -liconv
|
|
endif
|
|
|
|
MULTI_CPPFLAGS_SOLARIS = -threads
|
|
MULTI_LDFLAGS_SOLARIS = -threads
|
|
|
|
MULTI_CPPFLAGS_DCE =
|
|
MULTI_LDFLAGS_DCE =
|
|
|
|
# POSIX
|
|
MULTI_CPPFLAGS = $(MULTI_CPPFLAGS_POSIX)
|
|
MULTI_LDFLAGS = $(MULTI_LDFLAGS_POSIX)
|
|
|
|
SINGL_CPPFLAGS =
|
|
SINGL_LDFLAGS =
|
|
|
|
# (try to) determine the architecture via the (non-standard) -p option
|
|
# the option is recognized on at least HP-UX, IRIX, and Linux (are there
|
|
# any other systems running on IA64?)
|
|
arch=$(shell uname -p 2>/dev/null)
|
|
|
|
ifeq ($(arch),ia64)
|
|
# LP64 is the default (implicit) setting on IA64
|
|
ifeq ($(OSNAME),HP-UX)
|
|
# -milp32, -mlp64, etc. are options specific to HP-UX
|
|
CXXFLAGS.narrow = -milp32
|
|
LDFLAGS.narrow = -milp32
|
|
LDSOFLAGS.narrow = -milp32
|
|
ARFLAGS.narrow =
|
|
endif
|
|
else
|
|
# determine whether the default compiler invocation produces
|
|
# wide (64-bit) or narrow (32-bit) code and set compiler,
|
|
# linker, and other flags accordingly
|
|
wide = $(shell tmpfile=/tmp/longsize-$$; export tmpfile; \
|
|
echo "int main() { return 8 == sizeof (long); }" \
|
|
> $$tmpfile.c \
|
|
&& $(CXX) $$tmpfile.c >/dev/null 2>&1 -o $$tmpfile; \
|
|
$$tmpfile; echo $$?; rm -f $$tmpfile.c $$tmpfile)
|
|
|
|
ifeq ($(wide),0)
|
|
# wide (64-bit) flags
|
|
CXXFLAGS.wide = -m64
|
|
LDFLAGS.wide = -m64
|
|
LDSOFLAGS.wide = -m64
|
|
ARFLAGS.wide =
|
|
|
|
# narrow (32-bit) mode is implicit
|
|
else
|
|
# narrow (32-bit) flags
|
|
CXXFLAGS.narrow = -m32
|
|
LDFLAGS.narrow = -m32
|
|
LDSOFLAGS.narrow = -m32
|
|
ARFLAGS.narrow =
|
|
|
|
# wide (64-bit) mode is implicit
|
|
endif
|
|
endif
|