From c3ac8052162b2457b805ed64c8417c1326da1d48 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Thu, 2 Feb 2017 22:01:29 -0800 Subject: [PATCH] Bake rem2pi from openspecfun into the system image --- base/math.jl | 3 +-- src/Makefile | 27 ++++++++++++++------- src/specfun/Makefile | 50 +++++++++++++++++++++++++++++++++++++++ src/specfun/libspecfun.a | Bin 0 -> 12480 bytes 4 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 src/specfun/Makefile create mode 100644 src/specfun/libspecfun.a diff --git a/base/math.jl b/base/math.jl index 194c620f0af31..0e28d194932d4 100644 --- a/base/math.jl +++ b/base/math.jl @@ -177,7 +177,6 @@ log(b::Number, x::Number) = log(promote(b,x)...) # type specific math functions const libm = Base.libm_name -const openspecfun = "libopenspecfun" # functions with no domain error """ @@ -701,7 +700,7 @@ function ieee754_rem_pio2(x::Float64) # https://github.com/JuliaLang/openspecfun/blob/master/rem_pio2/e_rem_pio2.c y = [0.0,0.0] - n = ccall((:__ieee754_rem_pio2, openspecfun), Cint, (Float64,Ptr{Float64}), x, y) + n = ccall(:__ieee754_rem_pio2, Cint, (Float64,Ptr{Float64}), x, y) return (n,y) end diff --git a/src/Makefile b/src/Makefile index a6bc4b4f5a5f7..b2a61f2a9369a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -94,8 +94,8 @@ FLAGS += -DLLVM_SHLIB endif # USE_LLVM_SHLIB == 1 COMMON_LIBS := -L$(build_shlibdir) -L$(build_libdir) $(LIBUV) $(LIBUTF8PROC) $(NO_WHOLE_ARCHIVE) $(LLVMLINK) $(OSLIBS) -DEBUG_LIBS := $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp-debug.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport-debug.a $(COMMON_LIBS) -RELEASE_LIBS := $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport.a $(COMMON_LIBS) +DEBUG_LIBS := $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp-debug.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport-debug.a $(WHOLE_ARCHIVE) $(BUILDDIR)/specfun/libspecfun-debug.a $(COMMON_LIBS) +RELEASE_LIBS := $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport.a $(WHOLE_ARCHIVE) $(BUILDDIR)/specfun/libspecfun.a $(COMMON_LIBS) OBJS := $(SRCS:%=$(BUILDDIR)/%.o) DOBJS := $(SRCS:%=$(BUILDDIR)/%.dbg.obj) @@ -203,12 +203,18 @@ $(BUILDDIR)/support/libsupport.a: $(SRCDIR)/support/*.h $(SRCDIR)/support/*.c $(BUILDDIR)/support/libsupport-debug.a: $(SRCDIR)/support/*.h $(SRCDIR)/support/*.c $(MAKE) -C $(SRCDIR)/support debug BUILDDIR='$(abspath $(BUILDDIR)/support)' +$(BUILDDIR)/specfun/libspecfun.a: $(SRCDIR)/specfun/*.h $(SRCDIR)/specfun/*.c $(BUILDDIR)/support/libsupport.a + $(MAKE) -C $(SRCDIR)/specfun BUILDDIR='$(abspath $(BUILDDIR)/specfun)' + +$(BUILDDIR)/specfun/libspecfun-debug.a: $(SRCDIR)/specfun/*.h $(SRCDIR)/specfun/*.c $(BUILDDIR)/support/libsupport-debug.a + $(MAKE) -C $(SRCDIR)/specfun debug BUILDDIR='$(abspath $(BUILDDIR)/specfun)' + $(FLISP_EXECUTABLE_release): $(BUILDDIR)/flisp/libflisp.a -$(BUILDDIR)/flisp/libflisp.a: $(addprefix $(SRCDIR)/,flisp/*.h flisp/*.c) $(BUILDDIR)/support/libsupport.a +$(BUILDDIR)/flisp/libflisp.a: $(addprefix $(SRCDIR)/,flisp/*.h flisp/*.c) $(BUILDDIR)/specfun/libspecfun.a $(MAKE) -C $(SRCDIR)/flisp BUILDDIR='$(abspath $(BUILDDIR)/flisp)' $(FLISP_EXECUTABLE_debug): $(BUILDDIR)/flisp/libflisp-debug.a -$(BUILDDIR)/flisp/libflisp-debug.a: $(addprefix $(SRCDIR)/,flisp/*.h flisp/*.c) $(BUILDDIR)/support/libsupport-debug.a +$(BUILDDIR)/flisp/libflisp-debug.a: $(addprefix $(SRCDIR)/,flisp/*.h flisp/*.c) $(BUILDDIR)/specfun/libspecfun-debug.a $(MAKE) -C $(SRCDIR)/flisp debug BUILDDIR='$(abspath $(BUILDDIR)/flisp)' $(BUILDDIR)/julia_version.h: $(JULIAHOME)/VERSION @@ -255,7 +261,7 @@ else SONAME_DEBUG := endif -$(build_shlibdir)/libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a $(LIBUV) +$(build_shlibdir)/libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a $(BUILDDIR)/specfun/libspecfun-debug.a $(LIBUV) @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(DEBUGFLAGS) $(DOBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(DEBUG_LIBS) $(SONAME_DEBUG)) $(INSTALL_NAME_CMD)libjulia-debug.$(SHLIB_EXT) $@ ifneq ($(OS), WINNT) @@ -264,13 +270,13 @@ ifneq ($(OS), WINNT) endif $(DSYMUTIL) $@ -$(BUILDDIR)/libjulia-debug.a: $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a +$(BUILDDIR)/libjulia-debug.a: $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a $(BUILDDIR)/specfun/libspecfun-debug.a rm -f $@ @$(call PRINT_LINK, ar -rcs $@ $(DOBJS)) libjulia-debug: $(build_shlibdir)/libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT) $(PUBLIC_HEADER_TARGETS) -$(build_shlibdir)/libjulia.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(LIBUV) +$(build_shlibdir)/libjulia.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(BUILDDIR)/specfun/libspecfun.a $(LIBUV) @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(SHIPFLAGS) $(OBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(RELEASE_LIBS) $(SONAME)) $(INSTALL_NAME_CMD)libjulia.$(SHLIB_EXT) $@ ifneq ($(OS), WINNT) @@ -279,7 +285,7 @@ ifneq ($(OS), WINNT) endif $(DSYMUTIL) $@ -$(BUILDDIR)/libjulia.a: julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a +$(BUILDDIR)/libjulia.a: julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(BUILDDIR)/specfun/libspecfun.a rm -f $@ @$(call PRINT_LINK, ar -rcs $@ $(OBJS)) libjulia-release: $(build_shlibdir)/libjulia.$(JL_MAJOR_MINOR_SHLIB_EXT) $(PUBLIC_HEADER_TARGETS) @@ -296,7 +302,10 @@ clean-flisp: clean-support: -$(MAKE) -C $(SRCDIR)/support clean BUILDDIR='$(abspath $(BUILDDIR)/support)' +clean-specfun: + -$(MAKE) -C $(SRCDIR)/specfun clean BUILDDIR='$(abspath $(BUILDDIR)/specfun)' + -cleanall: clean clean-flisp clean-support +cleanall: clean clean-flisp clean-support clean-specfun .PHONY: default all debug release clean cleanall clean-* libccalltest julia_flisp.boot.inc.phony diff --git a/src/specfun/Makefile b/src/specfun/Makefile new file mode 100644 index 0000000000000..56e69ddeae508 --- /dev/null +++ b/src/specfun/Makefile @@ -0,0 +1,50 @@ +JULIAHOME := $(abspath ../..) +BUILDDIR := . +include $(JULIAHOME)/Make.inc + +override CFLAGS_add = +override CPPFLAGS_add = + +ifeq ($(USECLANG),1) + override CFLAGS_add += -fno-builtin +endif + +ifeq ($(USEGCC),1) + override CFLAGS_add += -fno-gnu89-inline -std=c99 +endif + +ifeq ($(USE_SYSTEM_LIBM),0) + override CPPFLAGS_add += -DUSE_OPENLIBM -I$(build_includedir) -I$(build_includedir)/openlibm +endif + +override CFLAGS += $(JCFLAGS) -O3 -std=c99 +ifeq ($(USEICC),1) + override CFLAGS += -fp-model precise +endif + +ifeq ($(OS),WINNT) + override CFLAGS_add += -nodefaultlibs +else + override CFLAGS_add += -fPIC +endif + +SRCS := e_rem_pio2.c e_rem_pio2f.c k_rem_pio2.c +OBJS := $(addprefix $(BUILDDIR)/,$(patsubst %.c,%.o,$(SRCS))) + +default: $(JULIA_BUILD_MODE) + +all: release debug +release: $(BUILDDIR)/libspecfun.a +debug: $(BUILDDIR)/libspecfun-debug.a + +$(BUILDDIR)/%.o: $(BUILDDIR)/%.c + $(CC) $(CPPFLAGS) $(CPPFLAGS_add) $(CFLAGS_add) $(CFLAGS) -c $< -o $@ + +$(BUILDDIR)/libspecfun.a: $(OBJS) + $(AR) -rcs libspecfun.a $(OBJS) + +$(BUILDDIR)/libspecfun-debug.a: $(OBJS) + $(AR) -rcs libspecfun-debug.a $(OBJS) + +clean: + cd $(BUILDDIR) && rm $(OBJS) *.a diff --git a/src/specfun/libspecfun.a b/src/specfun/libspecfun.a new file mode 100644 index 0000000000000000000000000000000000000000..39a9ca8929ec796a27a61d7d534be968328a39b4 GIT binary patch literal 12480 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 literal 0 HcmV?d00001