# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@

ifndef SQ_MTYPE
SQ_MTYPE	= 32
endif

# tools
ifeq ($(SQ_MTYPE),32)
CFLAGS		= $(C32FLAGS)
CXXFLAGS	= $(CXX32FLAGS)
MPILIB		= -L$(MPI_ROOT)/lib/linux_ia32 -lmtmpi -lpthread
else
CFLAGS		= $(C64FLAGS)
CXXFLAGS	= $(CXX64FLAGS)
MPILIB		= -L$(MPI_ROOT)/lib/linux_amd64 -lmtmpi -lpthread
endif

CC		= $(GCC_TOOL_ROOT)/bin/gcc
CXX		= $(GCC_TOOL_ROOT)/bin/g++
MPICC		= $(MPI_ROOT)/bin/mpicc

# export
EXPROOT		= $(TRAF_HOME)/export
INCMONDIR	= $(TRAF_HOME)/monitor/linux
BINEXPDIR	= $(EXPROOT)/bin$(SQ_MBTYPE)
INCEXPDIR	= $(EXPROOT)/include
LIBEXPDIR	= $(EXPROOT)/lib$(SQ_MBTYPE)
KMEXPDIR	= $(EXPROOT)/km

ifeq ($(SQ_MTYPE),32)
MPICC		+= -mpi32
endif

# sm libs
LIBMPI		= $(LIBEXPDIR)/libmtmpi.so
LIBMPIX		= -L$(LIBEXPDIR) -lmtmpi
