# $Id: Makefile,v 1.13 1999/03/09 14:56:28 shields Exp $
#
# This software is subject to the terms of the IBM Jikes Compiler Open
# Source License Agreement available at the following URL:
# http://www.ibm.com/research/jikes.
# Copyright (C) 1996, 1999, International Business Machines Corporation
# and others.  All Rights Reserved.
# You must accept the terms of that agreement to use this software.

# Symbols used:
# O is suffix for object file. OBJECTS is list of objects file for Jikes.
#SYSOBJECTS is list of needed system files (typically setargv for non-unix system).
# EXECUTABLE names executable 
# CC is compiler. LD is linker. ERASE erases files.
# CCREQUIREDFLAGS gives CC flags that must be used; CCDEBUGFLAGS gives
# flags for debug, CCOPTFLAGS gives flags for optimized version
# LDFLAGS gives required LD flags; LDDEBUGFLAGS gives flags to link for debug

# Here are definitions for a number of OS's.
# Uncomment the clause for your system before running make.

# g++ definitions (SGI IRIX 5.X, 6.X)
# Use -mgas instead of -mmips-as to enable the gnu assembler.
# courtesy of Moses DeJong (dejong at cs.umn.edu), 25 Feb 99
#
#CC=g++
#CCREQUIREDFLAGS=-c -DUNIX -DBIGENDIAN -DTYPE_bool -ansi -mmips-as
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O3
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o $(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
## Sun Solaris Sparc  definitions using IBM icc compiler
## NOTE: Only use this is using IBM's compiler 
#CC=xlC
#CCREQUIREDFLAGS=-DUNIX -DBIGENDIAN -langlvl=ansi -+ -c -qnotempinc
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O3 -qstrict
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=xlC
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -Bstatic -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
## Sun Solaris CC definitions (SunOS) (add +w for extra warnings)
## provided by mo dejong (dejong at cs.umn.edu), 2 Feb 1999
#CC=CC
#CCREQUIREDFLAGS=-c -DUNIX -DBIGENDIAN
#CCDEBUGFLAGS=-DTEST -g -xs
#CCOPTFLAGS=-fast
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=CC
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o $(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
## g++ definitions (Solaris), courtesy of Philip Brown (phil@bolthole.com)
#CC=g++
## use -W to see warnings (should review from time to time)
#CCREQUIREDFLAGS=-DBIGENDIAN -DUNIX -funsigned-char  -c -DTYPE_bool -ansi 
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
#
## OS/2 definitions for IBM Cset++ (icc) compiler
#CC=icc
#CCREQUIREDFLAGS=-c -Tdp -G5 -DICC -Dcerr=cout -DUNIX_FILE_SYSTEM
#CCDEBUGFLAGS=-DTEST -Ti
#CCOPTFLAGS=-Tdp -O -DNDEBUG 
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes.exe
#LD=ilink
#LDDEBUGFLAGS=/Ti+
#LDFLAGS=/O:$(EXECUTABLE) /PM:VIO /STACK:400000 /NOE
#O=obj
#SYSOBJECTS=d:\ibmcpp\lib\setargv.obj
#
## gcc definitions
#CC=gcc
#CCREQUIREDFLAGS=-DUNIX -DBIGENDIAN -c -DTYPE bool -ansi -W
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=ld
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
## g++ definitions (RedHat 5.* - libc5)
#CC=g++
## use -W to see warnings (should review from time to time)
#CCREQUIREDFLAGS=-DGNU_LIBC5 -DUNIX -funsigned-char  -c -DTYPE_bool -ansi 
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
#
## HP-UX/g++ changes
## courtesy of Kero van Gelder (gelderk@natlab.research.philips.com)
#CC=g++
## use -W to see warnings (should review from time to time)
#CCREQUIREDFLAGS=-D_INCLUDE_POSIX_SOURCE -DSTAT_POSIX_1 -DUNIX -funsigned-char  -c -DTYPE_bool -ansi
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
##CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=$(LDDEBUGFLAGS) -L. -o$(EXECUTABLE) -lstdc++
#O=o
#SYSOBJECTS=
#
## g++ definitions (RedHat 5.* - libc5)
#CC=g++
## use -W to see warnings (should review from time to time)
#CCREQUIREDFLAGS=-DGNU_LIBC5 -DUNIX -funsigned-char  -c -DTYPE_bool -ansi 
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=
#
#
## AIX definitions
#CC=xlC
#CCREQUIREDFLAGS=-DUNIX -DBIGENDIAN -langlvl=ansi -qnotempinc -+ -qinlglue -c
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O3 -qstrict
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=xlC
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE) $(LDDEBUGFLAGS)
#O=o
#SYSOBJECTS=
#
## Win95/NT definitions for IBM Cset++ (icc) compiler
## Note there are known problems with IEEE if Microsoft's compiler is used
#CC=g:\icc\bin\icc
#CCREQUIREDFLAGS=-c -Gx -Tdp -DWIN32_FILE_SYSTEM -DICC -Dcerr=cout 
#CCDEBUGFLAGS=-DTEST -Ti
#CCOPTFLAGS=-Tdp -O -DNDEBUG 
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes.exe
#LD=g:\icc\bin\ilink
#LDDEBUGFLAGS=/DEBUG
#LDFLAGS=/O:$(EXECUTABLE) /PM:VIO /STACK:400000 /NOE
#O=obj
#SYSOBJECTS=g:\icc\lib\setargv.obj
#
## g++ definitions (RedHat 5.* - glibc)
#CC=g++
## use -W to see warnings (should review from time to time)
#CCREQUIREDFLAGS=-DSTAT_POSIX -DUNIX -funsigned-char  -c -DTYPE_bool -ansi 
#CCDEBUGFLAGS=-DTEST -g
#CCOPTFLAGS=-O
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCDEBUGFLAGS)
#CCFLAGS=$(CCREQUIREDFLAGS) $(CCOPTFLAGS)
#ERASE=rm -f
#EXECUTABLE=jikes
#LD=g++
#LDDEBUGFLAGS=-g
#LDFLAGS=-L. -o$(EXECUTABLE)
#O=o
#SYSOBJECTS=


