################################################################################
# Rosetta Standard Makefile
#
# Language: GNU Make
#
# Platform: Linux, Mac OS X, MinGW
#
# Date: 2007/03/17
################################################################################


# Extensions ___________________________________________________________________

.SUFFIXES: # Clear default extensions
.SUFFIXES: .C .c .cc .cpp .cxx .csh .h .hh .hpp .hxx .ii .ipp .d .o .so .a


# Include: Define $(SRC_PATH) and $(SRC) _______________________________________
# Created using:
#   echo SRC = \\ > makefile.src
#   ls *cc | sed 's/$/ \\/g' >> makefile.src
#   edit by hand to remove the last \ and move version_rosetta.cc to the top
include makefile.src
include src/epigraft/make/epigraft.src
include src/rootstock/make/rootstock.src
include src/ObjexxFCL/make/ObjexxFCL.src
include src/numeric/make/numeric.src
include src/utility/make/utility.src
# include src/ccp4/make/ccp4.src


# Variables ____________________________________________________________________

BINNAME := rosetta

SRC_PATH := . src $(addprefix src/,$(SRC_PATH))

INCLUDE_DIRS := -I. -Isrc -Iexternal/include

OBJ = $(addprefix .$(BUILD_TYPE).,$(addsuffix .o,$(basename $(notdir $(SRC)))))

DEPS = $(addprefix .$(BUILD_TYPE).,$(addsuffix .d,$(basename $(notdir $(filter-out version_rosetta.cc, $(SRC))))))

LIB_OBJ =

LIBS = epigraft rootstock ObjexxFCL numeric utility

RANLIB := ranlib  # archive index generator

CFLAGS = $(INCLUDE_DIRS) $(WARNFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(COPTFLAGS)

CXXFLAGS = $(INCLUDE_DIRS) $(WARNFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(CXXOPTFLAGS)

LDFLAGS = -static -Llib

# GCC Variables
GCC = gcc
GXX = g++
# Note: We distinguish between release and debug flags because we don't want
# unused variable warnings in release builds: there are variables unused except
# in assert() calls.
GCC_WARNFLAGS = -Wall -W -pedantic -Wno-unused-variable
GCC_DEBUG_WARNFLAGS = -Wall -W -pedantic
GCC_DEPFLAGS = -MMD -MT .$(BUILD_TYPE).$(*F).d -MF .$(BUILD_TYPE).$(*F).d -MP

# Intel C++ Variables
ICC = icc
IXX = icpc
# Note: We distinguish between release and debug flags because we don't want
# unused variable warnings in release builds: there are variables unused except
# in assert() calls.
# Note: At this point we don't have warnings properly enabled for Intel, until
# we learn the meanings of the various flags.
INTEL_WARNFLAGS = -Wp64 # -wd279,383,869,981,1505,1572
INTEL_DEBUG_WARNFLAGS = -Wp64 # -wd279,383,869,981,1505,1572
INTEL_DEPFLAGS = -MMD -MT.$(BUILD_TYPE).$(*F).d -MT.$(BUILD_TYPE).$(*F).o -MF.$(BUILD_TYPE).$(*F).d -MP


# GCC Builds ___________________________________________________________________

ifeq ($(MAKECMDGOALS),gcc)
  BUILD_TYPE := gcc
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip
endif


ifeq ($(MAKECMDGOALS),gccgraphics)
  BUILD_TYPE := gccgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  OPTFLAGS += -DGL_GRAPHICS
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDFLAGS := -Llib
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -lpthread
  LDLIBS += -lglut
  LDLIBS += -L/net/shared/lib/
  # Instructs linker to look for shared library (in this case libGLU.so
  # which is missing on snobol) in my home directory.
  LDLIBS += -Xlinker -rpath -Xlinker /net/shared/lib/
  INCLUDE_DIRS += -I/net/shared/include/
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),gcc34)
  BUILD_TYPE := gcc34
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += --param inline-unit-growth=1000 --param large-function-growth=50000  # GCC 3.4 and 4.0 (not supported by earlier GCCs)
  OPTFLAGS += -DNDEBUG -O3 -s
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),gccdebug)
  BUILD_TYPE := gccdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_DEBUG_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -O0
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),gccprofile)
  BUILD_TYPE := gccprofile
  BUILD_MODE := profile
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -pg -g # add -g for line-by-line profiling
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/linux
  LDFLAGS := -Llib
  LDFLAGS += -pg -g # add -g for line-by-line profiling
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),gcc34profile)
  BUILD_TYPE := gcc34profile
  BUILD_MODE := profile
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -pg -g # add -g for line-by-line profiling
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  # GCC 3.4 and 4.0 (not supported by earlier GCCs)
  OPTFLAGS += --param inline-unit-growth=1000 --param large-function-growth=50000
  OPTFLAGS += -DNDEBUG -O3
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDFLAGS := -Llib
  LDFLAGS += -pg -g # add -g for line-by-line profiling
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),gccboinc)
  BUILD_TYPE := gccboinc
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  OPTFLAGS += -DBOINC
  COPTFLAGS := -std=c99 -pthread
  CXXOPTFLAGS := -std=c++98 -pthread
  LDFLAGS := -Llib -static
  LDFLAGS += -pthread
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -lpthread
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip
  LDLIBS += -L../boinc/api -lboinc_api -L../boinc/lib -lboinc
  INCLUDE_DIRS += -Iboinc
  INCLUDE_DIRS += -I../boinc
  INCLUDE_DIRS += -I../boinc/api
  INCLUDE_DIRS += -I../boinc/lib
  INCLUDE_DIRS += -include ../boinc/config.h
  SRC_PATH += boinc
  SRC_PATH += ../boinc
  SRC_PATH += ../boinc/lib
  SRC_PATH += ../boinc/api
