1321964Ssjg#	$Id: Generic.mk,v 1.13 2017/05/05 18:02:16 sjg Exp $
2246149Ssjg#
3246149Ssjg
4246149Ssjg# some reasonable defaults
5321964Ssjg.SUFFIXES: .out .a .ln .o .s .S .c ${CXX_SUFFIXES} .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
83246149SsjgNM?=		nm
84246149Ssjg
85246149SsjgPC?=		pc
86246149SsjgPFLAGS?=
87246149SsjgCOMPILE.p?=	${PC} ${PFLAGS} ${CPPFLAGS} -c
88246149SsjgLINK.p?=	${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
89246149Ssjg
90246149SsjgSHELL?=		sh
91246149Ssjg
92246149SsjgSIZE?=		size
93246149Ssjg
94246149SsjgYACC?=		yacc
95246149SsjgYFLAGS?=
96246149SsjgYACC.y?=	${YACC} ${YFLAGS}
97246149Ssjg
98246149Ssjg# C
99246149Ssjg.c:
100246149Ssjg	${LINK.c} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
101246149Ssjg.c.o:
102246149Ssjg	${COMPILE.c} ${.IMPSRC}
103246149Ssjg.c.a:
104246149Ssjg	${COMPILE.c} ${.IMPSRC}
105246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
106246149Ssjg	rm -f $*.o
107246149Ssjg.c.ln:
108246149Ssjg	${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC}
109246149Ssjg
110246149Ssjg# C++
111321964Ssjg${CXX_SUFFIXES}:
112246149Ssjg	${LINK.cc} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
113321964Ssjg${CXX_SUFFIXES:%=%.o}:
114246149Ssjg	${COMPILE.cc} ${.IMPSRC}
115321964Ssjg${CXX_SUFFIXES:%=%.a}:
116246149Ssjg	${COMPILE.cc} ${.IMPSRC}
117246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
118246149Ssjg	rm -f $*.o
119246149Ssjg
120246149Ssjg# Fortran/Ratfor
121246149Ssjg.f:
122246149Ssjg	${LINK.f} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
123246149Ssjg.f.o:
124246149Ssjg	${COMPILE.f} ${.IMPSRC}
125246149Ssjg.f.a:
126246149Ssjg	${COMPILE.f} ${.IMPSRC}
127246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
128246149Ssjg	rm -f $*.o
129246149Ssjg
130246149Ssjg.F:
131246149Ssjg	${LINK.F} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
132246149Ssjg.F.o:
133246149Ssjg	${COMPILE.F} ${.IMPSRC}
134246149Ssjg.F.a:
135246149Ssjg	${COMPILE.F} ${.IMPSRC}
136246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
137246149Ssjg	rm -f $*.o
138246149Ssjg
139246149Ssjg.r:
140246149Ssjg	${LINK.r} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
141246149Ssjg.r.o:
142246149Ssjg	${COMPILE.r} ${.IMPSRC}
143246149Ssjg.r.a:
144246149Ssjg	${COMPILE.r} ${.IMPSRC}
145246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
146246149Ssjg	rm -f $*.o
147246149Ssjg
148246149Ssjg# Pascal
149246149Ssjg.p:
150246149Ssjg	${LINK.p} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
151246149Ssjg.p.o:
152246149Ssjg	${COMPILE.p} ${.IMPSRC}
153246149Ssjg.p.a:
154246149Ssjg	${COMPILE.p} ${.IMPSRC}
155246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
156246149Ssjg	rm -f $*.o
157246149Ssjg
158246149Ssjg# Assembly
159246149Ssjg.s:
160246149Ssjg	${LINK.s} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
161246149Ssjg.s.o:
162246149Ssjg	${COMPILE.s} ${.IMPSRC}
163246149Ssjg.s.a:
164246149Ssjg	${COMPILE.s} ${.IMPSRC}
165246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
166246149Ssjg	rm -f $*.o
167246149Ssjg.S:
168246149Ssjg	${LINK.S} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
169246149Ssjg.S.o:
170246149Ssjg	${COMPILE.S} ${.IMPSRC}
171246149Ssjg.S.a:
172246149Ssjg	${COMPILE.S} ${.IMPSRC}
173246149Ssjg	${AR} ${ARFLAGS} $@ $*.o
174246149Ssjg	rm -f $*.o
175246149Ssjg
176246149Ssjg# Lex
177246149Ssjg.l:
178246149Ssjg	${LEX.l} ${.IMPSRC}
179246149Ssjg	${LINK.c} -o ${.TARGET} lex.yy.c ${LDLIBS} -ll
180246149Ssjg	rm -f lex.yy.c
181246149Ssjg.l.c:
182246149Ssjg	${LEX.l} ${.IMPSRC}
183246149Ssjg	mv lex.yy.c ${.TARGET}
184246149Ssjg.l.o:
185246149Ssjg	${LEX.l} ${.IMPSRC}
186246149Ssjg	${COMPILE.c} -o ${.TARGET} lex.yy.c 
187246149Ssjg	rm -f lex.yy.c
188246149Ssjg
189246149Ssjg# Yacc
190246149Ssjg.y:
191246149Ssjg	${YACC.y} ${.IMPSRC}
192246149Ssjg	${LINK.c} -o ${.TARGET} y.tab.c ${LDLIBS}
193246149Ssjg	rm -f y.tab.c
194246149Ssjg.y.c:
195246149Ssjg	${YACC.y} ${.IMPSRC}
196246149Ssjg	mv y.tab.c ${.TARGET}
197246149Ssjg.y.o:
198246149Ssjg	${YACC.y} ${.IMPSRC}
199246149Ssjg	${COMPILE.c} -o ${.TARGET} y.tab.c
200246149Ssjg	rm -f y.tab.c
201246149Ssjg
202246149Ssjg# Shell
203246149Ssjg.sh:
204246149Ssjg	rm -f ${.TARGET}
205246149Ssjg	cp ${.IMPSRC} ${.TARGET}
206246149Ssjg
207