OBJECTS=jikes.$(O) scanner.$(O) code.$(O) zip.$(O) unzip.$(O) ast.$(O) diagnose.$(O) \
	parser.$(O) lpginput.$(O) javaact.$(O) error.$(O) set.$(O) symbol.$(O) \
	lookup.$(O) long.$(O) depend.$(O) stream.$(O) op.$(O) control.$(O) \
	modifier.$(O) system.$(O) bytecode.$(O) body.$(O) \
	decl.$(O) definite.$(O) dump.$(O) expr.$(O) getclass.$(O) \
	init.$(O) double.$(O) config.$(O) option.$(O) incrmnt.$(O) case.$(O) tab.$(O)


all:  $(EXECUTABLE)

$(EXECUTABLE):	$(OBJECTS)
	$(LD) $(LDFLAGS)  $(OBJECTS) $(SYSOBJECTS)

jikes.$(O):  jikes.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h 
	$(CC) -c $(CCFLAGS) jikes.cpp 

tab.$(O): tab.h tab.cpp config.h
	$(CC) -c $(CCFLAGS) tab.cpp

javasym.h: java.g
	jikespg java.g
	$(ERASE) java.l

javadef.h: java.g
	jikespg java.g
	$(ERASE) java.l

javadcl.h: java.g
	jikespg java.g
	$(ERASE) java.l

javaprs.h: java.g
	jikespg java.g
	$(ERASE) java.l


config.$(O):  config.cpp config.h 
	$(CC) -c $(CCFLAGS) config.cpp 

code.$(O):  code.cpp code.h config.h bool.h 
	$(CC) -c $(CCFLAGS) code.cpp 

case.$(O):  case.cpp config.h case.h bool.h 
	$(CC) -c $(CCFLAGS) case.cpp 

ast.$(O):  ast.cpp config.h unicode.h bool.h code.h case.h ast.h stream.h \
	  javadef.h javasym.h tuple.h tab.h lookup.h long.h double.h \
	  symbol.h option.h depend.h access.h 
	$(CC) -c $(CCFLAGS) ast.cpp 

symbol.$(O):  symbol.cpp config.h stream.h javadef.h javasym.h tuple.h bool.h \
	  tab.h lookup.h long.h double.h unicode.h code.h case.h control.h \
	  option.h symbol.h depend.h access.h set.h ast.h semantic.h \
	  diagnose.h parser.h lpginput.h javaprs.h javaact.h error.h \
	  table.h zip.h unzip.h 
	$(CC) -c $(CCFLAGS) symbol.cpp 

option.$(O):  option.cpp option.h config.h bool.h code.h tuple.h javasym.h \
	  error.h stream.h javadef.h tab.h lookup.h long.h double.h \
	  unicode.h case.h 
	$(CC) -c $(CCFLAGS) option.cpp 