#  include boinc/make/Boinc.src
  include boinc/make/BoincRosetta.src
endif

ifeq ($(MAKECMDGOALS),gccboincdebug)
  BUILD_TYPE := gccboincdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_DEBUG_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -O0
  OPTFLAGS += -DBOINC
  COPTFLAGS := -std=c99 -pthread
  CXXOPTFLAGS := -std=c++98 -pthread
  LDFLAGS := -Llib -static
  LDFLAGS += -pthread
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -lpthread
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = touch
  LDLIBS += -L../boinc/api -lboinc_api -L../boinc/lib -lboinc
  INCLUDE_DIRS += -Iboinc
  INCLUDE_DIRS += -I../boinc
  INCLUDE_DIRS += -I../boinc/api
  INCLUDE_DIRS += -I../boinc/lib
  INCLUDE_DIRS += -include ../boinc/config.h
  SRC_PATH += boinc
  SRC_PATH += ../boinc
  SRC_PATH += ../boinc/lib
  SRC_PATH += ../boinc/api
  #include boinc/make/Boinc.src
  include boinc/make/BoincRosetta.src
endif

ifeq ($(MAKECMDGOALS),gccboincgraphics)
  BUILD_TYPE := gccboincgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  # OPTFLAGS += -fprefetch-loop-arrays
  # OPTFLAGS += -march=pentium4
  # OPTFLAGS += -march=athlon
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DBOINC_GRAPHICS
  COPTFLAGS := -std=c99 -pthread
  CXXOPTFLAGS := -std=c++98 -pthread
  LDFLAGS := -Llib
  LDFLAGS += -pthread
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -lpthread
  LDLIBS += -L/net/shared/boinc/api/ -lboinc_graphics_api
  LDLIBS += -L/net/shared/lib/ -lglut
  INCLUDE_DIRS += -I/net/shared/include/
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip

  INCLUDE_DIRS += -Iboinc
  # INCLUDE_DIRS += -I../boinc -I../boinc/api -I../boinc/lib -include ../boinc/config.h
  INCLUDE_DIRS += -I../boinc
  INCLUDE_DIRS += -I../boinc/api
  INCLUDE_DIRS += -I../boinc/lib
  INCLUDE_DIRS += -include ../boinc/config.h
  SRC_PATH += boinc
  # SRC_PATH += ../boinc ../boinc/lib ../boinc/api
  SRC_PATH += ../boinc
  SRC_PATH += ../boinc/lib
  SRC_PATH += ../boinc/api
  include boinc/make/Boinc.src
  include boinc/make/BoincRosetta.src
endif

