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