lookup.$(O):  lookup.cpp config.h lookup.h tuple.h bool.h long.h double.h \
	  symbol.h code.h stream.h javadef.h javasym.h tab.h unicode.h \
	  case.h option.h depend.h access.h ast.h 
	$(CC) -c $(CCFLAGS) lookup.cpp 

double.$(O):  double.cpp config.h double.h bool.h long.h 
	$(CC) -c $(CCFLAGS) double.cpp 

long.$(O):  long.cpp config.h long.h bool.h double.h 
	$(CC) -c $(CCFLAGS) long.cpp 

depend.$(O):  depend.cpp config.h ast.h stream.h javadef.h javasym.h tuple.h \
	  bool.h tab.h lookup.h long.h double.h unicode.h code.h case.h \
	  symbol.h option.h depend.h access.h semantic.h diagnose.h \
	  parser.h lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) depend.cpp 

zip.$(O):  zip.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h zip.h unzip.h 
	$(CC) -c $(CCFLAGS) zip.cpp 

unzip.$(O):  unzip.cpp config.h unzip.h 
	$(CC) -c $(CCFLAGS) unzip.cpp 

stream.$(O):  stream.cpp config.h stream.h javadef.h javasym.h tuple.h bool.h \
	  tab.h lookup.h long.h double.h unicode.h code.h case.h zip.h \
	  unzip.h symbol.h option.h depend.h access.h control.h set.h \
	  semantic.h ast.h diagnose.h parser.h lpginput.h javaprs.h \
	  javaact.h error.h 
	$(CC) -c $(CCFLAGS) stream.cpp 

diagnose.$(O):  diagnose.cpp config.h diagnose.h parser.h lpginput.h stream.h \
	  javadef.h javasym.h tuple.h bool.h tab.h lookup.h long.h double.h \
	  unicode.h code.h case.h javaprs.h javaact.h control.h option.h \
	  symbol.h depend.h access.h set.h semantic.h ast.h error.h spell.h
	$(CC) -c $(CCFLAGS) diagnose.cpp 

parser.$(O):  parser.cpp config.h parser.h lpginput.h stream.h javadef.h \
	  javasym.h tuple.h bool.h tab.h lookup.h long.h double.h unicode.h \
	  code.h case.h javaprs.h javaact.h ast.h symbol.h option.h \
	  depend.h access.h 
	$(CC) -c $(CCFLAGS) parser.cpp 

lpginput.$(O):  lpginput.cpp config.h lpginput.h stream.h javadef.h javasym.h \
	  tuple.h bool.h tab.h lookup.h long.h double.h unicode.h code.h \
	  case.h javaprs.h javadcl.h 
	$(CC) -c $(CCFLAGS) lpginput.cpp 

javaact.$(O):  javaact.cpp config.h parser.h lpginput.h stream.h javadef.h \
	  javasym.h tuple.h bool.h tab.h lookup.h long.h double.h unicode.h \
	  code.h case.h javaprs.h javaact.h ast.h symbol.h option.h \
	  depend.h access.h 
	$(CC) -c $(CCFLAGS) javaact.cpp 

set.$(O):  set.cpp set.h config.h symbol.h code.h bool.h stream.h javadef.h \
	  javasym.h tuple.h tab.h lookup.h long.h double.h unicode.h case.h \
	  option.h depend.h access.h 
	$(CC) -c $(CCFLAGS) set.cpp 

error.$(O):  error.cpp config.h unicode.h bool.h code.h case.h error.h \
	  stream.h javadef.h javasym.h tuple.h tab.h lookup.h long.h \
	  double.h control.h option.h symbol.h depend.h access.h set.h \
	  semantic.h ast.h diagnose.h parser.h lpginput.h javaprs.h \
	  javaact.h 
	$(CC) -c $(CCFLAGS) error.cpp 

scanner.$(O):  scanner.cpp config.h scanner.h code.h bool.h javadef.h javasym.h \
	  stream.h tuple.h tab.h lookup.h long.h double.h unicode.h case.h \
	  control.h option.h symbol.h depend.h access.h set.h error.h 
	$(CC) -c $(CCFLAGS) scanner.cpp 

bytecode.$(O):  bytecode.cpp config.h ast.h stream.h javadef.h javasym.h tuple.h \
	  bool.h tab.h lookup.h long.h double.h unicode.h code.h case.h \
	  symbol.h option.h depend.h access.h bytecode.h class.h semantic.h \
	  diagnose.h parser.h lpginput.h javaprs.h javaact.h error.h \
	  control.h set.h op.h table.h 
	$(CC) -c $(CCFLAGS) bytecode.cpp 

