150472Speter# $FreeBSD$
2207995Sobrien
3169718SkanGCCDIR=	${.CURDIR}/../../../contrib/gcc
4169718SkanGCCLIB=	${.CURDIR}/../../../contrib/gcclibs
51823Sphk
6169718SkanSHLIB_NAME=	libgcc_s.so.1
7169718SkanSHLIBDIR?=	/lib
8169718Skan
9156854Sru.include <bsd.own.mk>
10195697Skan#
11195697Skan# libgcc is linked in last and thus cannot depend on ssp symbols coming
12195697Skan# from earlier libraries. Disable stack protection for this library.
13195697Skan#
14195697SkanMK_SSP=	no
15195697Skan
1696456Sobrien.include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt"
1745299Sobrien
18245539Sandrew.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
19245539SandrewCFLAGS+=	-DTARGET_ARM_EABI
20245539Sandrew.endif
21245539Sandrew
22169718Skan.PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR}/config ${GCCDIR}
2345171Sobrien
24169718SkanCFLAGS+=	-DIN_GCC -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
25169718Skan		-DHAVE_GTHR_DEFAULT \
26169718Skan		-I${GCCLIB}/include \
27169718Skan		-I${GCCDIR}/config -I${GCCDIR} -I. \
28169718Skan		-I${.CURDIR}/../../usr.bin/cc/cc_tools
2918441Speter
30169718SkanLDFLAGS+=	-nodefaultlibs
31271125SngieDPADD+=		${LIBC}
32195152SkanLDADD+=		-lc
3396340Sobrien
34215082SimpOBJS=		# added to below in various ways depending on TARGET_CPUARCH
3596784Sobrien
3696340Sobrien#---------------------------------------------------------------------------
3796340Sobrien#
38260998Spfg# Library members defined in libgcc2.c.
39260998Spfg# When upgrading GCC, obtain the following list from mklibgcc.in
4096340Sobrien#
41169718SkanLIB2FUNCS= _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 \
42244382Sandrew	_cmpdi2 _ucmpdi2 \
43132751Skan	_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3 \
44132751Skan	_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors \
45132751Skan	_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab \
46169718Skan	_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2 \
47169718Skan	_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 \
48260998Spfg	_divxc3 _divtc3 _bswapsi2 _bswapdi2
49244382Sandrew.if ${COMPILER_TYPE} != "clang" || ${TARGET_CPUARCH} != "arm"
50244382SandrewLIB2FUNCS+= _clear_cache
51244382Sandrew.endif
5218390Speter
53169718Skan# The floating-point conversion routines that involve a single-word integer.
54169718Skan.for mode in sf df xf
55169718SkanLIB2FUNCS+= _fixuns${mode}si
56169718Skan.endfor
57169718Skan
58169718Skan# Likewise double-word routines.
59245539Sandrew.if ${TARGET_CPUARCH} != "arm" || ${MK_ARM_EABI} == "no"
60245539Sandrew# These are implemented in an ARM specific file but will not be filtered out
61169718Skan.for mode in sf df xf tf
62169718SkanLIB2FUNCS+= _fix${mode}di _fixuns${mode}di
63169718SkanLIB2FUNCS+= _floatdi${mode} _floatundi${mode}
64169718Skan.endfor
65245539Sandrew.endif
66169718Skan
67169718SkanLIB2ADD = $(LIB2FUNCS_EXTRA)
68169718SkanLIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
69169718Skan
70169718Skan# Additional sources to handle exceptions; overridden by targets as needed.
71169718SkanLIB2ADDEH = unwind-dw2.c unwind-dw2-fde-glibc.c unwind-sjlj.c gthr-gnat.c \
72169718Skan	unwind-c.c
73169718SkanLIB2ADDEHSTATIC = $(LIB2ADDEH)
74169718SkanLIB2ADDEHSHARED = $(LIB2ADDEH)
75169718Skan
76169718Skan# List of extra C and assembler files to add to static and shared libgcc2.
77169718Skan# Assembler files should have names ending in `.asm'.
78169718SkanLIB2FUNCS_EXTRA =
79169718Skan
80169718Skan# List of extra C and assembler files to add to static libgcc2.
81169718Skan# Assembler files should have names ending in `.asm'.
82169718SkanLIB2FUNCS_STATIC_EXTRA =
83169718Skan
8496340Sobrien# Defined in libgcc2.c, included only in the static library.
85169718Skan# KAN: Excluded _sf_to_tf and _df_to_tf as TPBIT_FUNCS are not
86169718Skan# built on any of our platforms.
87132751SkanLIB2FUNCS_ST = _eprintf __gcc_bcmp
8845299Sobrien
8996340SobrienFPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
9096340Sobrien    _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
9196340Sobrien    _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \
92169718Skan    _sf_to_df _thenan_sf _sf_to_usi _usi_to_sf
9345299Sobrien
9496340SobrienDPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \
9596340Sobrien    _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \
9696340Sobrien    _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \
97169718Skan    _df_to_sf _thenan_df _df_to_usi _usi_to_df
9845299Sobrien
99132751SkanTPBIT_FUNCS = _pack_tf _unpack_tf _addsub_tf _mul_tf _div_tf \
100132751Skan    _fpcmp_parts_tf _compare_tf _eq_tf _ne_tf _gt_tf _ge_tf \
101132751Skan    _lt_tf _le_tf _unord_tf _si_to_tf _tf_to_si _negate_tf _make_tf \
102132751Skan    _tf_to_df _tf_to_sf _thenan_tf _tf_to_usi _usi_to_tf
103132751Skan
10496340Sobrien# These might cause a divide overflow trap and so are compiled with
10596340Sobrien# unwinder info.
10696340SobrienLIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
10718609Speter
10896340Sobrien#-----------------------------------------------------------------------
10996340Sobrien#
11096340Sobrien#	Platform specific bits.
111169718Skan#	When upgrading GCC, get the following definitions from config/<cpu>/t-*
11296340Sobrien#
113215082Simp.if ${TARGET_CPUARCH} == "arm"
11496340Sobrien#	from config/arm/t-strongarm-elf
115132751SkanCFLAGS+=	-Dinhibit_libc -fno-inline
116260096SdimCFLAGS.clang+=	-fheinous-gnu-extensions
117244382Sandrew
118132751SkanLIB1ASMSRC =	lib1funcs.asm
119169718SkanLIB1ASMFUNCS =  _dvmd_tls _bb_init_func
120245539Sandrew.if ${MK_ARM_EABI} != "no"
121245539SandrewLIB2ADDEH =	unwind-arm.c libunwind.S pr-support.c unwind-c.c
122248401Sandrew# Some compilers generate __aeabi_ functions libgcc_s is missing
123248401SandrewDPADD+=		${LIBGCC}
124248401SandrewLDADD+=		-lgcc
125245539Sandrew.else
126169718SkanLIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c
12745306Sobrien.endif
128245539Sandrew.endif
12934814Sbde
130217123Simp.if ${TARGET_CPUARCH} == mips
131201852SimpLIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c
132217942Sjchandra# ABIs other than o32 need this
133233644Sjmallett.if ${TARGET_ARCH} != "mips" && ${TARGET_ARCH} != "mipsel"
134208737SjmallettLIB2FUNCS_EXTRA+= floatdidf.c fixunsdfsi.c
135208737SjmallettLIB2FUNCS_EXTRA+= floatdisf.c floatundidf.c
136208737SjmallettLIB2FUNCS_EXTRA+= fixsfdi.c floatundisf.c
137208737SjmallettLIB2FUNCS_EXTRA+= fixdfdi.c fixunssfsi.c
138201852Simp.endif
139208737Sjmallett.endif
140201852Simp
141215082Simp.if ${TARGET_CPUARCH} == "ia64"
14296340Sobrien#	from config/ia64/t-ia64
143169718SkanLIB1ASMSRC   = lib1funcs.asm
144169718SkanLIB1ASMFUNCS = __divxf3 __divdf3 __divsf3 \
145169718Skan	__divdi3 __moddi3 __udivdi3 __umoddi3 \
146169718Skan	__divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \
147169718Skan	__nonlocal_goto __restore_stack_nonlocal __trampoline \
148169718Skan	_fixtfdi _fixunstfdi _floatditf
149169718SkanLIB2ADDEH = unwind-ia64.c unwind-sjlj.c unwind-c.c
15096340Sobrien.endif
15134814Sbde
152215275Simp.if ${TARGET_ARCH} == "powerpc"
15396340Sobrien#	from config/rs6000/t-ppccomm
154176530SrajLIB2FUNCS_EXTRA = tramp.asm
15596779SobrienLIB2FUNCS_STATIC_EXTRA = eabi.asm
15696340Sobrien.endif
1571823Sphk
158215275Simp.if ${TARGET_ARCH} == "powerpc64"
159209867Snwhitehorn#	from config/rs6000/t-ppccomm
160209867SnwhitehornLIB2FUNCS_EXTRA = tramp.asm
161209867Snwhitehorn.endif
162209867Snwhitehorn
163215082Simp.if ${TARGET_CPUARCH} == "sparc64"
16496340Sobrien#	from config/sparc/t-elf
165169718SkanLIB1ASMSRC =   lb1spc.asm
16696340SobrienLIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
16796340Sobrien.endif
1681823Sphk
16996340Sobrien#-----------------------------------------------------------------------
17096340Sobrien
17196449Sobrien# Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are
17296449Sobrien# defined as optimized assembly code in LIB1ASMFUNCS.
17396449Sobrien.if defined(LIB1ASMFUNCS)
17496449Sobrien.for sym in ${LIB1ASMFUNCS}
175133103SkanLIB2FUNCS:=	${LIB2FUNCS:S/${sym}//g}
17696449SobrienLIB2_DIVMOD_FUNCS:= ${LIB2_DIVMOD_FUNCS:S/${sym}//g}
17796449Sobrien.endfor
17896449Sobrien.endif
17996449Sobrien
180169718SkanCOMMONHDRS=	tm.h tconfig.h options.h unwind.h gthr-default.h
18196456Sobrien
182169718Skan#-----------------------------------------------------------------------
183169718Skan#
184169718Skan# Helpful shortcuts for compiler invocations.
185169718Skan#
186169718SkanHIDE =  -fvisibility=hidden -DHIDE_EXPORTS
187169718SkanCC_T =	${CC} -c ${CFLAGS} ${HIDE} -fPIC
188169718SkanCC_P =	${CC} -c ${CFLAGS} ${HIDE} -p -fPIC
189169718SkanCC_S =	${CC} -c ${CFLAGS} ${PICFLAG} -DSHARED
19096449Sobrien
191169718Skan#-----------------------------------------------------------------------
192169718Skan#
193169718Skan# Functions from libgcc2.c
194169718Skan#
195169718SkanSTD_CFLAGS =
196169718SkanDIV_CFLAGS =	-fexceptions -fnon-call-exceptions
19796340Sobrien
198169718SkanSTD_FUNCS =	${LIB2FUNCS}
199169718SkanDIV_FUNCS =	${LIB2_DIVMOD_FUNCS}
20096340Sobrien
201169718SkanSTD_CFILE =	libgcc2.c
202169718SkanDIV_CFILE =	libgcc2.c
20396340Sobrien
204169718SkanOBJ_GRPS =	STD DIV
20545299Sobrien
206169718Skan#-----------------------------------------------------------------------
207169718Skan#
208169718Skan# Floating point emulation functions
209169718Skan#
210215082Simp.if ${TARGET_CPUARCH} == "armNOT_YET" || \
211215082Simp    ${TARGET_CPUARCH} == "powerpc" || ${TARGET_CPUARCH} == "sparc64"
212169718Skan
213169718SkanFPBIT_CFLAGS =	-DFINE_GRAINED_LIBRARIES -DFLOAT
214169718SkanDPBIT_CFLAGS =	-DFINE_GRAINED_LIBRARIES
215169718Skan
216169718SkanFPBIT_CFILE =	config/fp-bit.c
217169718SkanDPBIT_CFILE =	config/fp-bit.c
218169718Skan
219169718SkanOBJ_GRPS +=	FPBIT DPBIT
2201823Sphk.endif
2211823Sphk
222169718Skan#-----------------------------------------------------------------------
223169718Skan#
224169718Skan# Generic build rules for object groups defined above
225169718Skan#
226169718Skan.for T in ${OBJ_GRPS}
227169718Skan${T}_OBJS_T =	${${T}_FUNCS:S/$/.o/}
228169718Skan${T}_OBJS_P =	${${T}_FUNCS:S/$/.po/}
229169718Skan${T}_OBJS_S =	${${T}_FUNCS:S/$/.So/}
230169718SkanOBJS +=		${${T}_FUNCS:S/$/.o/}
231169718Skan
232169718Skan${${T}_OBJS_T}: ${${T}_CFILE} ${COMMONHDRS}
233169718Skan	${CC_T} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c}
234169718Skan${${T}_OBJS_P}: ${${T}_CFILE} ${COMMONHDRS}
235169718Skan	${CC_P} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c}
236169718Skan${${T}_OBJS_S}: ${${T}_CFILE} ${COMMONHDRS}
237169718Skan	${CC_S} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c}
238169718Skan.endfor
239169718Skan
240169718Skan#-----------------------------------------------------------------------
241169718Skan#
242169718Skan# Extra objects coming from separate files
243169718Skan#
244169718Skan.if !empty(LIB2ADD)
245169718SkanOBJS  +=	${LIB2ADD:R:S/$/.o/}
246169718SkanSOBJS +=	${LIB2ADD:R:S/$/.So/}
247169718SkanPOBJS +=	${LIB2ADD:R:S/$/.po/}
2481823Sphk.endif
2491823Sphk
250169718Skan#-----------------------------------------------------------------------
251169718Skan#
252169718Skan# Objects that should be in static library only.
253169718Skan#
254171846SkanSYMS_ST =	${LIB2FUNCS_ST}	${LIB2ADD_ST}
255169718SkanSTAT_OBJS_T = 	${SYMS_ST:S/$/.o/}
256169718SkanSTAT_OBJS_P = 	${SYMS_ST:S/$/.po/}
257169718SkanSTATICOBJS  =	${SYMS_ST:S/$/.o/}
258169718Skan
259169718Skan${STAT_OBJS_T}:	${STD_CFILE} ${COMMONHDRS}
260169718Skan	${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c}
261169718Skan${STAT_OBJS_P}:	${STD_CFILE} ${COMMONHDRS}
262169718Skan	${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c}
263169718Skan
264169718Skan#-----------------------------------------------------------------------
265169718Skan#
266169718Skan# Assembler files.
267169718Skan#
26896456Sobrien.if defined(LIB1ASMSRC)
269169718SkanASM_T =		${LIB1ASMFUNCS:S/$/.o/}
270169718SkanASM_P =		${LIB1ASMFUNCS:S/$/.po/}
271169718SkanASM_S =		${LIB1ASMFUNCS:S/$/.So/}
272169718SkanASM_V =		${LIB1ASMFUNCS:S/$/.vis/}
273169718SkanOBJS +=		${LIB1ASMFUNCS:S/$/.o/}
274169718Skan
275169718Skan${ASM_T}: ${LIB1ASMSRC} ${.PREFIX}.vis
276169718Skan	${CC} -x assembler-with-cpp -c ${CFLAGS} -DL${.PREFIX} \
277169718Skan	    -o ${.TARGET} -include ${.PREFIX}.vis ${.ALLSRC:N*.h:N*.vis}
278169718Skan${ASM_P}: ${LIB1ASMSRC} ${.PREFIX}.vis
279169718Skan	${CC} -x assembler-with-cpp -p -c ${CFLAGS} -DL${.PREFIX} \
280169718Skan	    -o ${.TARGET} -include ${.PREFIX}.vis ${.ALLSRC:N*.h:N*.vis}
281169718Skan${ASM_S}: ${LIB1ASMSRC}
282169718Skan	${CC} -x assembler-with-cpp -c ${PICFLAG} ${CFLAGS} -DL${.PREFIX} \
28396850Sobrien	    -o ${.TARGET} ${.ALLSRC:N*.h}
284169718Skan${ASM_V}: ${LIB1ASMSRC}
285169718Skan	${CC} -x assembler-with-cpp -c ${CFLAGS} -DL${.PREFIX} \
286169718Skan	    -o ${.PREFIX}.vo ${.ALLSRC:N*.h}
287234546Simp	( ${NM} -pg ${.PREFIX}.vo | \
288169718Skan		awk 'NF == 3 && $$2 !~ /^[UN]$$/ { print "\t.hidden ", $$3 }'\
289169718Skan	) > ${.TARGET}
29096456Sobrien
291169718SkanCLEANFILES += ${ASM_V} ${ASM_V:R:S/$/.vo/}
29296456Sobrien.endif
29396456Sobrien
294169718Skan#-----------------------------------------------------------------------
295169718Skan#
296169718Skan# Exception handling / unwinding support.
297169718Skan#
298169718SkanEH_OBJS_T = ${LIB2ADDEHSTATIC:R:S/$/.o/}
299169718SkanEH_OBJS_P = ${LIB2ADDEHSTATIC:R:S/$/.po/}
300169718SkanEH_OBJS_S = ${LIB2ADDEHSHARED:R:S/$/.So/}
301169718SkanEH_CFLAGS = -fexceptions -D__GLIBC__=3 -DElfW=__ElfN
302169718SkanSOBJS    += ${EH_OBJS_S}
303169718Skan
304169718Skan.for _src in ${LIB2ADDEHSTATIC}
305169718Skan${_src:R:S/$/.o/}: ${_src} ${COMMONHDRS}
306169718Skan	${CC_T} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC}
307169718Skan${_src:R:S/$/.po/}: ${_src} ${COMMONHDRS}
308169718Skan	${CC_P} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC}
309169718Skan.endfor
310169718Skan.for _src in ${LIB2ADDEHSHARED}
311169718Skan${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS}
312169718Skan	${CC_S} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC}
313169718Skan.endfor
314169718Skan
315169718Skan
316169718Skan#-----------------------------------------------------------------------
317169718Skan#
318169718Skan# Generated headers
319169718Skan#
320169718Skan${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile
321169718Skan	${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} ${.TARGET}
322169718Skan
323169718SkanCLEANFILES += ${COMMONHDRS}
324169718SkanCLEANFILES += cs-*.h option*
325169718Skan
326169718Skan#-----------------------------------------------------------------------
327169718Skan#
328200499Skan# Build symbol version map
329169718Skan#
330169718SkanSHLIB_MKMAP      = ${GCCDIR}/mkmap-symver.awk
331169718SkanSHLIB_MKMAP_OPTS =
332169718SkanSHLIB_MAPFILES   = ${GCCDIR}/libgcc-std.ver
333245539Sandrew.if ${TARGET_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
334245539SandrewSHLIB_MAPFILES  += ${GCCDIR}/config/arm/libgcc-bpabi.ver
335245539Sandrew.endif
336169718SkanVERSION_MAP      = libgcc.map
337169718Skan
338169718Skanlibgcc.map: ${SHLIB_MKMAP} ${SHLIB_MAPFILES} ${SOBJS} ${OBJS:R:S/$/.So/}
339234546Simp	(  ${NM} -pg ${SOBJS};echo %% ; \
340169718Skan	  cat ${SHLIB_MAPFILES} \
341169718Skan	    | sed -e '/^[   ]*#/d' \
342169718Skan	          -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
343169718Skan	    | ${CC} ${CFLAGS} -E -xassembler-with-cpp -; \
344169718Skan	) | awk -f ${SHLIB_MKMAP} ${SHLIB_MKMAP_OPTS} > ${.TARGET}
345169718Skan
346169718SkanCLEANFILES +=	libgcc.map
347169718Skan
348169718Skan#-----------------------------------------------------------------------
349169718Skan#
350200499Skan# Build additional static libgcc_eh[_p].a libraries.
351169718Skan#
352215126Sedlibgcc_eh.a:	${EH_OBJS_T}
353215126Sed	@${ECHO} building static gcc_eh library
354169718Skan	@rm -f ${.TARGET}
355243933Seadler	@${AR} ${ARFLAGS} ${.TARGET} `lorder ${EH_OBJS_T} | tsort -q`
356270484Sdes	${RANLIB} ${RANLIBFLAGS} ${.TARGET}
357169718Skan
358215126Sedall:	libgcc_eh.a
359169718Skan
360156854Sru.if ${MK_PROFILE} != "no"
361215126Sedlibgcc_eh_p.a:	${EH_OBJS_P}
362215126Sed	@${ECHO} building profiled gcc_eh library
363169718Skan	@rm -f ${.TARGET}
364243933Seadler	@${AR} ${ARFLAGS} ${.TARGET} `lorder ${EH_OBJS_P} | tsort -q`
365270484Sdes	${RANLIB} ${RANLIBFLAGS} ${.TARGET}
366215126Sedall:	libgcc_eh_p.a
36796456Sobrien.endif
368169718Skan
369169718Skan_libinstall: _lib-eh-install
370169718Skan
371169718Skan_lib-eh-install:
372188583Sjkim.if ${MK_INSTALLLIB} != "no"
373169718Skan	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
374215126Sed		${_INSTALLFLAGS} libgcc_eh.a ${DESTDIR}${LIBDIR}
375188583Sjkim.endif
376169718Skan.if ${MK_PROFILE} != "no"
377169718Skan	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
378215126Sed		${_INSTALLFLAGS} libgcc_eh_p.a ${DESTDIR}${LIBDIR}
37996456Sobrien.endif
38096456Sobrien
381215126SedCLEANFILES+=	libgcc_eh.a libgcc_eh_p.a ${EH_OBJS_T} ${EH_OBJS_P}
382169718Skan
3831823Sphk.include <bsd.lib.mk>
384169718Skan
385169718Skan.SUFFIXES: .vis .vo
386