ifeq ($(MAKECMDGOALS),gccgraphicsdebug)
  BUILD_TYPE := gccgraphicsdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_DEBUG_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -O0
  OPTFLAGS += -DGL_GRAPHICS
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDFLAGS :=  -Llib
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -lpthread
  LDLIBS += -lglut -L/net/shared/lib/
  INCLUDE_DIRS += -I/net/shared/include/
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),gccitanium)
  BUILD_TYPE := gccitanium
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  OPTFLAGS += -fprefetch-loop-arrays
  OPTFLAGS += -mtune=itanium2 #-mb-step
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS = $(GCC_LDLIBS)
  LIB_OBJ += lib/ia64-linux/libz.a
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),gccitaniumdebug)
  BUILD_TYPE := gccitaniumdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS = $(GCC_LDLIBS)
  LIB_OBJ += lib/ia64-linux/libz.a
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),mpilam)
  BUILD_TYPE := mpilam
  BUILD_MODE := release
  CC  = mpicc
  CXX = mpiCC
  WARNFLAGS = $(GCC_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -malign-double
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  OPTFLAGS += -DUSEMPI
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  LDFLAGS := -Llib
  LDLIBS = $(GCC_LDLIBS)
  ifeq ($(PLATFORM),MinGW)
    INCLUDE_DIRS += -Isrc/platform/windows/xp/32/x86/gcc
    LIB_OBJ += lib/windows_intelx86/libz.a
  else
    INCLUDE_DIRS += -Isrc/platform/linux
    LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  endif
  STRIP = strip
endif


# Intel C++ for Linux Builds ___________________________________________________

ifeq ($(MAKECMDGOALS),intel)
  # RCW(SDSC) Recommend v9.0.033 or v9.1 - change -axWN top -axWNP if you have
  # an EM64T with SSE3.  These options should be good for AMD chips as well.
  # Approximately 23% faster than GCC at present.
  BUILD_TYPE := intel
  BUILD_MODE := release
  CC  = $(ICC)
  CXX = $(IXX)
  WARNFLAGS = $(INTEL_WARNFLAGS)
  DEPFLAGS = $(INTEL_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -O3 -ip -axWN -Qoption,c,-ip_ninl_max_stats=500 -Qoption,c,-ip_ninl_max_total_stats=5000
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),intelitanium)
  BUILD_TYPE := intelitanium
  BUILD_MODE := release
  CC  = $(ICC)
  CXX = $(IXX)
  WARNFLAGS = $(INTEL_WARNFLAGS)
  DEPFLAGS = $(INTEL_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -O3 -ip -Qoption,c,-ip_ninl_max_stats=50000
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/ia64-linux/libz.a
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),intelitanium_mpi)
  BUILD_TYPE := intelitanium_mpi
  BUILD_MODE := release
  CC  = mpicc
  CXX = mpiCC
  WARNFLAGS = $(INTEL_WARNFLAGS) -w
  DEPFLAGS = $(INTEL_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -DUSEMPI -O3 -ip -Qoption,c,-ip_ninl_max_stats=50000
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/ia64-linux/libz.a
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),inteldebug)
  BUILD_TYPE = inteldebug
  BUILD_MODE := debug
  CC  = $(ICC)
  CXX = $(IXX)
  WARNFLAGS = $(INTEL_DEBUG_WARNFLAGS)
  DEPFLAGS = $(INTEL_DEPFLAGS)
  DEBUGFLAGS := -O0 -g
  OPTFLAGS :=
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  STRIP = touch
endif


ifeq ($(MAKECMDGOALS),intel80)
  BUILD_TYPE := intel80
  BUILD_MODE := release
  CC  = $(ICC)
  CXX = $(ICC)
  WARNFLAGS =
  DEPFLAGS =
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -O3 -ip -Qoption,c,-ip_ninl_max_stats=500 -Qoption,c,-ip_ninl_max_total_stats=5000
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),inteldebug80)
  BUILD_TYPE = inteldebug80
  BUILD_MODE := debug
  CC  = $(ICC)
  CXX = $(ICC)
  WARNFLAGS =
  DEPFLAGS =
  DEBUGFLAGS := -O0 -g
  OPTFLAGS :=
  COPTFLAGS := -std=c99
  INCLUDE_DIRS += -Isrc/platform/linux
  LDLIBS =
  LIB_OBJ += lib/i686-pc-linux-gnu/libz.a
  STRIP = touch
endif


# Mac OS X Builds ______________________________________________________________

ifeq ($(MAKECMDGOALS),mac)
  BUILD_TYPE = mac
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS) -Wno-long-double
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  LDFLAGS := -Llib
  # Set stack size to max 64M at link time
  LDFLAGS += -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),mactel)
  BUILD_TYPE = mactel
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS) -Wno-long-double
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s -march=prescott
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  # XXX: Fill out platform path for macttel
  INCLUDE_DIRS += -Isrc/platform/macos/
  LDFLAGS := -Llib
  # Set stack size to max 64M at link time
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.5u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),macteldebug)
  BUILD_TYPE = macteldebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_DEBUG_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  # XXX: Fill out platform path for macttel
  INCLUDE_DIRS += -Isrc/platform/macos/
  LDFLAGS := -Llib
  # Set stack size to max 64M at link time
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.5u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),macdebug)
  BUILD_TYPE = macdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_DEBUG_WARNFLAGS)
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  LDFLAGS := -Llib
  # Set stack size to max 64M at link time
  LDFLAGS += -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),mac33)
  BUILD_TYPE = mac33
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS) -Wno-long-double
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  # OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -fforce-mem
  OPTFLAGS += -foptimize-sibling-calls
  OPTFLAGS += -fstrength-reduce
  OPTFLAGS += -fcse-follow-jumps
  OPTFLAGS += -frerun-cse-after-loop
  # OPTFLAGS += -frerun-loop-opt
  OPTFLAGS += -fdelete-null-pointer-checks
  OPTFLAGS += -fexpensive-optimizations
  OPTFLAGS += -fregmove
  # OPTFLAGS += -fschedule-insns
  # OPTFLAGS += -fschedule-insns2
  OPTFLAGS += -fsched-interblock
  OPTFLAGS += -fsched-spec
  OPTFLAGS += -fcaller-saves
  OPTFLAGS += -fpeephole2
  OPTFLAGS += -freorder-blocks
  OPTFLAGS += -fstrict-aliasing
  OPTFLAGS += -falign-functions
  OPTFLAGS += -falign-jumps
  OPTFLAGS += -falign-loops
  OPTFLAGS += -falign-labels
  OPTFLAGS += -frename-registers
  OPTFLAGS += -DNDEBUG -O
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  # Set stack size to max 64M at link time
  LDFLAGS := -Llib
  LDFLAGS += -Wl,-stack_size,4000000,-stack_addr,0xc0000000 -Llib
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = strip
endif