op.$(O):  op.cpp config.h op.h tuple.h bool.h class.h semantic.h ast.h \
	  stream.h javadef.h javasym.h tab.h lookup.h long.h double.h \
	  unicode.h code.h case.h symbol.h option.h depend.h access.h \
	  diagnose.h parser.h lpginput.h javaprs.h javaact.h error.h \
	  control.h set.h 
	$(CC) -c $(CCFLAGS) op.cpp 

control.$(O):  control.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h scanner.h \
	  parser.h lpginput.h javaprs.h javaact.h semantic.h ast.h \
	  diagnose.h error.h bytecode.h class.h op.h 
	$(CC) -c $(CCFLAGS) control.cpp 

modifier.$(O):  modifier.cpp config.h semantic.h ast.h stream.h javadef.h \
	  javasym.h tuple.h bool.h tab.h lookup.h long.h double.h unicode.h \
	  code.h case.h symbol.h option.h depend.h access.h diagnose.h \
	  parser.h lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) modifier.cpp 

system.$(O):  system.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h semantic.h \
	  ast.h diagnose.h parser.h lpginput.h javaprs.h javaact.h error.h \
	  zip.h unzip.h 
	$(CC) -c $(CCFLAGS) system.cpp 

wom.$(O):  wom.cpp config.h semantic.h ast.h stream.h javadef.h javasym.h \
	  tuple.h bool.h tab.h lookup.h long.h double.h unicode.h code.h \
	  case.h symbol.h option.h depend.h access.h diagnose.h parser.h \
	  lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) wom.cpp 


body.$(O):  body.cpp config.h semantic.h ast.h stream.h javadef.h javasym.h \
	  tuple.h bool.h tab.h lookup.h long.h double.h unicode.h code.h \
	  case.h symbol.h option.h depend.h access.h diagnose.h parser.h \
	  lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) body.cpp 

decl.$(O):  decl.cpp config.h semantic.h ast.h stream.h javadef.h javasym.h \
	  tuple.h bool.h tab.h lookup.h long.h double.h unicode.h code.h \
	  case.h symbol.h option.h depend.h access.h diagnose.h parser.h \
	  lpginput.h javaprs.h javaact.h error.h control.h set.h table.h 
	$(CC) -c $(CCFLAGS) decl.cpp 

definite.$(O):  definite.cpp config.h semantic.h ast.h stream.h javadef.h \
	  javasym.h tuple.h bool.h tab.h lookup.h long.h double.h unicode.h \
	  code.h case.h symbol.h option.h depend.h access.h diagnose.h \
	  parser.h lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) definite.cpp 

dump.$(O):  dump.cpp config.h javasym.h control.h option.h bool.h code.h \
	  tuple.h symbol.h stream.h javadef.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h 
	$(CC) -c $(CCFLAGS) dump.cpp 

expr.$(O):  expr.cpp double.h config.h bool.h parser.h lpginput.h stream.h \
	  javadef.h javasym.h tuple.h tab.h lookup.h long.h unicode.h \
	  code.h case.h javaprs.h javaact.h semantic.h ast.h symbol.h \
	  option.h depend.h access.h diagnose.h error.h control.h set.h \
	  table.h spell.h
	$(CC) -c $(CCFLAGS) expr.cpp 

getclass.$(O):  getclass.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h semantic.h \
	  ast.h diagnose.h parser.h lpginput.h javaprs.h javaact.h error.h \
	  getclass.h zip.h unzip.h 
	$(CC) -c $(CCFLAGS) getclass.cpp 

incrmnt.$(O):  incrmnt.cpp config.h control.h option.h bool.h code.h tuple.h \
	  symbol.h stream.h javadef.h javasym.h tab.h lookup.h long.h \
	  double.h unicode.h case.h depend.h access.h set.h scanner.h \
	  parser.h lpginput.h javaprs.h javaact.h semantic.h ast.h \
	  diagnose.h error.h 
	$(CC) -c $(CCFLAGS) incrmnt.cpp 

init.$(O):  init.cpp config.h semantic.h ast.h stream.h javadef.h javasym.h \
	  tuple.h bool.h tab.h lookup.h long.h double.h unicode.h code.h \
	  case.h symbol.h option.h depend.h access.h diagnose.h parser.h \
	  lpginput.h javaprs.h javaact.h error.h control.h set.h 
	$(CC) -c $(CCFLAGS) init.cpp 

clean:
	$(ERASE) $(EXECUTABLE)
	$(ERASE) $(OBJECTS)
