#  $Id: makefile_public 16577 2010-03-26 11:47:17Z dean kuo $
#-------------------------------------------------------------------------------
#  (C) Altran Praxis Limited
#-------------------------------------------------------------------------------
# 
#  The SPARK toolset is free software; you can redistribute it and/or modify it
#  under terms of the GNU General Public License as published by the Free
#  Software Foundation; either version 3, or (at your option) any later
#  version. The SPARK toolset is distributed in the hope that it will be
#  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
#  Public License for more details. You should have received a copy of the GNU
#  General Public License distributed with the SPARK toolset; see file
#  COPYING3. If not, go to http://www.gnu.org/licenses for a complete copy of
#  the license.
# 
#===============================================================================


################################################################################
# PURPOSE
#-------------------------------------------------------------------------------
# Makefile for the Simplifier
# Build the Simplifier on NT, Solaris, Linux or MacOS X
################################################################################


################################################################################
# BUILD CONFIGURATION
################################################################################

# Name of the output program.
OUTPUTNAME_SIMPLIFIER:=spadesimp
OUTPUTNAME_ZOMBIESCOPE:=zombiescope

################################################################################
# DETERMINE HOST INFORMATION
################################################################################

# Determine which platform this makefile is being run on.
TARGET := $(shell uname -s)

# Canonicalize the target string.
ifeq ($(findstring CYGWIN_NT,${TARGET}),CYGWIN_NT)
   TARGET:=Windows
endif


################################################################################
# PLATFORM INDEPENDENT CONFIGURATION
################################################################################

ROOT:=..
COMMON:=${ROOT}/common
SICSTUSLIBS:=codesio
SICSTUSSWITCHES:=-f --nologo --noinfo
SAVEXTN:=.sav

################################################################################
# PLATFORM SPECIFIC CONFIGURATION
################################################################################

# Windows.
ifeq (${TARGET},Windows)
    EXEEXTN:=.exe

    # Do not embedded a manifest, as these can contain false dependencies.
    # Instead, use manually generated, and correct, external manifest.
    SPLD_CONF:=--no-embed-manifest
endif

# Solaris.
ifeq (${TARGET},SunOS)
    EXEEXTN:=
    SPLD_CONF:=
endif

# Linux.
ifeq (${TARGET},Linux)
    EXEEXTN:=
    SPLD_CONF:=
endif

# Darwin (Mac OS X).
ifeq (${TARGET},Darwin)
    # Modify PATH to pick up Apple's gcc before GNAT Pro.
    PATH:=/usr/bin:${PATH}
    EXEEXTN:=
    SPLD_CONF:=
endif


################################################################################
# TARGETS
################################################################################

all: ${OUTPUTNAME_SIMPLIFIER}${EXEEXTN} ${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN}

# Note that the build assumes PATH is set to include SICStus binaries and (on
# Windows) MS VC Tools and LIB and INCLUDE are set to point at MS VC libraries
# and includes respectively.

${OUTPUTNAME_SIMPLIFIER}${EXEEXTN}: manifest
	sicstus ${SICSTUSSWITCHES} --goal "compile('simplifier.pro'), add_system_toolname('Simplifier'), buildsav_simplifier."
	spld ${SPLD_CONF} -o ${OUTPUTNAME_SIMPLIFIER}${EXEEXTN} --static --resources=${OUTPUTNAME_SIMPLIFIER}${SAVEXTN}=/${OUTPUTNAME_SIMPLIFIER}${SAVEXTN},${SICSTUSLIBS}

${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN}: manifest_zombiescope
	sicstus ${SICSTUSSWITCHES} --goal "compile('simplifier.pro'), add_system_toolname('ZombieScope'), buildsav_zombiescope."
	spld ${SPLD_CONF} -o ${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN} --static --resources=${OUTPUTNAME_ZOMBIESCOPE}${SAVEXTN}=/${OUTPUTNAME_ZOMBIESCOPE}${SAVEXTN},${SICSTUSLIBS}

# Manifest only required on Windows.
ifeq ($(findstring ${TARGET},Windows),${TARGET})

manifest:
	cp ${OUTPUTNAME_SIMPLIFIER}.windows.manifest ${OUTPUTNAME_SIMPLIFIER}${EXEEXTN}.manifest

manifest_zombiescope:
	cp ${OUTPUTNAME_ZOMBIESCOPE}.windows.manifest ${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN}.manifest

else
manifest:
manifest_zombiescope:
endif

build_profiled_without_flexlm:
	sicstus ${SICSTUSSWITCHES} --goal "prolog_flag(compiling, _, profiledcode), compile('simplifier.pro'), buildsav_profiled."
	spld ${SPLD_CONF} -o ${OUTPUTNAME}${EXEEXTN} --static --resources=${OUTPUTNAME}${SAVEXTN}=/${OUTPUTNAME}${SAVEXTN},${SICSTUSLIBS}
	chmod a+rx ${OUTPUTNAME}${EXEEXTN}

spxref:
	spxref -R -i spxref.pro simplifier.pro -w spxref_warning.txt -x spxref_cross.txt -m spxref_ported.txt -u spxref_undefined.txt

spxrefplain:
	spxref -R -i spxref.pro simplifier.pro -w spxref_warning.txt -x spxref_cross.txt -m spxref_ported.txt -u spxref_undefined.txt
	# Normalize anonymous prolog variables.
	sed -e 's/_[0-9][0-9]*/_/g' spxref_undefined.txt > spxref_undefined.txt.tmp
	mv spxref_undefined.txt.tmp spxref_undefined.txt

clean:
	rm -f spadesimp.sav spadesimp.exp spadesimp.ilk spadesimp.lib spadesimp.pdb
	rm -f zombiescope.sav zombiescope.exp zombiescope.ilk zombiescope.lib zombiescope.pdb

reallyclean: clean
	rm -f ${OUTPUTNAME_SIMPLIFIER}${EXEEXTN}
	rm -f ${OUTPUTNAME_SIMPLIFIER}${EXEEXTN}.manifest
	rm -f ${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN}
	rm -f ${OUTPUTNAME_ZOMBIESCOPE}${EXEEXTN}.manifest
	rm -f spxref_warning.txt spxref_cross.txt spxref_ported.txt spxref_undefined.txt


################################################################################
# END-OF-FILE