# [dek] See http://boinc.berkeley.edu/mac_build.html for boinc mac
# build instructions.
ifeq ($(MAKECMDGOALS),macboincgraphics)
  BUILD_TYPE = macboincgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -DNDEBUG -O3 -s
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -falign-loops-max-skip=15 -falign-jumps-max-skip=15
  OPTFLAGS += -falign-loops=16 -falign-functions=16 -falign-labels=16 -falign-jumps=16 -mno-multiple
  OPTFLAGS += -ftree-loop-linear -fsched-interblock -fgcse-sm
  OPTFLAGS += -faltivec -maltivec
  OPTFLAGS += -static-libgcc
  OPTFLAGS += -fno-use-cxa-atexit # cxa_atexit only exists in 10.4 system libs
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DBOINC_GRAPHICS
  OPTFLAGS += -DMAC
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -framework Cocoa
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -L../boinc/mac_build/build/Deployment-no64 -lboinc_graphics_api #-lboinc_api -lboinc
  STRIP = strip
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib -I../boinc/lib/mac -include ../boinc/clientgui/mac/config.h
  SRC_PATH += boinc ../boinc ../boinc/lib ../boinc/api ../boinc/lib/mac
  include boinc/make/Boinc.src
  include boinc/make/BoincRosetta.src
  include boinc/make/BoincMac.src
endif

ifeq ($(MAKECMDGOALS),macboincgraphicsdebug)
  BUILD_TYPE = macboincgraphicsdebug
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -falign-loops-max-skip=15 -falign-jumps-max-skip=15
  OPTFLAGS += -falign-loops=16 -falign-functions=16 -falign-labels=16 -falign-jumps=16 -mno-multiple
  OPTFLAGS += -ftree-loop-linear -fsched-interblock -fgcse-sm
  OPTFLAGS += -faltivec -maltivec
  OPTFLAGS += -static-libgcc
  OPTFLAGS += -fno-use-cxa-atexit # cxa_atexit only exists in 10.4 system libs
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DBOINC_GRAPHICS
  OPTFLAGS += -DMAC
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -framework Cocoa
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -L../boinc/mac_build/build/Deployment -lboinc_graphics_api # -lboinc_api -lboinc
  STRIP = touch
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib -I../boinc/lib/mac -include ../boinc/clientgui/mac/config.h
  SRC_PATH += boinc ../boinc ../boinc/lib ../boinc/api ../boinc/lib/mac
  include boinc/make/Boinc.src
  include boinc/make/BoincRosetta.src
  include boinc/make/BoincMac.src
endif

ifeq ($(MAKECMDGOALS),mactelboincgraphics)
  BUILD_TYPE = mactelboincgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)

  DEBUGFLAGS :=
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -DNDEBUG -O3 -s
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DBOINC_GRAPHICS
  OPTFLAGS += -DMAC
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  # XXX: Fill out platform path for mactel
  INCLUDE_DIRS += -Isrc/platform/macos/
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -framework Cocoa
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -L../boinc/mac_build/build/Deployment-no64 -lboinc_graphics_api -lboinc_api -lboinc
  STRIP = strip
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib -I../boinc/lib/mac -include ../boinc/clientgui/mac/config.h
  SRC_PATH += boinc ../boinc ../boinc/lib ../boinc/api ../boinc/lib/mac
  include boinc/make/BoincRosetta.src
endif

ifeq ($(MAKECMDGOALS),mactelboincgraphicsdebug)
  BUILD_TYPE = mactelboincgraphicsdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -O0
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DBOINC_GRAPHICS
  OPTFLAGS += -DMAC
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  # XXX: Fill out platform path for mactel
  INCLUDE_DIRS += -Isrc/platform/macos/
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -framework Cocoa
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  LDLIBS += -L../boinc/mac_build/build/Deployment -lboinc_graphics_api -lboinc_api -lboinc
  STRIP = touch
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib -I../boinc/lib/mac -include ../boinc/clientgui/mac/config.h
  SRC_PATH += boinc ../boinc ../boinc/lib ../boinc/api ../boinc/lib/mac
  include boinc/make/BoincRosetta.src
