mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-11 11:51:46 +00:00
libm: use libm from libc and remove openlibm
- enable libm for x86/arm - update ieee754 to slightly changed output - remove openlibm from port fixes #4213
This commit is contained in:
parent
4b10aa94ec
commit
4d4cc4fd02
@ -1,55 +1,65 @@
|
|||||||
PORT_DIR := $(call select_from_ports,libc)
|
LIBC_PORT_DIR := $(call select_from_ports,libc)
|
||||||
|
LIBC_DIR := $(LIBC_PORT_DIR)/src/lib/libc
|
||||||
# Depot hack
|
LIBM_DIR := $(LIBC_DIR)/lib/msun
|
||||||
ifneq ($(PORT_DIR),)
|
|
||||||
LIBM_PORT_DIR = $(PORT_DIR)/
|
|
||||||
endif
|
|
||||||
|
|
||||||
LIBM_SRC_DIR := $(LIBM_PORT_DIR)src/lib/openlibm
|
|
||||||
|
|
||||||
SHARED_LIB = yes
|
SHARED_LIB = yes
|
||||||
LIBS += libc
|
|
||||||
|
|
||||||
CC_C_OPT += -fno-gnu89-inline
|
LIBS = libc
|
||||||
CC_C_OPT += -std=c99 -DASSEMBLER -D__BSD_VISIBLE -Wno-implicit-function-declaration
|
|
||||||
|
|
||||||
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)
|
# finding 'fpmath.h', included by 'invtrig.h'
|
||||||
INC_DIR += $(LIBM_SRC_DIR)/src
|
#
|
||||||
INC_DIR += $(LIBM_PORT_DIR)include/openlibm
|
INC_DIR += $(LIBC_DIR)/lib/libc/include
|
||||||
INC_DIR += $(LIBM_SRC_DIR)/include
|
|
||||||
|
|
||||||
SUBDIRS = src $(ARCH) bsdsrc
|
FILTER_OUT += s_exp2l.c
|
||||||
# Add ld80 directory on x86 and x64
|
|
||||||
ifneq ($(filter $(ARCH),i387 amd64),)
|
#
|
||||||
SUBDIRS += ld80
|
# Files that are included by other sources (e.g., 's_sin.c'). Hence, we need
|
||||||
else
|
# to remove them from the build. Otherwise, we would end up with doubly
|
||||||
ifneq ($(filter $(ARCH),aarch64),)
|
# defined symbols (and compiler warnings since those files are apparently
|
||||||
SUBDIRS += ld128
|
# not meant to be compiled individually).
|
||||||
else
|
#
|
||||||
endif
|
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
|
endif
|
||||||
|
|
||||||
define INC_template
|
#
|
||||||
TEST=test
|
# 80 bit extented precision format
|
||||||
override CUR_SRCS = $(1)_SRCS
|
#
|
||||||
-include $(LIBM_SRC_DIR)/$(1)/Make.files
|
ifeq ($(LIBM_LD80),yes)
|
||||||
SRCS += $$(addprefix $(1)/,$$($(1)_SRCS))
|
INC_DIR += $(LIBM_DIR)/ld80
|
||||||
endef
|
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)))
|
SRC_C := $(filter-out $(FILTER_OUT),$(notdir $(SRC_C)))
|
||||||
DUPLICATE_SRCS = $(addsuffix .c,$(DUPLICATE_NAMES))
|
|
||||||
|
|
||||||
CLEAN_SRCS = $(filter-out $(DUPLICATE_SRCS),$(notdir $(SRCS)))
|
vpath %.c $(LIBM_DIR)/src
|
||||||
|
vpath %.c $(LIBM_DIR)/bsdsrc
|
||||||
|
|
||||||
SRC_C += $(filter %.c,$(CLEAN_SRCS))
|
CC_CXX_WARN_STRICT =
|
||||||
SRC_S += $(filter %.S,$(CLEAN_SRCS))
|
|
||||||
|
|
||||||
$(foreach dir,$(SUBDIRS),$(eval vpath %.c $(LIBM_SRC_DIR)/$(dir)))
|
# vi: set ft=make :
|
||||||
$(foreach dir,$(SUBDIRS),$(eval vpath %.S $(LIBM_SRC_DIR)/$(dir)))
|
|
||||||
|
|
||||||
$(foreach dir,$(SUBDIRS),$(eval INC_DIR += $(LIBM_SRC_DIR)/$(dir)))
|
|
||||||
|
@ -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
|
include $(REP_DIR)/lib/mk/libm.inc
|
||||||
|
|
||||||
|
SRC_C += msun/arm/fenv.c
|
||||||
|
|
||||||
|
vpath msun/arm/fenv.c $(LIBC_DIR)/lib
|
||||||
|
@ -1,2 +1,7 @@
|
|||||||
ARCH = aarch64
|
LIBM_LD128 = yes
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/libm.inc
|
include $(REP_DIR)/lib/mk/libm.inc
|
||||||
|
|
||||||
|
SRC_C += msun/aarch64/fenv.c
|
||||||
|
|
||||||
|
vpath msun/aarch64/fenv.c $(LIBC_DIR)/lib
|
||||||
|
@ -3,7 +3,4 @@ include $(REP_DIR)/lib/mk/libc.mk
|
|||||||
INC_DIR += $(REP_DIR)/src/lib/libc/spec/x86_32
|
INC_DIR += $(REP_DIR)/src/lib/libc/spec/x86_32
|
||||||
INC_DIR += $(LIBC_DIR)/include/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 =
|
CC_CXX_WARN_STRICT =
|
||||||
|
@ -1,2 +1,7 @@
|
|||||||
ARCH = i387
|
LIBM_LD80 = yes
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/libm.inc
|
include $(REP_DIR)/lib/mk/libm.inc
|
||||||
|
|
||||||
|
SRC_C += msun/i387/fenv.c
|
||||||
|
|
||||||
|
vpath msun/i387/fenv.c $(LIBC_DIR)/lib
|
||||||
|
@ -1,2 +1,7 @@
|
|||||||
ARCH = amd64
|
LIBM_LD80 = yes
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/libm.inc
|
include $(REP_DIR)/lib/mk/libm.inc
|
||||||
|
|
||||||
|
SRC_C += msun/amd64/fenv.c
|
||||||
|
|
||||||
|
vpath msun/amd64/fenv.c $(LIBC_DIR)/lib
|
||||||
|
@ -1 +1 @@
|
|||||||
3ec28a350593879749a015a584ed24ffd7d3edce
|
368270b192622fe7c23d0318e737d3370663d52c
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
LICENSE = BSD
|
LICENSE = BSD
|
||||||
VERSION = 12.0.0
|
VERSION = 12.0.0
|
||||||
DOWNLOADS = libc.archive openlibm.archive
|
DOWNLOADS = libc.archive
|
||||||
|
|
||||||
D = src/lib/libc
|
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
|
SHA(libc) = 0da393ac2174168a71c1c527d1453e07372295187d05c288250800cb152a889b
|
||||||
DIR(libc) = $(D)
|
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) = --strip-components=2
|
||||||
|
|
||||||
TAR_OPT(libc) += usr/src/contrib/gdtoa
|
TAR_OPT(libc) += usr/src/contrib/gdtoa
|
||||||
@ -53,10 +45,7 @@ PATCHES := $(sort $(wildcard $(REP_DIR)/$(D)/patches/*.patch))
|
|||||||
#
|
#
|
||||||
# Generic headers
|
# Generic headers
|
||||||
#
|
#
|
||||||
|
DIRS := include/libc
|
||||||
DIRS := include/libc include/openlibm
|
|
||||||
|
|
||||||
DIR_CONTENT(include/openlibm) = src/lib/openlibm/include/*
|
|
||||||
|
|
||||||
DIR_CONTENT(include/libc) := \
|
DIR_CONTENT(include/libc) := \
|
||||||
$(addprefix $(D)/include/,\
|
$(addprefix $(D)/include/,\
|
||||||
@ -215,7 +204,7 @@ DIR_CONTENT(include/spec/arm/libc) := \
|
|||||||
DIRS += include/spec/arm/libc/machine
|
DIRS += include/spec/arm/libc/machine
|
||||||
DIR_CONTENT(include/spec/arm/libc/machine) := \
|
DIR_CONTENT(include/spec/arm/libc/machine) := \
|
||||||
$(call common_include_libc_arch_machine_content,arm) \
|
$(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)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -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)
|
LIBC_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libc)
|
||||||
LIBM_PORT_DIR := $(LIBC_PORT_DIR)
|
LIBM_PORT_DIR := $(LIBC_PORT_DIR)
|
||||||
@ -8,10 +8,6 @@ src/lib/libc:
|
|||||||
cp -r $(LIBC_PORT_DIR)/src/lib/libc/* $@
|
cp -r $(LIBC_PORT_DIR)/src/lib/libc/* $@
|
||||||
cp -r $(REP_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
|
# target.mk for triggering the build of both libraries libc and libm
|
||||||
src/lib/libc/target.mk: src/lib/libc
|
src/lib/libc/target.mk: src/lib/libc
|
||||||
echo "LIBS += libc libm" > $@
|
echo "LIBS += libc libm" > $@
|
||||||
|
@ -1480,16 +1480,16 @@ DBL_MAX_EXP = 1024
|
|||||||
LDBL_MAX_EXP = 16384
|
LDBL_MAX_EXP = 16384
|
||||||
|
|
||||||
FLT_EPSILON = 1.19209e-07 = 0x1p-23
|
FLT_EPSILON = 1.19209e-07 = 0x1p-23
|
||||||
DBL_EPSILON = 2.22044e-16 = 0x1p-52
|
DBL_EPSILON = 2.22045e-16 = 0x1p-52
|
||||||
LDBL_EPSILON = 1.92592e-34 = 0x1p-112
|
LDBL_EPSILON = 1.92593e-34 = 0x1p-112
|
||||||
|
|
||||||
FLT_MIN = 1.1755e-38 = 0x1p-126
|
FLT_MIN = 1.17549e-38 = 0x1p-126
|
||||||
DBL_MIN = 2.22508e-308 = 0x1p-1022
|
DBL_MIN = 2.22507e-308 = 0x1p-1022
|
||||||
LDBL_MIN = 3.36211e-4932 = 0x1p-16382
|
LDBL_MIN = 3.3621e-4932 = 0x1p-16382
|
||||||
|
|
||||||
FLT_MAX = 3.40283e+38 = 0x1.fffffep+127
|
FLT_MAX = 3.40282e+38 = 0x1.fffffep+127
|
||||||
DBL_MAX = 1.7977e+308 = 0x1.fffffffffffffp+1023
|
DBL_MAX = 1.79769e+308 = 0x1.fffffffffffffp+1023
|
||||||
LDBL_MAX = 1.18974e+4932 = 0x1.ffffffffffffffffffffffffffffp+16383
|
LDBL_MAX = 1.18973e+4932 = 0x1.ffffffffffffffffffffffffffffp+16383
|
||||||
|
|
||||||
sizeof(float) = 4
|
sizeof(float) = 4
|
||||||
sizeof(double) = 8
|
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).
|
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 9007199254740994 with double precision.
|
||||||
The IEEE-754 result is 9007199254740996 with extended 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)
|
NAN != NAN --> 1 (should be 1)
|
||||||
isnan(NAN) --> 1 (should be 1)
|
isnan(NAN) --> 1 (should be 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user