1246149Ssjg#	$Id: Generic.mk,v 1.11 2010/09/24 05:59:53 sjg Exp $
2246149Ssjg#
3246149Ssjg
4246149Ssjg# some reasonable defaults
5246149Ssjg.SUFFIXES: .out .a .ln .o .s .S .c .cc .cpp .cxx .C .F .f .r .y .l .cl .p .h
6246149Ssjg.SUFFIXES: .sh .m4
7246149Ssjg
8246149Ssjg.LIBS:		.a
9246149Ssjg
10246149Ssjgtools = \
11246149Ssjg	ar \
12246149Ssjg	lorder \
13246149Ssjg	ranlib \
14246149Ssjg	tsort
15246149Ssjg
16246149Ssjg.for t in ${tools}
17246149Ssjg${t:tu} := ${t:${M_whence}}
18246149Ssjg.endfor
19246149Ssjg
20246149Ssjg# need to make sure this is set
21246149SsjgMACHINE_ARCH.${MACHINE} ?= ${MACHINE}
22246149Ssjg.if empty(MACHINE_ARCH)
23246149SsjgMACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}}
24246149Ssjg.endif
25246149Ssjg
26246149Ssjg.if !empty(TSORT)
27246149SsjgTSORT += -q
28246149Ssjg.endif
29246149Ssjg
30246149SsjgARFLAGS?=	rl
31246149Ssjg
32246149SsjgAS?=		as
33246149SsjgAFLAGS?=
34246149Ssjg.if ${MACHINE_ARCH} == "sparc64" 
35246149SsjgAFLAGS+= -Wa,-Av9a
36246149Ssjg.endif
37246149SsjgCOMPILE.s?=	${CC} ${AFLAGS} -c
38246149SsjgLINK.s?=	${CC} ${AFLAGS} ${LDFLAGS}
39246149SsjgCOMPILE.S?=	${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp
40246149SsjgLINK.S?=	${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS}
41246149Ssjg
42246149SsjgCC?=		cc
43246149SsjgDBG?=		-O2
44246149SsjgCFLAGS?=	${DBG}
45246149SsjgCOMPILE.c?=	${CC} ${CFLAGS} ${CPPFLAGS} -c
46246149SsjgLINK.c?=	${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
47246149Ssjg
48246149SsjgCXX?=		c++
49246149SsjgCXXFLAGS?=	${CFLAGS}
50246149SsjgCOMPILE.cc?=	${CXX} ${CXXFLAGS} ${CPPFLAGS} -c
51246149SsjgLINK.cc?=	${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
52246149Ssjg
53246149SsjgOBJC?=		${CC}
54246149SsjgOBJCFLAGS?=	${CFLAGS}
55246149SsjgCOMPILE.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
56246149SsjgLINK.m?=	${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
57246149Ssjg
58246149SsjgCPP?=		cpp
59246149SsjgCPPFLAGS?=	
60246149Ssjg
61246149SsjgFC?=		f77
62246149SsjgFFLAGS?=	-O
63246149SsjgRFLAGS?=
64246149SsjgCOMPILE.f?=	${FC} ${FFLAGS} -c
65246149SsjgLINK.f?=	${FC} ${FFLAGS} ${LDFLAGS}
66246149SsjgCOMPILE.F?=	${FC} ${FFLAGS} ${CPPFLAGS} -c
67246149SsjgLINK.F?=	${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
68246149SsjgCOMPILE.r?=	${FC} ${FFLAGS} ${RFLAGS} -c
69246149SsjgLINK.r?=	${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
70246149Ssjg
71246149SsjgINSTALL?=	install
72246149Ssjg
73246149SsjgLEX?=		lex
74246149SsjgLFLAGS?=
75246149SsjgLEX.l?=		${LEX} ${LFLAGS}
76246149Ssjg
77246149SsjgLD?=		ld
78246149SsjgLDFLAGS?=
79246149Ssjg
80246149SsjgLINT?=		lint
81246149SsjgLINTFLAGS?=	-chapbxzF
82246149Ssjg
83246149SsjgMAKE?=		${.MAKE}
84246149Ssjg
85246149SsjgNM?=		nm
86246149Ssjg
87246149SsjgPC?=		pc
88246149SsjgPFLAGS?=
89246149SsjgCOMPILE.p?=	${PC} ${PFLAGS} ${CPPFLAGS} -c
90246149SsjgLINK.p?=	${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
91246149Ssjg
92246149SsjgSHELL?=		sh
93246149Ssjg
94246149SsjgSIZE?=		size
95246149Ssjg
96246149SsjgYACC?=		yacc
97246149SsjgYFLAGS?=
98246149SsjgYACC.y?=	${YACC} ${YFLAGS}
99246149Ssjg
100246149Ssjg# C
101246149Ssjg.c:
102246149Ssjg	${LINK.c} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
103246149Ssjg.c.o:
104246149Ssjg	${COMPILE.c} ${.IMPSRC}
105246149Ssjg.c.a:
106246149Ssjg	${COMPILE.c} ${.IMPSRC}
107246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
108246149Ssjg	rm -f $*.o
109246149Ssjg.c.ln:
110246149Ssjg	${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC}
111246149Ssjg
112246149Ssjg# C++
113246149Ssjg.cc .cpp .cxx .C:
114246149Ssjg	${LINK.cc} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
115246149Ssjg.cc.o .cpp.o .cxx.o .C.o:
116246149Ssjg	${COMPILE.cc} ${.IMPSRC}
117246149Ssjg.cc.a .cpp.a .cxx.a .C.a:
118246149Ssjg	${COMPILE.cc} ${.IMPSRC}
119246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
120246149Ssjg	rm -f $*.o
121246149Ssjg
122246149Ssjg# Fortran/Ratfor
123246149Ssjg.f:
124246149Ssjg	${LINK.f} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
125246149Ssjg.f.o:
126246149Ssjg	${COMPILE.f} ${.IMPSRC}
127246149Ssjg.f.a:
128246149Ssjg	${COMPILE.f} ${.IMPSRC}
129246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
130246149Ssjg	rm -f $*.o
131246149Ssjg
132246149Ssjg.F:
133246149Ssjg	${LINK.F} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
134246149Ssjg.F.o:
135246149Ssjg	${COMPILE.F} ${.IMPSRC}
136246149Ssjg.F.a:
137246149Ssjg	${COMPILE.F} ${.IMPSRC}
138246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
139246149Ssjg	rm -f $*.o
140246149Ssjg
141246149Ssjg.r:
142246149Ssjg	${LINK.r} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
143246149Ssjg.r.o:
144246149Ssjg	${COMPILE.r} ${.IMPSRC}
145246149Ssjg.r.a:
146246149Ssjg	${COMPILE.r} ${.IMPSRC}
147246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
148246149Ssjg	rm -f $*.o
149246149Ssjg
150246149Ssjg# Pascal
151246149Ssjg.p:
152246149Ssjg	${LINK.p} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
153246149Ssjg.p.o:
154246149Ssjg	${COMPILE.p} ${.IMPSRC}
155246149Ssjg.p.a:
156246149Ssjg	${COMPILE.p} ${.IMPSRC}
157246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
158246149Ssjg	rm -f $*.o
159246149Ssjg
160246149Ssjg# Assembly
161246149Ssjg.s:
162246149Ssjg	${LINK.s} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
163246149Ssjg.s.o:
164246149Ssjg	${COMPILE.s} ${.IMPSRC}
165246149Ssjg.s.a:
166246149Ssjg	${COMPILE.s} ${.IMPSRC}
167246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
168246149Ssjg	rm -f $*.o
169246149Ssjg.S:
170246149Ssjg	${LINK.S} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
171246149Ssjg.S.o:
172246149Ssjg	${COMPILE.S} ${.IMPSRC}
173246149Ssjg.S.a:
174246149Ssjg	${COMPILE.S} ${.IMPSRC}
175246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
176246149Ssjg	rm -f $*.o
177246149Ssjg
178246149Ssjg# Lex
179246149Ssjg.l:
180246149Ssjg	${LEX.l} ${.IMPSRC}
181246149Ssjg	${LINK.c} -o ${.TARGET} lex.yy.c ${LDLIBS} -ll
182246149Ssjg	rm -f lex.yy.c
183246149Ssjg.l.c:
184246149Ssjg	${LEX.l} ${.IMPSRC}
185246149Ssjg	mv lex.yy.c ${.TARGET}
186246149Ssjg.l.o:
187246149Ssjg	${LEX.l} ${.IMPSRC}
188246149Ssjg	${COMPILE.c} -o ${.TARGET} lex.yy.c 
189246149Ssjg	rm -f lex.yy.c
190246149Ssjg
191246149Ssjg# Yacc
192246149Ssjg.y:
193246149Ssjg	${YACC.y} ${.IMPSRC}
194246149Ssjg	${LINK.c} -o ${.TARGET} y.tab.c ${LDLIBS}
195246149Ssjg	rm -f y.tab.c
196246149Ssjg.y.c:
197246149Ssjg	${YACC.y} ${.IMPSRC}
198246149Ssjg	mv y.tab.c ${.TARGET}
199246149Ssjg.y.o:
200246149Ssjg	${YACC.y} ${.IMPSRC}
201246149Ssjg	${COMPILE.c} -o ${.TARGET} y.tab.c
202246149Ssjg	rm -f y.tab.c
203246149Ssjg
204246149Ssjg# Shell
205246149Ssjg.sh:
206246149Ssjg	rm -f ${.TARGET}
207246149Ssjg	cp ${.IMPSRC} ${.TARGET}
208246149Ssjg
209