endif

ifeq ($(MAKECMDGOALS),macgraphicsdebug)
  BUILD_TYPE = macgraphicsdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS) -Wno-long-double
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  OPTFLAGS += -DMAC
  OPTFLAGS += -DGL_GRAPHICS
  COPTFLAGS := -std=c99
  CXXOPTFLAGS := -std=c++98
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  # Set stack size to max 64M at link time
  LDFLAGS := -Llib
  LDFLAGS += -Wl,-stack_size,4000000,-stack_addr,0xc0000000 -Llib
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),macgraphics)
  BUILD_TYPE = macgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -O3 -s
  OPTFLAGS += -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -falign-loops-max-skip=15 -falign-jumps-max-skip=15
  # For Altivec
  OPTFLAGS += -falign-loops=16 -falign-functions=16 -falign-labels=16 -falign-jumps=16 -mno-multiple
  OPTFLAGS += -ftree-loop-linear -fsched-interblock -fgcse-sm
  OPTFLAGS += -faltivec -maltivec # for altivec
  OPTFLAGS += -static-libgcc
  OPTFLAGS += -DBOINC
  OPTFLAGS += -DMAC
  OPTFLAGS += -DGL_GRAPHICS
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework Cocoa
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/macOSX/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = strip
endif

ifeq ($(MAKECMDGOALS),mactelgraphicsdebug)
  BUILD_TYPE = mactelgraphicsdebug
  BUILD_MODE := debug
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = $(GCC_WARNFLAGS) -Wno-long-double
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS := -ggdb -ffloat-store
  OPTFLAGS := -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -O0
  OPTFLAGS += -DMAC
  OPTFLAGS += -DGL_GRAPHICS
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib
  # Set stack size to max 64M at link time
  LDFLAGS := -Llib
  LDFLAGS += -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = touch
endif

ifeq ($(MAKECMDGOALS),mactelgraphics)
  BUILD_TYPE = mactelgraphics
  BUILD_MODE := release
  CC  = $(GCC)
  CXX = $(GXX)
  WARNFLAGS = -Wall -W -Wno-unused-variable
  DEPFLAGS = $(GCC_DEPFLAGS)
  DEBUGFLAGS :=
  OPTFLAGS := -DNDEBUG -O3 -s
  OPTFLAGS += -pipe -ffor-scope -fno-exceptions
  OPTFLAGS += -ffast-math -funroll-loops
  OPTFLAGS += -finline-functions -finline-limit=20000
  OPTFLAGS += -falign-loops-max-skip=15 -falign-jumps-max-skip=15
  OPTFLAGS += -ftree-loop-linear -fsched-interblock -fgcse-sm
  OPTFLAGS += -static-libgcc
  OPTFLAGS += -DMAC
  OPTFLAGS += -DGL_GRAPHICS
  COPTFLAGS := -std=c99
  COPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  CXXOPTFLAGS := -std=c++98
  CXXOPTFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk
  INCLUDE_DIRS += -Isrc/platform/macos/10.4/32/ppc/gcc
  INCLUDE_DIRS += -Iboinc -I../boinc -I../boinc/api -I../boinc/lib
  LDFLAGS := -Llib
  LDFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-stack_size,4000000,-stack_addr,0xc0000000
  LDFLAGS += -framework Cocoa
  LDFLAGS += -framework GLUT -framework OpenGL -L/usr/X11R6/lib
  LDFLAGS += -static-libgcc
  LIB_OBJ += lib/mactel/libz.a
  LDLIBS = $(GCC_LDLIBS)
  STRIP = strip
endif

# IBM XLC++ 8.0 build (PowerPC Blue Gene) ______________________________________

ifeq ($(MAKECMDGOALS),xlc++_ppc)
  BUILD_TYPE := xlc++_ppc
  BUILD_MODE := release
  CC  = mpcc
  CXX = mpCC
  DEPFLAGS = -MT.$(BUILD_TYPE).$(*F).d -MF.$(BUILD_TYPE).$(*F).d
  OPTFLAGS := -O3 -qhot=nosimd -DNDEBUG -DUSEMPI -qarch=440 -qtune=440 -qmaxmem=-1
  CXXOPTFLAGS := -qlanglvl=c99__func__
  INCLUDE_DIRS += -Isrc/platform/linux/
  LIB_OBJ += ./libz.a
  LDLIBS = -L/bgl/BlueLight/V1R2M1_020_2006-060110/ppc/bglsys/lib/ -lcxxmpich.rts -lmpich.rts -\lmsglayer.rts -lrts.rts -ldevices.rts
  STRIP = /bgl/BlueLight/ppcfloor/blrts-gnu/bin/powerpc-bgl-blrts-gnu-strip
