diff --git a/repos/libports/lib/mk/libm.inc b/repos/libports/lib/mk/libm.inc index ed6fa92f55..b4e3dbc271 100644 --- a/repos/libports/lib/mk/libm.inc +++ b/repos/libports/lib/mk/libm.inc @@ -1,55 +1,65 @@ -PORT_DIR := $(call select_from_ports,libc) - -# Depot hack -ifneq ($(PORT_DIR),) -LIBM_PORT_DIR = $(PORT_DIR)/ -endif - -LIBM_SRC_DIR := $(LIBM_PORT_DIR)src/lib/openlibm +LIBC_PORT_DIR := $(call select_from_ports,libc) +LIBC_DIR := $(LIBC_PORT_DIR)/src/lib/libc +LIBM_DIR := $(LIBC_DIR)/lib/msun SHARED_LIB = yes -LIBS += libc -CC_C_OPT += -fno-gnu89-inline -CC_C_OPT += -std=c99 -DASSEMBLER -D__BSD_VISIBLE -Wno-implicit-function-declaration +LIBS = libc -CC_OPT += -include sys/cdefs.h +# +# finding 'math_private.h' +# +INC_DIR += $(LIBM_DIR)/src -INC_DIR += $(REP_DIR)/include/openlibm -INC_DIR += $(LIBM_SRC_DIR) -INC_DIR += $(LIBM_SRC_DIR)/src -INC_DIR += $(LIBM_PORT_DIR)include/openlibm -INC_DIR += $(LIBM_SRC_DIR)/include +# +# finding 'fpmath.h', included by 'invtrig.h' +# +INC_DIR += $(LIBC_DIR)/lib/libc/include -SUBDIRS = src $(ARCH) bsdsrc -# Add ld80 directory on x86 and x64 -ifneq ($(filter $(ARCH),i387 amd64),) -SUBDIRS += ld80 -else -ifneq ($(filter $(ARCH),aarch64),) -SUBDIRS += ld128 -else -endif +FILTER_OUT += s_exp2l.c + +# +# Files that are included by other sources (e.g., 's_sin.c'). Hence, we need +# to remove them from the build. Otherwise, we would end up with doubly +# defined symbols (and compiler warnings since those files are apparently +# not meant to be compiled individually). +# +FILTER_OUT += e_rem_pio2.c e_rem_pio2f.c + +# +# Use default warning level rather than -Wall because we do not want to touch +# the imported source code to improve build aesthetics. +# +CC_WARN = + +SRC_C = $(wildcard $(LIBM_DIR)/src/*.c) \ + $(wildcard $(LIBM_DIR)/bsdsrc/*.c) + +# +# 128 bit quadruple precision format +# +ifeq ($(LIBM_LD128),yes) +INC_DIR += $(LIBM_DIR)/ld128 +SRC_C += $(wildcard $(LIBM_DIR)/ld128/*.c) + +vpath %.c $(LIBM_DIR)/ld128 endif -define INC_template -TEST=test -override CUR_SRCS = $(1)_SRCS --include $(LIBM_SRC_DIR)/$(1)/Make.files -SRCS += $$(addprefix $(1)/,$$($(1)_SRCS)) -endef +# +# 80 bit extented precision format +# +ifeq ($(LIBM_LD80),yes) +INC_DIR += $(LIBM_DIR)/ld80 +SRC_C += $(wildcard $(LIBM_DIR)/ld80/*.c) -$(foreach dir,$(SUBDIRS),$(eval $(call INC_template,$(dir)))) +vpath %.c $(LIBM_DIR)/ld80 +endif -DUPLICATE_NAMES = $(filter $(patsubst %.S,%,$($(ARCH)_SRCS)),$(patsubst %.c,%,$(src_SRCS))) -DUPLICATE_SRCS = $(addsuffix .c,$(DUPLICATE_NAMES)) +SRC_C := $(filter-out $(FILTER_OUT),$(notdir $(SRC_C))) -CLEAN_SRCS = $(filter-out $(DUPLICATE_SRCS),$(notdir $(SRCS))) +vpath %.c $(LIBM_DIR)/src +vpath %.c $(LIBM_DIR)/bsdsrc -SRC_C += $(filter %.c,$(CLEAN_SRCS)) -SRC_S += $(filter %.S,$(CLEAN_SRCS)) +CC_CXX_WARN_STRICT = -$(foreach dir,$(SUBDIRS),$(eval vpath %.c $(LIBM_SRC_DIR)/$(dir))) -$(foreach dir,$(SUBDIRS),$(eval vpath %.S $(LIBM_SRC_DIR)/$(dir))) - -$(foreach dir,$(SUBDIRS),$(eval INC_DIR += $(LIBM_SRC_DIR)/$(dir))) +# vi: set ft=make : diff --git a/repos/libports/lib/mk/spec/arm/libm.mk b/repos/libports/lib/mk/spec/arm/libm.mk index 3fcfdda847..a056032062 100644 --- a/repos/libports/lib/mk/spec/arm/libm.mk +++ b/repos/libports/lib/mk/spec/arm/libm.mk @@ -1,2 +1,25 @@ -ARCH = arm +# +# Requires ld80/ld128 not supported on arm +# +FILTER_OUT = catrigl.c e_atan2l.c e_coshl.c e_sinhl.c \ + s_atanl.c s_fmal.c s_tanhl.c + +# +# Unsupported long double format +# +FILTER_OUT += e_acosl.c e_asinl.c e_acoshl.c e_atanhl.c \ + s_asinhl.c s_clogl.c s_cosl.c s_csqrtl.c \ + s_frexpl.c s_nextafterl.c s_nexttoward.c \ + s_rintl.c s_scalbnl.c s_sincosl.c s_sinl.c \ + s_tanl.c + +# +# Unsupported 'xbits' in 'IEEEl2bits' +# +FILTER_OUT += e_hypotl.c s_cbrtl.c s_roundl.c + include $(REP_DIR)/lib/mk/libm.inc + +SRC_C += msun/arm/fenv.c + +vpath msun/arm/fenv.c $(LIBC_DIR)/lib diff --git a/repos/libports/lib/mk/spec/arm_64/libm.mk b/repos/libports/lib/mk/spec/arm_64/libm.mk index 7e71e1835d..7fb77217db 100644 --- a/repos/libports/lib/mk/spec/arm_64/libm.mk +++ b/repos/libports/lib/mk/spec/arm_64/libm.mk @@ -1,2 +1,7 @@ -ARCH = aarch64 +LIBM_LD128 = yes + include $(REP_DIR)/lib/mk/libm.inc + +SRC_C += msun/aarch64/fenv.c + +vpath msun/aarch64/fenv.c $(LIBC_DIR)/lib diff --git a/repos/libports/lib/mk/spec/x86_32/libc.mk b/repos/libports/lib/mk/spec/x86_32/libc.mk index 3a4083e654..d6c14c3f75 100644 --- a/repos/libports/lib/mk/spec/x86_32/libc.mk +++ b/repos/libports/lib/mk/spec/x86_32/libc.mk @@ -3,7 +3,4 @@ include $(REP_DIR)/lib/mk/libc.mk INC_DIR += $(REP_DIR)/src/lib/libc/spec/x86_32 INC_DIR += $(LIBC_DIR)/include/spec/x86_32 -SRC_C += msun/i387/fenv.c -vpath msun/i387/fenv.c $(LIBC_DIR)/lib - CC_CXX_WARN_STRICT = diff --git a/repos/libports/lib/mk/spec/x86_32/libm.mk b/repos/libports/lib/mk/spec/x86_32/libm.mk index 616ebe620f..a338ef3b6e 100644 --- a/repos/libports/lib/mk/spec/x86_32/libm.mk +++ b/repos/libports/lib/mk/spec/x86_32/libm.mk @@ -1,2 +1,7 @@ -ARCH = i387 +LIBM_LD80 = yes + include $(REP_DIR)/lib/mk/libm.inc + +SRC_C += msun/i387/fenv.c + +vpath msun/i387/fenv.c $(LIBC_DIR)/lib diff --git a/repos/libports/lib/mk/spec/x86_64/libm.mk b/repos/libports/lib/mk/spec/x86_64/libm.mk index a8734f8adf..ae0c2f9ad5 100644 --- a/repos/libports/lib/mk/spec/x86_64/libm.mk +++ b/repos/libports/lib/mk/spec/x86_64/libm.mk @@ -1,2 +1,7 @@ -ARCH = amd64 +LIBM_LD80 = yes + include $(REP_DIR)/lib/mk/libm.inc + +SRC_C += msun/amd64/fenv.c + +vpath msun/amd64/fenv.c $(LIBC_DIR)/lib diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash index 558e7d5d42..9113419bec 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -3ec28a350593879749a015a584ed24ffd7d3edce +368270b192622fe7c23d0318e737d3370663d52c diff --git a/repos/libports/ports/libc.port b/repos/libports/ports/libc.port index 3e19d8fc3c..83198a86c8 100644 --- a/repos/libports/ports/libc.port +++ b/repos/libports/ports/libc.port @@ -1,6 +1,6 @@ LICENSE = BSD VERSION = 12.0.0 -DOWNLOADS = libc.archive openlibm.archive +DOWNLOADS = libc.archive D = src/lib/libc @@ -8,14 +8,6 @@ URL(libc) = http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.0-RELEASE/src.t SHA(libc) = 0da393ac2174168a71c1c527d1453e07372295187d05c288250800cb152a889b DIR(libc) = $(D) -OWNER := JuliaMath -REPO := openlibm -REV := a96f0740e32c3d8aaa0a34c3988201018dfa90ce - -URL(openlibm) := https://github.com/$(OWNER)/$(REPO)/archive/$(REV).tar.gz -SHA(openlibm) := a9c7d4450c3e9a8b92ec1e20c7a9fd2682e900743dff37f163c9a9ac68b4f471 -DIR(openlibm) := src/lib/openlibm - TAR_OPT(libc) = --strip-components=2 TAR_OPT(libc) += usr/src/contrib/gdtoa @@ -53,10 +45,7 @@ PATCHES := $(sort $(wildcard $(REP_DIR)/$(D)/patches/*.patch)) # # Generic headers # - -DIRS := include/libc include/openlibm - -DIR_CONTENT(include/openlibm) = src/lib/openlibm/include/* +DIRS := include/libc DIR_CONTENT(include/libc) := \ $(addprefix $(D)/include/,\ @@ -215,7 +204,7 @@ DIR_CONTENT(include/spec/arm/libc) := \ DIRS += include/spec/arm/libc/machine DIR_CONTENT(include/spec/arm/libc/machine) := \ $(call common_include_libc_arch_machine_content,arm) \ - $(addprefix $(D)/sys/arm/include/, armreg.h atomic-v6.h ieee.h sysreg.h sigframe.h) + $(addprefix $(D)/sys/arm/include/, acle-compat.h armreg.h atomic-v6.h ieee.h sysreg.h sigframe.h) # diff --git a/repos/libports/recipes/src/libc/content.mk b/repos/libports/recipes/src/libc/content.mk index c9b3aa755b..5dca045c46 100644 --- a/repos/libports/recipes/src/libc/content.mk +++ b/repos/libports/recipes/src/libc/content.mk @@ -1,4 +1,4 @@ -content: include/libc-plugin src/lib/libc/target.mk lib/mk LICENSE src/lib/openlibm +content: include/libc-plugin src/lib/libc/target.mk lib/mk LICENSE LIBC_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libc) LIBM_PORT_DIR := $(LIBC_PORT_DIR) @@ -8,10 +8,6 @@ src/lib/libc: cp -r $(LIBC_PORT_DIR)/src/lib/libc/* $@ cp -r $(REP_DIR)/src/lib/libc/* $@ -src/lib/openlibm: - mkdir -p $@ - cp -r $(LIBM_PORT_DIR)/$@/* $@ - # target.mk for triggering the build of both libraries libc and libm src/lib/libc/target.mk: src/lib/libc echo "LIBS += libc libm" > $@ diff --git a/repos/libports/run/ieee754.run b/repos/libports/run/ieee754.run index b226fa2c46..25ea6edf84 100644 --- a/repos/libports/run/ieee754.run +++ b/repos/libports/run/ieee754.run @@ -1480,16 +1480,16 @@ DBL_MAX_EXP = 1024 LDBL_MAX_EXP = 16384 FLT_EPSILON = 1.19209e-07 = 0x1p-23 -DBL_EPSILON = 2.22044e-16 = 0x1p-52 -LDBL_EPSILON = 1.92592e-34 = 0x1p-112 +DBL_EPSILON = 2.22045e-16 = 0x1p-52 +LDBL_EPSILON = 1.92593e-34 = 0x1p-112 -FLT_MIN = 1.1755e-38 = 0x1p-126 -DBL_MIN = 2.22508e-308 = 0x1p-1022 -LDBL_MIN = 3.36211e-4932 = 0x1p-16382 +FLT_MIN = 1.17549e-38 = 0x1p-126 +DBL_MIN = 2.22507e-308 = 0x1p-1022 +LDBL_MIN = 3.3621e-4932 = 0x1p-16382 -FLT_MAX = 3.40283e+38 = 0x1.fffffep+127 -DBL_MAX = 1.7977e+308 = 0x1.fffffffffffffp+1023 -LDBL_MAX = 1.18974e+4932 = 0x1.ffffffffffffffffffffffffffffp+16383 +FLT_MAX = 3.40282e+38 = 0x1.fffffep+127 +DBL_MAX = 1.79769e+308 = 0x1.fffffffffffffp+1023 +LDBL_MAX = 1.18973e+4932 = 0x1.ffffffffffffffffffffffffffffp+16383 sizeof(float) = 4 sizeof(double) = 8 @@ -1498,7 +1498,7 @@ sizeof(long double) = 16 x + y, with x = 9007199254740994.0 and y = 1.0 - 1/65536.0 (type double). The IEEE-754 result is 9007199254740994 with double precision. The IEEE-754 result is 9007199254740996 with extended precision. -The obtained result is 9007199254740996. +The obtained result is 9007199254740994. NAN != NAN --> 1 (should be 1) isnan(NAN) --> 1 (should be 1)