# -*- Makefile -*-
#
# $Id$
#
# configuration file for SGI MIPSpro on IRIX
#
##############################################################################
#
# 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             = CC
CCVER          := $(shell $(CXX) -version 2>&1 | awk '{ print $$4 }')
# disable warnings:
#   1429 - The type "long long" is nonstandard.
#   1460
#   1521 - A nonstandard preprocessing directive is used. (#ident in sys files)
#   3150
#   3333 - Support for placement delete is disabled.
WARNFLAGS       = -ansiW -woff1429,1460,1521,3150,3333
DEPENDFLAGS     = -M
PICFLAGS        = -KPIC
LDSOFLAGS       = -shared
CXXFLAGS        =
CPPFLAGS        = -I$(TOPDIR)/include/ansi

# use CC to invoke the archiver (needed in order to include template
# instantiations from the ii_files/ template repository)
AR              = CC
ARFLAGS         = -ar -WR,-v -o


# disable warnings about libs that aren't being used to resolve any symbols
LDFLAGS         = -Wl,-woff,84

# use the undocumented -LANG:std=off option to prevent linking
# with the native C++ Standard Library
LDFLAGS        += -LANG:std=off

# add libpthread to the list of libraries to link with
ifeq ($(findstring pthread,$(BUILDMODE)),pthread)
    LDLIBS := -lpthread
endif


# the extension of assembly files is .s
AS_EXT = .s

# The flag(s) to use to embed a library search path into generated executables.
RPATH = -Wl,-rpath,

# debug/optimization options
DEBUG_CXXFLAGS  = -g
DEBUG_CPPFLAGS  =

# disable Olimit (can be easily exceeded)
OPTMZ_CXXFLAGS  = -O -OPT:Olimit=0
OPTMZ_CPPFLAGS  =

# shared/static library options
SHARED_CXXFLAGS =
SHARED_CPPFLAGS =
SHARED_LDFLAGS  = 

STATIC_CXXFLAGS =
STATIC_CPPFLAGS =
STATIC_LDFLAGS  =

# multi/single thread options
MULTI_CPPFLAGS_POSIX   = -D_REENTRANT
MULTI_CPPFLAGS_SOLARIS = 
MULTI_CPPFLAGS_DCE     = 

MULTI_LDFLAGS_POSIX    =
MULTI_LDFLAGS_SOLARIS  = 
MULTI_LDFLAGS_DCE      = 

# POSIX
MULTI_CPPFLAGS = $(MULTI_CPPFLAGS_POSIX)
MULTI_LDFLAGS  = $(MULTI_LDFLAGS_POSIX)

SINGL_CPPFLAGS  =
SINGL_LDFLAGS   =

# wide (64-bit) flags -- must be set explicitly
CXXFLAGS.wide  = -64
LDFLAGS.wide   = -64
LDSOFLAGS.wide = -64
ARFLAGS.wide   =

# narrow (32-bit) flags -- implicit in the default invocation
# CXXFLAGS.narrow  = -32
# LDFLAGS.narrow   = -32
# LDSOFLAGS.narrow = -32
# ARFLAGS.narrow   =