endif


# IBM XLC++ 8.0 debug build (PowerPC Blue Gene) ________________________________

ifeq ($(MAKECMDGOALS),xlc++_ppc_debug)
  BUILD_TYPE := xlc++_ppc_debug
  BUILD_MODE := debug
  CC  = mpcc
  CXX = mpCC
  DEPFLAGS = -MT.$(BUILD_TYPE).$(*F).d -MF.$(BUILD_TYPE).$(*F).d
  DEBUGFLAGS := -g
  OPTFLAGS := -O0 -qhot=nosimd -DUSEMPI -qarch=440 -qtune=440 -qmaxmem=-1
  CXXOPTFLAGS := -qlanglvl=c99__func__
  INCLUDE_DIRS += -Isrc/platform/linux/
  LIB_OBJ += ./libz.a
  LDFLAGS = -Llib    # jk note: "static" will lead to a stripped build, not suitable for debugging!
  LDLIBS = -L/bgl/BlueLight/V1R2M1_020_2006-060110/ppc/bglsys/lib/ -lcxxmpich.rts -lmpich.rts -\lmsglayer.rts -lrts.rts -ldevices.rts
  STRIP = touch
endif

# IBM XLC++ 7.0 build (Power4 SDSC Datastar) ___________________________________

ifeq ($(MAKECMDGOALS),xlc++_pwr4)
  BUILD_TYPE := xlc++_pwr4
  BUILD_MODE := release
  CC  = mpcc
  CXX = mpCC
  OPTFLAGS := -O3 -DUSEMPI -DNDEBUG -qarch=pwr4 -qtune=pwr4 -qrtti=all -qmaxmem=64000
  COPTFLAGS := -qlanglvl=c99__func__
  # XXX: Fill out platform path for Datastar
  INCLUDE_DIRS +=
  LIB_OBJ += lib/AIX/libz.a
  STRIP = touch
endif



# User Targets _________________________________________________________________

print_targets:	print_scons
	$(user-targets-print)

# Platform specific targets
gcc: print_scons build
gccdebug: print_scons build
gccprofile: print_scons build
gcc34: print_scons build
gcc34profile: print_scons build
gccboinc: print_scons build
gccboincdebug: print_scons build
gccboincgraphics: print_scons build
gccgraphics: print_scons build
gccgraphicsdebug: print_scons build
gccitanium: print_scons build
gccitaniumdebug: print_scons build
mpilam: print_scons build
intel: print_scons build
intelitanium: print_scons build
intelitanium_mpi: print_scons build
inteldebug: print_scons build
intel80: print_scons build
inteldebug80: print_scons build
mac: print_scons build
mactel: print_scons build
macteldebug: print_scons build
macdebug: print_scons build
mac33: print_scons build
macboincgraphics: print_scons build
macboincgraphicsdebug: print_scons build
mactelboincgraphics: print_scons build
mactelboincgraphicsdebug: print_scons build
macgraphics: print_scons build
macgraphicsdebug: print_scons build
mactelgraphics: print_scons build
mactelgraphicsdebug: print_scons build
xlc++_ppc: print_scons build
xlc++_ppc_debug: print_scons build
xlc++_pwr4: print_scons build


# Main target __________________________________________________________________
build: $(LIBS) $(BINNAME).$(BUILD_TYPE)
	$(STRIP) $(BINNAME).$(BUILD_TYPE)

print_scons:
#	@echo "------------------------------------------------------------------------"
#	@echo "ATTENTION!"
#	@echo ""
#	@echo "This makefile has been deprecated!  Please use scons instead."
#	@echo "If scons is not installed in your path you have two choices:"
#	@echo "- Ask your system administrator to install it.  This is preferrable."
#	@echo "- Use 'make scons' to download and install it."
#	@echo ""
#	@echo "To learn how to use SCons either go to the wiki 'Building Rosetta' page:"
#	@echo "  https://wiki.rosettacommons.org/index.php/Building_Rosetta"
#	@echo "or more directly to the SCons documentation:"
#	@echo "  https://www.scons.org/doc/HTML/scons-man.html"
#	@echo "or for a quick start type:"
#	@echo "  scons -h"
#	@echo "------------------------------------------------------------------------"

