1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26# ident	"@(#)Makefile	1.76	06/01/31 SMI"
27#
28
29MCPU:sh		= uname -p
30
31DESTDIR		= destdir-$(MCPU)
32
33CG_sparc	= v8plus
34CG_i386		= f80387
35CG		= $(CG_$(MCPU))
36CHIP		= ultra
37XARCH		= $(CG)
38
39VnA		= sparcv8plus+vis
40VnB		= sparcv9+vis2
41IA1		= libmvec
42ISA_DIRS_sparc	= $(VnA) $(VnB)
43ISA_DIRS_i386	= $(IA1)
44ISA_DIRS	= $(ISA_DIRS_$(MCPU))
45FLTRTYPE_sparc	= -f
46FLTRTYPE_i386	= -f
47FLTRTYPE	= $(FLTRTYPE_$(MCPU))
48FLTRPATH_sparc	= $$ORIGIN/cpu/$$ISALIST/libmvec_isa.so.1
49FLTRPATH_i386	= $$ORIGIN/libmvec/$$HWCAP
50FLTRPATH	= $(FLTRPATH_$(MCPU))
51
52#
53# system commands
54#
55
56CPP_CMD		= $(CC) -E -Xs
57INSTALL		= /usr/sbin/install
58INST_CMD	= $(INSTALL) $(OWNED_BY) -m 644 -f $(@D) $<
59INST_EXEC_CMD	= $(INSTALL) $(OWNED_BY) -m 755 -f $(@D) $<
60LD		= /usr/ccs/bin/ld
61M4		= /usr/ccs/bin/m4
62MCS		= /usr/ccs/bin/mcs
63STRIP		= /usr/ccs/bin/strip
64TR		= /usr/bin/tr
65
66#
67# compiler-related symbols and flags
68#
69
70OSREL:sh	= /usr/bin/uname -r
71POUND_SIGN:sh	= /usr/bin/printf "\\043"
72BUILDDATE:sh	= /usr/bin/date +%m/%d/%Y
73BUILDNAME	= Generic
74PATCHID		=
75BUILDINFO	= SunOS $(OSREL) $(BUILDNAME) $(PATCHID)
76LIBM_VERSION	= "@($(POUND_SIGN))RELEASE VERSION $(BUILDINFO) $(BUILDDATE)"
77
78FPDEF_sparc	= -DCG89 -DARCH_v8plus
79FPDEF_i386	= -D__i386
80FPDEF		= $(FPDEF_$(MCPU))
81
82#
83# above and beyond what CDEF defines; so -DELFOBJ -DPIC is removed
84#
85ASDEF		= -D_ASM $(FPDEF)
86
87ASOPT_sparc	= -xarch=$(XARCH) -Kpic
88ASOPT_i386	=
89ASOPT		= $(ASOPT_$(MCPU))
90
91ASSUFFIX_sparc	= S
92ASSUFFIX_i386	= s
93ASSUFFIX	= $(ASSUFFIX_$(MCPU))
94
95CDEF_sparc	=
96CDEF_i386	=
97CDEF		= -DELFOBJ -DPIC -D_STDC_C99= -D_REENTRANT \
98		  -DLIBM_MT_FEX_SYNC $(CDEF_$(MCPU))
99
100CINC		= -I../inc -I$(SRC)/C
101
102#
103# __INLINE turns on the use of __inline_sqrt in sqrt.c
104#
105COPT_sparc	= -D__INLINE -xO4 -xregs=no%appl -xarch=$(XARCH) -xchip=ultra3
106COPT_i386	= -D__INLINE -O
107COPT		= -Xa -Kpic -xstrconst $(COPT_$(MCPU)) $(LM_IL)
108
109#
110# $(LDEND) must come *last* when link editing with versioning; otherwise
111# _lib_version, isnan, logb, nextafter, scalb will disappear from version
112# information due to the fact that they are also part of libc
113#
114MAPFMV1		= mapfiles/libmv1-common
115MAPFMV2		= mapfiles/libmv2-$(MCPU)
116MAPFMVEC	= mapfiles/libmvec-common
117MAPFMVECA	= mapfiles/libmvec-v8plusa
118MAPFMVECB	= mapfiles/libmvec-v8plusb
119MAPFMVEC1	= mapfiles/libmvec-ia1
120MAPFILES_sparc	= $(MAPFMV1) $(MAPFMV2) $(MAPFMVEC) $(MAPFMVECA) $(MAPFMVECB)
121MAPFILES_i386	= $(MAPFMV1) $(MAPFMV2) $(MAPFMVEC) $(MAPFMVEC1)
122MAPFILES	= $(MAPFILES_$(MCPU))
123LDOPT0		= -z redlocsym
124LDOPT		= -dy -G $(LDOPT0) -z combreloc -z text -z defs -h $(@F)
125LDEND		= -lc
126
127APPFLAGS	= $(ASDEF) -Wp,-P
128ASFLAGS		= $(ASOPT)
129CFLAGS		= $(COPT)
130CPPFLAGS	= $(CDEF) $(CINC)
131LINTFLAGS	= -Xa -u
132
133OWNED_BY	= -u root
134
135M4FLAGS		= -D__STDC__ -DELFOBJ -DPIC
136
137#
138# SVR4 hack
139#
140CMD.S		= $(CPP_CMD) $(APPFLAGS) $(CPPFLAGS) $< > $(CG)/$(@F:%.o=%.s); \
141		$(COMPILE.S) -o $@ $(CG)/$(@F:%.o=%.s); \
142		$(RM) $(CG)/$(@F:%.o=%.s)
143
144#
145# Directories
146#
147
148MDIR		= $(MCPU)
149USR		= $(DESTDIR)/usr
150USRLIB		= $(USR)/lib
151ROOTLIB		= $(DESTDIR)/lib
152SRC		= ../src
153
154LDBLDIR_sparc	= Q
155LDBLDIR_i386	= LD
156LDBLDIR		= $(LDBLDIR_$(MCPU))
157
158#
159# Symbols and flags
160#
161
162LLIB_LM		= llib-lm.ln
163M_LN		= $(LLIB_LM:%=$(CG)/misc/%)
164
165LIBM_IL_SRC	= $(SRC)/$(MDIR)/common/libm.m4
166
167LOCALLIBM_IL	= locallibm.il
168LM_IL		= $(LOCALLIBM_IL:%=$(CG)/misc/%)
169
170M9X_IL		= __fenv_$(MCPU).il
171m9x_IL		= $(M9X_IL:%=$(SRC)/m9x/%)
172
173COBJS_i386	= \
174		#end
175
176COBJS_sparc	= \
177		_TBL_atan.o \
178		_TBL_exp2.o \
179		_TBL_log.o \
180		_TBL_log2.o \
181		_TBL_tan.o \
182		__tan.o \
183		__tanf.o \
184		#end
185#
186# atan2pi.o and sincospi.o is for internal use only
187#
188COBJS		= \
189		$(COBJS_$(MCPU)) \
190		__cos.o \
191		__lgamma.o \
192		__libx_errno.o \
193		__rem_pio2.o \
194		__rem_pio2m.o \
195		__sin.o \
196		__sincos.o \
197		__xpg6.o \
198		_lib_version.o \
199		_SVID_error.o \
200		_TBL_ipio2.o \
201		_TBL_sin.o \
202		acos.o \
203		acosh.o \
204		asin.o \
205		asinh.o \
206		atan.o \
207		atan2.o \
208		atan2pi.o \
209		atanh.o \
210		cbrt.o \
211		ceil.o \
212		cos.o \
213		cosh.o \
214		erf.o \
215		exp10.o \
216		exp2.o \
217		expm1.o \
218		floor.o \
219		gamma.o \
220		gamma_r.o \
221		hypot.o \
222		j0.o \
223		j1.o \
224		jn.o \
225		lgamma.o \
226		lgamma_r.o \
227		log.o \
228		log10.o \
229		log1p.o \
230		log2.o \
231		logb.o \
232		matherr.o \
233		pow.o \
234		scalb.o \
235		signgam.o \
236		significand.o \
237		sin.o \
238		sincos.o \
239		sincospi.o \
240		sinh.o \
241		sqrt.o \
242		tan.o \
243		tanh.o \
244		#end
245
246QOBJS_i386	= \
247		#end
248
249#
250# LSARC/2003/658 adds isnanl
251#
252QOBJS_sparc	= \
253		_TBL_atanl.o \
254		_TBL_expl.o \
255		_TBL_expm1l.o \
256		_TBL_logl.o \
257		finitel.o \
258		isnanl.o \
259		#end
260
261#
262# atan2pil.o, ieee_funcl.o, rndintl.o, sinpil.o, sincospil.o
263# are for internal use only
264#
265# LSARC/2003/279 adds the following:
266#		gammal.o	1
267#		gammal_r.o	1
268#		j0l.o		2
269#		j1l.o		2
270#		jnl.o		2
271#		lgammal_r.o	1
272#		scalbl.o	1
273#		significandl.o	1
274#
275QOBJS		= \
276		$(QOBJS_$(MCPU)) \
277		__cosl.o \
278		__lgammal.o \
279		__poly_libmq.o \
280		__rem_pio2l.o \
281		__sincosl.o \
282		__sinl.o \
283		__tanl.o \
284		_TBL_cosl.o \
285		_TBL_ipio2l.o \
286		_TBL_sinl.o \
287		_TBL_tanl.o \
288		acoshl.o \
289		acosl.o \
290		asinhl.o \
291		asinl.o \
292		atan2l.o \
293		atan2pil.o \
294		atanhl.o \
295		atanl.o \
296		cbrtl.o \
297		copysignl.o \
298		coshl.o \
299		cosl.o \
300		erfl.o \
301		exp10l.o \
302		exp2l.o \
303		expl.o \
304		expm1l.o \
305		fabsl.o \
306		floorl.o \
307		fmodl.o \
308		gammal.o \
309		gammal_r.o \
310		hypotl.o \
311		ieee_funcl.o \
312		ilogbl.o \
313		j0l.o \
314		j1l.o \
315		jnl.o \
316		lgammal.o \
317		lgammal_r.o \
318		log10l.o \
319		log1pl.o \
320		log2l.o \
321		logbl.o \
322		logl.o \
323		nextafterl.o \
324		powl.o \
325		remainderl.o \
326		rintl.o \
327		rndintl.o \
328		scalbl.o \
329		scalbnl.o \
330		signgaml.o \
331		significandl.o \
332		sincosl.o \
333		sincospil.o \
334		sinhl.o \
335		sinl.o \
336		sinpil.o \
337		sqrtl.o \
338		tanhl.o \
339		tanl.o \
340		#end
341
342ROBJS_i386	= \
343		#end
344
345#
346# LSARC/2003/658 adds isnanf
347#
348ROBJS_sparc	= \
349		__cosf.o \
350		__sincosf.o \
351		__sinf.o \
352		isnanf.o \
353		#end
354
355#
356# atan2pif.o, sincosf.o, sincospif.o are for internal use only
357#
358# LSARC/2003/279 adds the following:
359#		besself.o	6
360#		scalbf.o	1
361#		gammaf.o	1
362#		gammaf_r.o	1
363#		lgammaf_r.o	1
364#		significandf.o	1
365#
366ROBJS		= \
367		$(ROBJS_$(MCPU)) \
368		_TBL_r_atan_.o \
369		acosf.o \
370		acoshf.o \
371		asinf.o \
372		asinhf.o \
373		atan2f.o \
374		atan2pif.o \
375		atanf.o \
376		atanhf.o \
377		besself.o \
378		cbrtf.o \
379		copysignf.o \
380		cosf.o \
381		coshf.o \
382		erff.o \
383		exp10f.o \
384		exp2f.o \
385		expf.o \
386		expm1f.o \
387		fabsf.o \
388		floorf.o \
389		fmodf.o \
390		gammaf.o \
391		gammaf_r.o \
392		hypotf.o \
393		ilogbf.o \
394		lgammaf.o \
395		lgammaf_r.o \
396		log10f.o \
397		log1pf.o \
398		log2f.o \
399		logbf.o \
400		logf.o \
401		nextafterf.o \
402		powf.o \
403		remainderf.o \
404		rintf.o \
405		scalbf.o \
406		scalbnf.o \
407		signgamf.o \
408		significandf.o \
409		sinf.o \
410		sinhf.o \
411		sincosf.o \
412		sincospif.o \
413		sqrtf.o \
414		tanf.o \
415		tanhf.o \
416		#end
417
418#
419# LSARC/2003/658 adds isnanf/isnanl
420#
421SOBJS_i386	= \
422		__reduction.o \
423		finitef.o \
424		finitel.o \
425		isnanf.o \
426		isnanl.o \
427		#end
428
429SOBJS_sparc	= \
430		#end
431
432SOBJS		= \
433		$(SOBJS_$(MCPU)) \
434		copysign.o \
435		exp.o \
436		fabs.o \
437		fmod.o \
438		ilogb.o \
439		isnan.o \
440		nextafter.o \
441		remainder.o \
442		rint.o \
443		scalbn.o \
444		#end
445
446m9xsseOBJS_i386	= \
447		__fex_hdlr.o \
448		__fex_i386.o \
449		__fex_sse.o \
450		__fex_sym.o \
451		fex_log.o \
452		#end
453
454m9xsseOBJS_sparc	= \
455		#end
456
457m9xsseOBJS	= $(m9xsseOBJS_$(MCPU))
458
459m9xOBJS_i386	= \
460		__fex_sse.o \
461		feprec.o \
462		#end
463
464m9xOBJS_sparc	= \
465		#end
466
467m9xOBJS		= \
468		$(m9xOBJS_$(MCPU)) \
469		__fex_$(MCPU).o \
470		__fex_hdlr.o \
471		__fex_sym.o \
472		fdim.o \
473		fdimf.o \
474		fdiml.o \
475		feexcept.o \
476		fenv.o \
477		feround.o \
478		fex_handler.o \
479		fex_log.o \
480		fma.o \
481		fmaf.o \
482		fmal.o \
483		fmax.o \
484		fmaxf.o \
485		fmaxl.o \
486		fmin.o \
487		fminf.o \
488		fminl.o \
489		frexp.o \
490		frexpf.o \
491		frexpl.o \
492		ldexp.o \
493		ldexpf.o \
494		ldexpl.o \
495		llrint.o \
496		llrintf.o \
497		llrintl.o \
498		llround.o \
499		llroundf.o \
500		llroundl.o \
501		lrint.o \
502		lrintf.o \
503		lrintl.o \
504		lround.o \
505		lroundf.o \
506		lroundl.o \
507		modf.o \
508		modff.o \
509		modfl.o \
510		nan.o \
511		nanf.o \
512		nanl.o \
513		nearbyint.o \
514		nearbyintf.o \
515		nearbyintl.o \
516		nexttoward.o \
517		nexttowardf.o \
518		nexttowardl.o \
519		remquo.o \
520		remquof.o \
521		remquol.o \
522		round.o \
523		roundf.o \
524		roundl.o \
525		scalbln.o \
526		scalblnf.o \
527		scalblnl.o \
528		tgamma.o \
529		tgammaf.o \
530		tgammal.o \
531		trunc.o \
532		truncf.o \
533		truncl.o \
534		#end
535
536complexOBJS	= \
537		cabs.o \
538		cabsf.o \
539		cabsl.o \
540		cacos.o \
541		cacosf.o \
542		cacosh.o \
543		cacoshf.o \
544		cacoshl.o \
545		cacosl.o \
546		carg.o \
547		cargf.o \
548		cargl.o \
549		casin.o \
550		casinf.o \
551		casinh.o \
552		casinhf.o \
553		casinhl.o \
554		casinl.o \
555		catan.o \
556		catanf.o \
557		catanh.o \
558		catanhf.o \
559		catanhl.o \
560		catanl.o \
561		ccos.o \
562		ccosf.o \
563		ccosh.o \
564		ccoshf.o \
565		ccoshl.o \
566		ccosl.o \
567		cexp.o \
568		cexpf.o \
569		cexpl.o \
570		cimag.o \
571		cimagf.o \
572		cimagl.o \
573		clog.o \
574		clogf.o \
575		clogl.o \
576		conj.o \
577		conjf.o \
578		conjl.o \
579		cpow.o \
580		cpowf.o \
581		cpowl.o \
582		cproj.o \
583		cprojf.o \
584		cprojl.o \
585		creal.o \
586		crealf.o \
587		creall.o \
588		csin.o \
589		csinf.o \
590		csinh.o \
591		csinhf.o \
592		csinhl.o \
593		csinl.o \
594		csqrt.o \
595		csqrtf.o \
596		csqrtl.o \
597		ctan.o \
598		ctanf.o \
599		ctanh.o \
600		ctanhf.o \
601		ctanhl.o \
602		ctanl.o \
603		k_atan2.o \
604		k_atan2l.o \
605		k_cexp.o \
606		k_cexpl.o \
607		k_clog_r.o \
608		k_clog_rl.o \
609		#end
610
611LIBMV1_SO_OBJS	= \
612		libmv1.o \
613		#end
614
615LIBM_SO_OBJS	= $(COBJS) $(ROBJS) $(QOBJS) $(SOBJS) $(m9xOBJS) $(complexOBJS)
616
617mvecOBJS	= \
618		__vTBL_atan1.o \
619		__vTBL_atan2.o \
620		__vTBL_rsqrt.o \
621		__vTBL_sincos.o \
622		__vTBL_sincos2.o \
623		__vTBL_sqrtf.o \
624		__vatan.o \
625		__vatan2.o \
626		__vatan2f.o \
627		__vatanf.o \
628		__vc_abs.o \
629		__vc_exp.o \
630		__vc_log.o \
631		__vc_pow.o \
632		__vcos.o \
633		__vcosbig.o \
634		__vcosbigf.o \
635		__vcosf.o \
636		__vexp.o \
637		__vexpf.o \
638		__vhypot.o \
639		__vhypotf.o \
640		__vlog.o \
641		__vlogf.o \
642		__vpow.o \
643		__vpowf.o \
644		__vrem_pio2m.o \
645		__vrhypot.o \
646		__vrhypotf.o \
647		__vrsqrt.o \
648		__vrsqrtf.o \
649		__vsin.o \
650		__vsinbig.o \
651		__vsinbigf.o \
652		__vsincos.o \
653		__vsincosbig.o \
654		__vsincosbigf.o \
655		__vsincosf.o \
656		__vsinf.o \
657		__vsqrt.o \
658		__vsqrtf.o \
659		__vz_abs.o \
660		__vz_exp.o \
661		__vz_log.o \
662		__vz_pow.o \
663		vatan2_.o \
664		vatan2f_.o \
665		vatan_.o \
666		vatanf_.o \
667		vc_abs_.o \
668		vc_exp_.o \
669		vc_log_.o \
670		vc_pow_.o \
671		vcos_.o \
672		vcosf_.o \
673		vexp_.o \
674		vexpf_.o \
675		vhypot_.o \
676		vhypotf_.o \
677		vlog_.o \
678		vlogf_.o \
679		vpow_.o \
680		vpowf_.o \
681		vrhypot_.o \
682		vrhypotf_.o \
683		vrsqrt_.o \
684		vrsqrtf_.o \
685		vsin_.o \
686		vsincos_.o \
687		vsincosf_.o \
688		vsinf_.o \
689		vsqrt_.o \
690		vsqrtf_.o \
691		vz_abs_.o \
692		vz_exp_.o \
693		vz_log_.o \
694		vz_pow_.o \
695		#end
696
697mvecaCOBJS	= \
698		__vTBL_atan1.o \
699		__vTBL_atan2.o \
700		__vTBL_rsqrt.o \
701		__vTBL_sincos.o \
702		__vTBL_sincos2.o \
703		__vTBL_sqrtf.o \
704		__vcosbig.o \
705		__vcosbigf.o \
706		__vrem_pio2m.o \
707		__vsinbig.o \
708		__vsinbigf.o \
709		__vsincosbig.o \
710		__vsincosbigf.o \
711		#end
712
713mvecaSOBJS	= \
714		__vatan.o \
715		__vatan2.o \
716		__vatan2f.o \
717		__vatanf.o \
718		__vcos.o \
719		__vcosf.o \
720		__vexp.o \
721		__vexpf.o \
722		__vhypot.o \
723		__vhypotf.o \
724		__vlog.o \
725		__vlogf.o \
726		__vpow.o \
727		__vpowf.o \
728		__vrhypot.o \
729		__vrhypotf.o \
730		__vrsqrt.o \
731		__vrsqrtf.o \
732		__vsin.o \
733		__vsincos.o \
734		__vsincosf.o \
735		__vsinf.o \
736		__vsqrt.o \
737		__vsqrtf.o \
738		#end
739
740mvecbCOBJS	= \
741		__vTBL_sincos.o \
742		__vTBL_sincos2.o \
743		__vTBL_sqrtf.o \
744		__vcosbig.o \
745		__vcosbig_ultra3.o \
746		__vrem_pio2m.o \
747		__vsinbig.o \
748		__vsinbig_ultra3.o \
749		#end
750
751mvecbSOBJS	= \
752		__vcos_ultra3.o \
753		__vlog_ultra3.o \
754		__vsin_ultra3.o \
755		__vsqrtf_ultra3.o \
756		#end
757
758LIBMVEC_SO_OBJS		= $(mvecOBJS)
759LIBMVEC_VnA_OBJS	= $(mvecaCOBJS) $(mvecaSOBJS)
760LIBMVEC_VnB_OBJS	= $(mvecbCOBJS) $(mvecbSOBJS)
761LIBMVEC_IA1_OBJS	= $(mvecOBJS)
762
763#
764# Header files under $(SRC)
765#
766
767CHDR		= \
768		libm.h \
769		libm_macros.h \
770		libm_protos.h \
771		libm_synonyms.h \
772		libm_thread.h \
773		xpg6.h \
774		#end
775
776QHDR		= longdouble.h
777
778complexHDR	= complex_wrapper.h
779
780m9xHDR		= \
781		fenv_synonyms.h \
782		fex_handler.h \
783		fma.h \
784		regset.h \
785		#end
786
787C_HDR		= $(CHDR:%=$(SRC)/C/%)
788Q_HDR		= $(QHDR:%=$(SRC)/$(LDBLDIR)/%)
789complex_HDR	= $(complexHDR:%=$(SRC)/complex/%)
790m9x_HDR		= $(m9xHDR:%=$(SRC)/m9x/%)
791HDRS		= $(C_HDR) $(Q_HDR) $(complex_HDR) $(m9x_HDR)
792
793#
794# Header files above and beyond
795#
796
797_HEADERS	= \
798		complex.h \
799		fenv.h \
800		floatingpoint.h \
801		iso/math_c99.h \
802		iso/math_iso.h \
803		math.h \
804		sys/ieeefp.h \
805		tgmath.h \
806		#end
807
808HEADERS		= $(_HEADERS:%=../inc/%)
809
810INCS		= $(HEADERS)
811
812#
813# Objects
814#
815LIBMV1_S	= $(CG)/libm.so.1
816LIBM_P		=
817LIBM_S		= $(CG)/libm.so.2
818LIBMS		= $(LIBMV1_S) $(LIBM_S)
819
820LIBMVEC_S	= $(CG)/libmvec.so.1
821LIBMVEC_VnA	= $(VnA)/libmvec_isa.so.1
822LIBMVEC_VnB	= $(VnB)/libmvec_isa.so.1
823LIBMVEC_IA1	= $(IA1)/libmvec_hwcap1.so.1
824LIBMVECS_sparc	= $(LIBMVEC_S) $(LIBMVEC_VnA) $(LIBMVEC_VnB)
825LIBMVECS_i386	= $(LIBMVEC_S) $(LIBMVEC_IA1)
826LIBMVECS	= $(LIBMVECS_$(MCPU))
827
828LIBS		= $(LIBMS) $(LIBMVECS)
829
830$(LIBM_P)	:= VARIANT	= $(CG)/mobj_p
831$(LIBMV1_S)	:= VARIANT	= $(CG)/mobj_s
832$(LIBM_S)	:= VARIANT	= $(CG)/mobj_s
833
834$(LIBMVEC_S)	:= VARIANT	= $(CG)/mvobj_s
835$(LIBMVEC_VnA)	:= VARIANT	= $(VnA)/mvobj_s
836$(LIBMVEC_VnB)	:= VARIANT	= $(VnB)/mvobj_s
837$(LIBMVEC_IA1)	:= VARIANT	= $(IA1)/mvobj_s
838
839OBJS_LIBMV1_SO	= $(LIBMV1_SO_OBJS:%=$(VARIANT)/%)
840OBJS_LIBM_SO	= $(LIBM_SO_OBJS:%=$(VARIANT)/%)
841
842OBJS_LIBMVEC_SO		= $(LIBMVEC_SO_OBJS:%=$(VARIANT)/%)
843OBJS_LIBMVEC_VnA	= $(LIBMVEC_VnA_OBJS:%=$(VARIANT)/%)
844OBJS_LIBMVEC_VnB	= $(LIBMVEC_VnB_OBJS:%=$(VARIANT)/%)
845OBJS_LIBMVEC_IA1	= $(LIBMVEC_IA1_OBJS:%=$(VARIANT)/%)
846
847OBJS_M9XSSE	= $(m9xsseOBJS:%=$(CG)/mobj_s/%)
848
849OBJS_LIB	= \
850		$(LIBM_SO_OBJS:%=$(CG)/mobj_p/%) \
851		$(LIBM_SO_OBJS:%=$(CG)/mobj_s/%) \
852		$(LIBMVEC_SO_OBJS:%=$(CG)/mvobj_s/%) \
853		$(LIBMVEC_VnA_OBJS:%=$(VnA)/mvobj_s/%) \
854		$(LIBMVEC_VnB_OBJS:%=$(VnB)/mvobj_s/%) \
855		$(LIBMVEC_IA1_OBJS:%=$(IA1)/mvobj_s/%) \
856		#end
857
858%.o			:= FPDEF_sparc	+= -DFPADD_TRAPS_INCOMPLETE_ON_NAN
859%.o			:= CDEF_sparc	+= -DFPADD_TRAPS_INCOMPLETE_ON_NAN
860%.o			:= CDEF_sparc	+= -DFDTOS_TRAPS_INCOMPLETE_IN_FNS_MODE
861
862%.o			:= CDEF_i386	+= -DCOMPARISON_MACRO_BUG
863
864$(CG)/mobj%.o		:= ASDEF	+= -DLIBM_BUILD
865$(CG)/mobj%.o		:= CDEF		+= -DLIBM_BUILD
866$(CG)/mobj%.o		:= COPT_sparc	+= -dalign
867
868$(CG)/mobj_p/%.o	:= ASDEF	+= -DPROF
869$(CG)/mobj_p/%.o	:= CDEF		+= -DPROF
870$(CG)/mobj_p/%.o	:= COPT		+= -p
871
872#
873# __vatan.c, __vatan2.c, __vpow.c ,__vexp.c reference fabs;
874# we need acomp to treat fabs as an intrinsic.
875#
876$(CG)/mv%.o		:= CDEF		+= -DLIBMVEC_SO_BUILD
877$(CG)/mv%.o		:= COPT		+= -W0,-xintrinsic
878$(CG)/mv%.o		:= CDEF_i386	+= -Dfabs=__fabs
879
880$(VnA)/mv%.o	:= CHIP		= vis
881$(VnA)/mv%.o	:= XARCH	= v8plusa
882$(VnA)/mv%.o	:= CDEF		+= -DLIBMVEC_SO_BUILD
883
884$(VnB)/mv%.o	:= CHIP		= vis
885$(VnB)/mv%.o	:= XARCH	= v8plusb
886$(VnB)/mv%.o	:= CDEF		+= -DLIBMVEC_SO_BUILD
887
888$(IA1)/mv%.o	:= CDEF		+= -DLIBMVEC_SO_BUILD
889$(IA1)/mv%.o	:= CDEF_i386	+= -Dfabs=__fabs
890$(IA1)/mv%.o	:= COPT_i386	+= -xarch=sse2
891
892$(OBJS_M9XSSE)	:= COPT_i386	= -xarch=sse2
893
894dryrun		:= DR_BGN = -@echo '
895dryrun		:= DR_END = '
896dryrun		:= DR_NBGN = true || echo '
897dryrun		:= DR_NEND = '
898
899CG_DIRS_i386	= mobj_p mobj_s mvobj_s misc
900CG_DIRS_sparc	= mobj_p mobj_s mvobj_s misc
901CG_DIRS		= $(CG_DIRS_$(MCPU))
902
903DIRS_CG		= \
904		$(CG_DIRS:%=$(CG)/%) \
905		$(ISA_DIRS:%=%/mvobj_s) \
906		#end
907
908INST_HDIR	= iso sys
909INST_DIRS_sparc	= $(ISA_DIRS:%=cpu/%)
910INST_DIRS_i386	= $(ISA_DIRS)
911INST_DIRS	= . $(INST_DIRS_$(MCPU))
912DIRS_INST	= $(INST_HDIR:%=$(USR)/include/%) $(INST_DIRS:%=$(ROOTLIB)/%)
913
914LIBS_INST_i386	= \
915		$(LIBMS:$(CG)/%=$(ROOTLIB)/%) \
916		$(LIBMVEC_S:$(CG)/%=$(ROOTLIB)/%) \
917		$(LIBMVEC_IA1:%=$(ROOTLIB)/%) \
918		#end
919LIBS_INST_sparc	= \
920		$(LIBMS:$(CG)/%=$(ROOTLIB)/%) \
921		$(LIBMVEC_S:$(CG)/%=$(ROOTLIB)/%) \
922		$(LIBMVEC_VnA:$(VnA)/%=$(ROOTLIB)/cpu/$(VnA)/%) \
923		$(LIBMVEC_VnB:$(VnB)/%=$(ROOTLIB)/cpu/$(VnB)/%) \
924		#end
925LIBS_INST	= $(LIBS_INST_$(MCPU))
926
927INST_FILES	= $(LLIB_LM:%.ln=%) $(LLIB_LM)
928FILES_INST	= $(_HEADERS:%=$(USR)/include/%) $(INST_FILES:%=$(ROOTLIB)/%)
929
930#
931# libm build rules
932#
933
934.INIT: $(DIRS_CG) $(MAPFILES)
935
936.NO_PARALLEL: $(DIRS_CG) $(DIRS_INST) $(LIBS_INST)
937
938.PARALLEL: $(OBJS_LIB)
939
940.DONE:
941	-@echo $(CG) DONE
942
943all: $(DIRS_CG) .WAIT $(INCS) $(HDRS) $(M_LN) $(LIBS)
944
945dryrun: all
946
947install: all .WAIT $(DIRS_INST) .WAIT $(FILES_INST) $(LIBS_INST)
948
949clean: FRC
950	-$(RM) -r $(CG)/mobj_p $(CG)/mobj_s $(CG)/mvobj_s \
951	 $(ISA_DIRS:%=%/mvobj_s) $(LM_IL)
952
953
954clobber: clean
955	-$(RM) -r $(CG) $(ISA_DIRS)
956
957$(CG)/misc/%.ln: %
958	$(LINT) -nvx $(LINTFLAGS) $(CPPFLAGS) -om$(<D)$(CG) $<
959	mv $(<F)$(<D)$(CG).ln $@
960
961#
962# -DLOCALLIBM turns on more inline templates intended for use
963# only by the build process
964#
965$(LM_IL): $(LIBM_IL_SRC) $(SRC)/C/libm_synonyms.h
966	@$(M4) $(FPDEF) $(M4FLAGS) -DLOCALLIBM $(LIBM_IL_SRC) | \
967	 cat $(SRC)/C/libm_synonyms.h - > $(CG)/$(@F).$(ASSUFFIX); \
968	 $(CPP_CMD) $(CPPFLAGS) $(CG)/$(@F).$(ASSUFFIX) | \
969	 sed -e 's/[ 	]*$$//' -e '/^#/d' -e '/^$$/d' > $@; \
970	 $(RM) $(CG)/$(@F).$(ASSUFFIX)
971	-@echo $@ created with `wc -w < $@` words
972
973$(LIBM_P) $(LIBM_S): $(MAPFMV2) $$(OBJS_LIBM_SO)
974	-@_d=`pwd`; echo 'cd $(VARIANT); $(LD) $(LDOPT) \'; \
975	 echo -M $${_d}/'$(MAPFMV2) \'; \
976	 echo -o '$(@:$(CG)/%=../%) \'; \
977	 echo $(OBJS_LIBM_SO:$(VARIANT)/%=%) | $(TR) -s ' 	' '\012' | \
978	 fmt -64 | sed -e 's,^,	,' -e 's,$$, \\,' \
979	 -e '$$s, \\$$, $(LDEND),'; \
980	 echo '$(MCS) -a $(LIBM_VERSION) $(@:$(CG)/%=../%)'
981	@$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) \
982	 -M $${_d}/$(MAPFMV2) \
983	 -o $(@:$(CG)/%=../%) \
984	 $(OBJS_LIBM_SO:$(VARIANT)/%=%) $(LDEND); \
985	 $(MCS) -d $(@:$(CG)/%=../%); $(STRIP) -x $(@:$(CG)/%=../%); \
986	 $(MCS) -a $(LIBM_VERSION) $(@:$(CG)/%=../%)$(DR_NEND)
987	-@echo BUILT $@
988
989$(LIBMV1_S): $(MAPFMV1) $$(OBJS_LIBMV1_SO)
990	$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) -M $${_d}/$(MAPFMV1) \
991	 -o $(@:$(CG)/%=../%) -F libm.so.2 $(OBJS_LIBMV1_SO:$(VARIANT)/%=%); \
992	 $(MCS) -d $(@:$(CG)/%=../%); $(STRIP) -x $(@:$(CG)/%=../%); \
993	 $(MCS) -a $(LIBM_VERSION) $(@:$(CG)/%=../%)$(DR_NEND)
994	-@echo BUILT $@
995
996$(LIBMVEC_S): $(MAPFMVEC) $$(OBJS_LIBMVEC_SO)
997	-@_d=`pwd`; echo 'cd $(VARIANT); $(LD) $(LDOPT) \'; \
998	 echo -M $${_d}/'$(MAPFMVEC) \'; \
999	 echo $(FLTRTYPE) '$(FLTRPATH) \'; \
1000	 echo -o '$(@:$(CG)/%=../%) \'; \
1001	 echo $(OBJS_LIBMVEC_SO:$(VARIANT)/%=%) | $(TR) -s ' 	' '\012' | \
1002	 fmt -64 | sed -e 's,^,	,' -e 's,$$, \\,' \
1003	 -e '$$s, \\$$,,'; \
1004	 echo '$(MCS) -a $(LIBM_VERSION) $(@:$(CG)/%=../%)'
1005	@$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) \
1006	 -M $${_d}/$(MAPFMVEC) \
1007	 $(FLTRTYPE) '$(FLTRPATH)' \
1008	 -o $(@:$(CG)/%=../%) \
1009	 $(OBJS_LIBMVEC_SO:$(VARIANT)/%=%); \
1010	 $(MCS) -d $(@:$(CG)/%=../%); $(STRIP) -x $(@:$(CG)/%=../%); \
1011	 $(MCS) -a $(LIBM_VERSION) $(@:$(CG)/%=../%)$(DR_NEND)
1012	-@echo BUILT $@
1013
1014$(LIBMVEC_VnA): $(MAPFMVECA) $$(OBJS_LIBMVEC_VnA)
1015	-@_d=`pwd`; echo 'cd $(VARIANT); $(LD) $(LDOPT) \'; \
1016	 echo '-z endfiltee \'; \
1017	 echo -M $${_d}/'$(MAPFMVECA) \'; \
1018	 echo -o '$(@:$(VnA)/%=../%) \'; \
1019	 echo $(OBJS_LIBMVEC_VnA:$(VARIANT)/%=%) | \
1020	 $(TR) -s ' 	' '\012' | \
1021	 fmt -64 | sed -e 's,^,	,' -e 's,$$, \\,' \
1022	 -e '$$s, \\$$,,'; \
1023	 echo '$(MCS) -a $(LIBM_VERSION) $(@:$(VnA)/%=../%)'
1024	@$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) \
1025	 -z endfiltee \
1026	 -M $${_d}/$(MAPFMVECA) \
1027	 -o $(@:$(VnA)/%=../%) \
1028	 $(OBJS_LIBMVEC_VnA:$(VARIANT)/%=%); \
1029	 $(MCS) -d $(@:$(VnA)/%=../%); $(STRIP) -x $(@:$(VnA)/%=../%); \
1030	 $(MCS) -a $(LIBM_VERSION) $(@:$(VnA)/%=../%)$(DR_NEND)
1031	-@echo BUILT $@
1032
1033$(LIBMVEC_VnB): $(MAPFMVECB) $$(OBJS_LIBMVEC_VnB)
1034	-@_d=`pwd`; echo 'cd $(VARIANT); $(LD) $(LDOPT) \'; \
1035	 echo -M $${_d}/'$(MAPFMVECB) \'; \
1036	 echo -o '$(@:$(VnB)/%=../%) \'; \
1037	 echo $(OBJS_LIBMVEC_VnB:$(VARIANT)/%=%) | \
1038	 $(TR) -s ' 	' '\012' | \
1039	 fmt -64 | sed -e 's,^,	,' -e 's,$$, \\,' \
1040	 -e '$$s, \\$$,,'; \
1041	 echo '$(MCS) -a $(LIBM_VERSION) $(@:$(VnB)/%=../%)'
1042	@$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) \
1043	 -M $${_d}/$(MAPFMVECB) \
1044	 -o $(@:$(VnB)/%=../%) \
1045	 $(OBJS_LIBMVEC_VnB:$(VARIANT)/%=%); \
1046	 $(MCS) -d $(@:$(VnB)/%=../%); $(STRIP) -x $(@:$(VnB)/%=../%); \
1047	 $(MCS) -a $(LIBM_VERSION) $(@:$(VnB)/%=../%)$(DR_NEND)
1048	-@echo BUILT $@
1049
1050$(LIBMVEC_IA1): $(MAPFMVEC) $(MAPFMVEC1) $$(OBJS_LIBMVEC_IA1)
1051	-@_d=`pwd`; echo 'cd $(VARIANT); $(LD) $(LDOPT) \'; \
1052	 echo -M $${_d}/'$(MAPFMVEC1) \'; \
1053	 echo -M $${_d}/'$(MAPFMVEC) \'; \
1054	 echo -o '$(@:$(IA1)/%=../%) \'; \
1055	 echo $(OBJS_LIBMVEC_IA1:$(VARIANT)/%=%) | \
1056	 $(TR) -s ' 	' '\012' | \
1057	 fmt -64 | sed -e 's,^,	,' -e 's,$$, \\,' \
1058	 -e '$$s, \\$$,,'; \
1059	 echo '$(MCS) -a $(LIBM_VERSION) $(@:$(IA1)/%=../%)'
1060	@$(DR_NBGN)_d=`pwd`; cd $(VARIANT); $(LD) $(LDOPT) \
1061	 -M $${_d}/$(MAPFMVEC1) \
1062	 -M $${_d}/$(MAPFMVEC) \
1063	 -o $(@:$(IA1)/%=../%) \
1064	 $(OBJS_LIBMVEC_IA1:$(VARIANT)/%=%); \
1065	 $(MCS) -d $(@:$(IA1)/%=../%); $(STRIP) -x $(@:$(IA1)/%=../%); \
1066	 $(MCS) -a $(LIBM_VERSION) $(@:$(IA1)/%=../%)$(DR_NEND)
1067	-@echo BUILT $@
1068
1069$$(VARIANT)/%.o: $(SRC)/mvec/$$(CHIP)/%.S
1070	$(DR_BGN)$(CMD.S)$(DR_END)
1071
1072$$(VARIANT)/%.o: $(SRC)/$(MDIR)/common/%.$(ASSUFFIX) $(C_HDR)
1073	$(DR_BGN)$(CMD.S)$(DR_END)
1074
1075$$(VARIANT)/%.o: $(SRC)/mvec/%.c $(HEADERS) $(LM_IL)
1076	$(DR_BGN)$(COMPILE.c) -o $@ $<$(DR_END)
1077
1078$$(VARIANT)/%.o: $(SRC)/C/%.c $(C_HDR) $(HEADERS) $(LM_IL)
1079	$(DR_BGN)$(COMPILE.c) -o $@ $<$(DR_END)
1080
1081$$(VARIANT)/%.o: $(SRC)/$(LDBLDIR)/%.c $(C_HDR) $(Q_HDR) $(HEADERS) $(LM_IL)
1082	$(DR_BGN)$(COMPILE.c) -o $@ $<$(DR_END)
1083
1084$$(VARIANT)/%.o: $(SRC)/R/%.c $(C_HDR) $(HEADERS) $(LM_IL)
1085	$(DR_BGN)$(COMPILE.c) -o $@ $<$(DR_END)
1086
1087$$(VARIANT)/%.o: $(SRC)/complex/%.c $(C_HDR) $(complex_HDR) $(HEADERS) $(LM_IL)
1088	$(DR_BGN)$(COMPILE.c) -o $@ $<$(DR_END)
1089
1090$$(VARIANT)/%.o: $(SRC)/m9x/%.c $(C_HDR) $(m9x_HDR) $(HEADERS) $(m9x_IL) $(LM_IL)
1091	$(DR_BGN)$(COMPILE.c) $(m9x_IL) -o $@ $<$(DR_END)
1092
1093$(DIRS_CG):
1094	$(INSTALL) -d -m 0775 $@
1095
1096$(DIRS_INST):
1097	$(INSTALL) -d $(OWNED_BY) $@
1098
1099$(USR)/include/%.h: ../inc/%.h
1100	$(INST_CMD)
1101
1102$(ROOTLIB)/libm.so.%: $(CG)/libm.so.%
1103	$(INST_EXEC_CMD)
1104	@if [ $< = $(LIBM_S) ]; then \
1105	 (cd $(@D); $(RM) libm.so; ln -s $(@F) libm.so) \
1106	 fi
1107
1108$(ROOTLIB)/libmvec.so.%: $(CG)/libmvec.so.%
1109	$(INST_EXEC_CMD)
1110	@cd $(@D); $(RM) libmvec.so; ln -s $(@F) libmvec.so
1111
1112$(ROOTLIB)/cpu/%.so.1: %.so.1
1113	$(INST_EXEC_CMD)
1114
1115$(ROOTLIB)/$(IA1)/%.so.1: $(IA1)/%.so.1
1116	$(INST_EXEC_CMD)
1117
1118$(ROOTLIB)/%-lm: %-lm
1119	$(INST_CMD)
1120
1121$(ROOTLIB)/%:: $(CG)/misc/%
1122	$(INST_CMD)
1123
1124FRC:
1125