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 56# GCC needs __C99FEATURES__ such that the implementations of isunordered, 57# isgreaterequal, islessequal, etc, exist. This is basically equivalent to 58# providing no -xc99 to Studio, in that it gets us the C99 language features, 59# but not values-xpg6, the reason for which is outlined with CSTD. 60CFLAGS += -_gcc=-D__C99FEATURES__ 61CFLAGS64 += -_gcc=-D__C99FEATURES__ 62 63# libm depends on integer overflow characteristics 64CFLAGS += -_gcc=-fno-strict-overflow 65CFLAGS64 += -_gcc=-fno-strict-overflow 66 67# sparse currently has no _Complex support 68CFLAGS += -_smatch=off 69CFLAGS64 += -_smatch=off 70 71$(DYNLIB) := LDLIBS += -lc 72 73 74CLEANFILES += pics/*.s pics/*.S 75 76FPDEF_amd64 = -DARCH_amd64 77FPDEF_sparc = -DCG89 -DARCH_v8plus -DFPADD_TRAPS_INCOMPLETE_ON_NAN 78FPDEF_sparcv9 = -DARCH_v9 -DFPADD_TRAPS_INCOMPLETE_ON_NAN 79FPDEF = $(FPDEF_$(TARGET_ARCH)) 80 81ASFLAGS = -P -D_ASM $(FPDEF) 82 83XARCH_sparc = v8plus 84XARCH_sparcv9 = v9 85XARCH_i386 = f80387 86XARCH_amd64 = amd64 87XARCH = $(XARCH_$(TARGET_ARCH)) 88 89ASOPT_sparc = -xarch=$(XARCH) $(AS_PICFLAGS) 90ASOPT_sparcv9 = -xarch=$(XARCH) $(AS_PICFLAGS) 91ASOPT_i386 = 92ASOPT_amd64 = -xarch=$(XARCH) $(AS_PICFLAGS) 93ASOPT = $(ASOPT_$(TARGET_ARCH)) 94 95ASFLAGS += $(ASOPT) 96 97CPPFLAGS_sparc = -DFPADD_TRAPS_INCOMPLETE_ON_NAN \ 98 -DFDTOS_TRAPS_INCOMPLETE_IN_FNS_MODE 99 100CPPFLAGS += $(CPPFLAGS_$(MACH)) 101ASFLAGS += $(CPPFLAGS) 102