scons:
	@echo "This build rule will download and install SCons for you."
	@echo "It does an install locally to this directory so you will have to modify"
	@echo "your PATH to use SCons.  If you want SCons to be installed in a default"
	@echo "system location, move the installed version."
	@echo ""
	@echo "Downloading..."
	@echo ""
	wget http://umn.dl.sourceforge.net/sourceforge/scons/scons-0.96.94.tar.gz
	@echo ""
	@echo "Unzipping..."
	@echo ""
	tar zxf scons-0.96.94.tar.gz
	@echo ""
	@echo "Building..."
	@echo ""
	(cd scons-0.96.94; python setup.py build)
	@echo ""
	@echo "Installing SCons in tools/scons-0.96.94/scons"
	@echo ""
	(cd scons-0.96.94; python setup.py install --prefix="../scons")
	rm -rf scons-0.96.94 tools/scons*
	mv -f scons scons-0.96.94.tar.gz tools
	@echo ""
	@echo "Done.  Add tools/scons/bin to your PATH,"
	@echo "or move tools/scons to your choice of system directory."

# Doxygen documentation generator
# Requires dot from graphviz package:
# http://www.research.att.com/sw/tools/graphviz/
DOC = README ROSETTA.LOG \
      IntroductionToRosetta++.html \
      Rosetta++CodingGuidelines.html \
      Rosetta++CommentingGuidelines.html \
      doc/ObjexxFCL/docs
dox: Doxyfile doxygen.h $(SRC) $(DOC)
	doxygen
	cp -r $(DOC) html/

.PHONY: tags $(LIBS)
tags:
	ctags  *.h *.cc # *.hh *.hpp *.ii *.ipp
	etags --language=c++ *.h *.cc # *.hh *.hpp *.ii *.ipp

clean:
	rm -f $(BINNAME).gcc $(BINNAME).gccdebug $(BINNAME).gccprofile
	rm -f $(BINNAME).intel $(BINNAME).inteldebug
	rm -f $(BINNAME).gcc34 $(BINNAME).gcc34profile
	rm -f $(BINNAME).gccboinc
	rm -f $(BINNAME).gccboincdebug
	rm -f $(BINNAME).gccboincgraphics
	rm -f $(BINNAME).gccgraphics
	rm -f $(BINNAME).gccgraphicsdebug
	rm -f $(BINNAME).gccitanium $(BINNAME).gccitaniumdebug
	rm -f $(BINNAME).intelitanium $(BINNAME).intelitanium_mpi
	rm -f $(BINNAME).mac $(BINNAME).mac $(BINNAME).macdebug
	rm -f $(BINNAME).mactel $(BINNAME).macteldebug $(BINNAME).mac33
	rm -f $(BINNAME).macgraphics $(BINNAME).macgraphicsdebug
	rm -f $(BINNAME).mactelgraphics $(BINNAME).mactelgraphicsdebug
	rm -f $(BINNAME).macboincgraphics $(BINAME).macboincgraphicsdebug
	rm -f $(BINNAME).mactelboincgraphics $(BINAME).mactelboincgraphicsdebug
	rm -rf $(BINNAME).xlc++_ppc $(BINNAME).xlc++_ppc_debug $(BINNAME).xlc++_pwr4
	rm -f $(BINNAME).mpilam
	rm -f .*.o boinc/.*.o
	rm -f .*.d
	rm -f tags TAGS

define user-targets-print
@echo "Notes:"
@echo "  - All SCons targets listed assume you have not altered the defaults"
@echo "    in either your site.settings or user.settings."
@echo "  - Note that debug is the default not release."
@echo "  - Any targets listed in [brackets] are either the defaults or automatically"
@echo "    detected.  You shouldnt need to actually type them."
@echo "  - The system will try to autodetect your OS and your processor, so you"
@echo "    should not need to specify them."
@echo "  - The GCC 3.4 targets will only work if you have g++34 in your path."
@echo "  - You probably want to avoid Intel C++ 8.0.  There's no guarantee it works."
@echo "  - GCC 3.3 will not build the current Rosetta++ so don't expect it to work."
@echo
@echo "Make target options               SCons target"
@echo
@echo "gcc                               scons mode=release"
@echo "gccdebug                          scons [mode=debug]"
@echo "gccprofile                        scons mode=profile"
@echo "gcc34                             scons cxx_ver=3.4 mode=release"
@echo "gcc34profile                      scons cxx_ver=3.4 mode=profile"
@echo "gccboinc                          scons mode=release extras=boinc"
@echo "gccboincdebug                     scons [mode=debug] extras=boinc"
@echo "gccboincgraphics                  scons mode=release extras=boinc,graphics"
@echo "gccgraphics                       scons mode=release extras=graphics"
@echo "gccgraphicsdebug                  scons [mode=debug] extras=graphics"
@echo "gccitanium                        scons mode=release [arch=ia64]"
@echo "gccitaniumdebug                   scons [mode=debug] [arch=ia64]"
@echo
@echo "intel                             scons cxx=icc mode=release"
@echo "intelitanium                      scons cxx=icc [arch=ia64] mode=release"
@echo "intelitanium_mpi                  scons cxx=mpi [arch=ia64] mode=release"
@echo "inteldebug                        scons cxx=icc [mode=debug]"
@echo "intel80                           scons cxx=icc cxx_ver=8.0 mode=release"
@echo "inteldebug80                      scons cxx_icc cxx_ver=8.0 [mode=debug]"
@echo
@echo "mac                               scons mode=release"
@echo "macdebug                          scons [mode=debug]"
@echo "mactel                            scons mode=release"
@echo "macteldebug                          scons [mode=debug]"
@echo "mac33                             scons cxx_ver=3.3"
@echo "macboincgraphics                  scons extras=boinc,graphics mode=release"
@echo "macboincgraphicsdebug             scons extras=boinc,graphics [mode=debug]"
@echo "mactelboincgraphics               scons extras=boinc,graphics mode=release"
@echo "mactelboincgraphicsdebug          scons extras=boinc,graphics [mode=debug]"
@echo "macgraphics                       scons extras=graphics mode=release"
@echo "macgraphicsdebug                  scons extras=graphics [mode=debug]"
@echo "mactelgraphics                    scons extras=graphics mode=release"
@echo "mactelgraphicsdebug               scons extras=graphics [mode=debug]"
@echo
@echo "mpilam                            scons cxx=mpi mode=release"
@echo "xlc++_ppc                         scons cxx=xlc cxx_ver=8.0 arch=ppc mode=release"
@echo "xlc++_ppc_debug                   scons cxx=xlc cxx_ver=8.0 arch=ppc [mode=debug]"
@echo "xlc++_pwr4                        scons cxx=xlc cxx_ver=7.0 arch=power4 mode=release"
@echo
@echo "dox                               scons kinds=doc (Not working yet)"
@echo "tags                              No equivalent.  Run etags/ctags yourself."
@echo "clean                             scons -c"
@echo
endef


