1# 2# This file and its contents are supplied under the terms of the 3# Common Development and Distribution License ("CDDL"), version 1.0. 4# You may only use this file in accordance with the terms of version 5# 1.0 of the CDDL. 6# 7# A full copy of the text of the CDDL should have accompanied this 8# source. A copy of the CDDL is also available via the Internet at 9# http://www.illumos.org/license/CDDL. 10# 11 12# 13# Copyright 2011 Nexenta Systems, Inc. All rights reserved. 14# Copyright (c) 2019, Joyent, Inc. 15# 16 17LIBMDIR = $(SRC)/lib/libm 18 19LIBMSRC = $(LIBMDIR)/common 20 21CPP_CMD = $(CC) -E -Xs 22 23ASSUFFIX_sparc = S 24ASSUFFIX_i386 = s 25ASSUFFIX = $(ASSUFFIX_$(MACH)) 26 27# With studio CSTD of neither enabled nor disabled is "no_lib", whereby we 28# expect C99-the-language, but don't modify the behaviour of library routines. 29# This is VERY IMPORTANT, as $(CSTD_GNU99), for instance, would link us with 30# values-xpg6, which would introduce an __xpg6 to our object with the C99 31# flags set, causing us to default C99 libm behaviour on, breaking 32# compatibility. 33# 34# We must then, unfortunately, defeat the GNU compiler _defaulting_ to C99, by 35# in that case setting it back to gnu89, which _also_ accepts C99 syntax as 36# far as is important. 37CSTD = 38CFLAGS += -_gcc=-std=gnu89 39CFLAGS64 += -_gcc=-std=gnu89 40 41M4FLAGS = -D__STDC__ -DPIC 42 43LDBLDIR_sparc = Q 44LDBLDIR_i386 = LD 45LDBLDIR = $(LDBLDIR_$(MACH)) 46 47LM_IL = $(LIBMDIR)/$(TARGET_ARCH)/src/locallibm.il 48 49CFLAGS += $(C_PICFLAGS) $(XSTRCONST) $(LM_IL) 50CFLAGS64 += $(C_PICFLAGS) $(XSTRCONST) $(LM_IL) 51sparc_CFLAGS += -Wa,-xarch=v8plus 52 53CPPFLAGS += -I$(LIBMSRC)/C \ 54 -I$(LIBMSRC)/$(LDBLDIR) -I$(LIBMDIR)/$(TARGET_ARCH)/src 55$(RELEASE_BUILD)CPPFLAGS += -DNDEBUG 56 57# GCC needs __C99FEATURES__ such that the implementations of isunordered, 58# isgreaterequal, islessequal, etc, exist. This is basically equivalent to 59# providing no -xc99 to Studio, in that it gets us the C99 language features, 60# but not values-xpg6, the reason for which is outlined with CSTD. 61CFLAGS += -_gcc=-D__C99FEATURES__ 62CFLAGS64 += -_gcc=-D__C99FEATURES__ 63 64# libm depends on integer overflow characteristics 65CFLAGS += -_gcc=-fno-strict-overflow 66CFLAGS64 += -_gcc=-fno-strict-overflow 67 68# sparse currently has no _Complex support 69CFLAGS += -_smatch=off 70CFLAGS64 += -_smatch=off 71 72$(DYNLIB) := LDLIBS += -lc 73 74 75CLEANFILES += pics/*.s pics/*.S 76 77FPDEF_amd64 = -DARCH_amd64 78FPDEF_sparc = -DCG89 -DARCH_v8plus -DFPADD_TRAPS_INCOMPLETE_ON_NAN 79FPDEF_sparcv9 = -DARCH_v9 -DFPADD_TRAPS_INCOMPLETE_ON_NAN 80FPDEF = $(FPDEF_$(TARGET_ARCH)) 81 82ASFLAGS = -P -D_ASM $(FPDEF) 83 84XARCH_sparc = v8plus 85XARCH_sparcv9 = v9 86XARCH_i386 = f80387 87XARCH_amd64 = amd64 88XARCH = $(XARCH_$(TARGET_ARCH)) 89 90ASOPT_sparc = -xarch=$(XARCH) $(AS_PICFLAGS) 91ASOPT_sparcv9 = -xarch=$(XARCH) $(AS_PICFLAGS) 92ASOPT_i386 = 93ASOPT_amd64 = -xarch=$(XARCH) $(AS_PICFLAGS) 94ASOPT = $(ASOPT_$(TARGET_ARCH)) 95 96ASFLAGS += $(ASOPT) 97 98CPPFLAGS_sparc = -DFPADD_TRAPS_INCOMPLETE_ON_NAN \ 99 -DFDTOS_TRAPS_INCOMPLETE_IN_FNS_MODE 100 101CPPFLAGS += $(CPPFLAGS_$(MACH)) 102ASFLAGS += $(CPPFLAGS) 103