# Custom Implicit Build Rules __________________________________________________

.$(BUILD_TYPE).%.o : %.cc
	@echo
	$(CXX) -c $(CXXFLAGS) $(DEPFLAGS) $< -o $@

.$(BUILD_TYPE).%.o : %.C
	@echo
	$(CC) -c $(CFLAGS) $(DEPFLAGS) $< -o $@

.$(BUILD_TYPE).%.o : %.c
	@echo
	$(CC) -c $(CFLAGS) $(DEPFLAGS) $< -o $@

.intel80.%.d: %.cc
	@# auto-generate source and header dependencies
	$(GXX) $(INCLUDE_DIRS) -MM -MT $@ -MF $@ -MP $<
	@echo >> $@
	@sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' -e '/^$$/ d' -e 's/$$/ :/' -e 's/^ *//' $@ > $@.tmp
	@cat $@.tmp >> $@
	@rm $@.tmp

.inteldebug80.%.d: %.cc
	@# auto-generate source and header dependencies
	$(GXX) $(INCLUDE_DIRS) -MM -MT $@ -MF $@ -MP $<
	@echo >> $@
	@sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' -e '/^$$/ d' -e 's/$$/ :/' -e 's/^ *//' $@ > $@.tmp
	@cat $@.tmp >> $@
	@rm $@.tmp


# version_rosetta.cc is created from other .cc files to encode version info
version_rosetta.cc: $(filter-out version_rosetta.cc, $(SRC)) version.csh
	@./version.csh


# Internal targets _____________________________________________________________

$(BINNAME).$(BUILD_TYPE): $(OBJ) $(LIB_OBJ)
	@echo
	@# Update library archive index
	@list='$(LIB_OBJ)'; for p in $$list; do \
	if test -f $$p; then \
	  echo " $(RANLIB) '$$p'"; \
	  $(RANLIB) "$$p"; \
	else :; fi; \
	done
	$(CXX) $(LDFLAGS) $(OBJ) $(LIB_OBJ) $(LDLIBS) -o $@


# Library targets ______________________________________________________________

#$(LIBS):
#	scons $@ mode=$(BUILD_MODE)


# Include Dependency Files _____________________________________________________

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),tags)
ifneq ($(MAKECMDGOALS),)
ifneq ($(DEPS),)
-include $(DEPS)
endif
endif
endif
endif


# Search Paths _________________________________________________________________

vpath %.C	$(SRC_PATH)
vpath %.c	$(SRC_PATH)
vpath %.cc	$(SRC_PATH)
vpath %.cpp	$(SRC_PATH)
vpath %.cxx	$(SRC_PATH)
vpath %.csh	$(SRC_PATH)
vpath %.f	$(SRC_PATH)
vpath %.h	$(SRC_PATH)
vpath %.hh	$(SRC_PATH)
vpath %.hpp	$(SRC_PATH)
vpath %.hxx	$(SRC_PATH)
vpath %.ii	$(SRC_PATH)
vpath %.ipp	$(SRC_PATH)


# Directives ___________________________________________________________________

.DELETE_ON_ERROR : # Delete a target if error occurs during command execution
