git: 47322ff8ea59 - main - lang/julia: partly remove the dependency on gfortran
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 15 Nov 2023 20:36:14 UTC
The branch main has been updated by thierry: URL: https://cgit.FreeBSD.org/ports/commit/?id=47322ff8ea597f8c6bddcbb0bd33e9dcbc584492 commit 47322ff8ea597f8c6bddcbb0bd33e9dcbc584492 Author: Thierry Thomas <thierry@FreeBSD.org> AuthorDate: 2023-11-15 10:26:36 +0000 Commit: Thierry Thomas <thierry@FreeBSD.org> CommitDate: 2023-11-15 20:36:09 +0000 lang/julia: partly remove the dependency on gfortran Theoretically this port should not depend on gfortran, because we do not build the bundled OpenBLAS (use the system package) nor SuiteSparse (GPL libraries are deactivated). It is certainly possible to totally remove the dependency on gfortran, but this would require some more intrusive patches: this one only removes the linkage with the libraries provided by GCC (among them libgomp). Remark: this does not fix the failure reported at <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273219#c37>. --- lang/julia/Makefile | 13 ++- lang/julia/files/patch-Make.inc | 122 ++++++++++++++++++++- lang/julia/files/patch-Makefile | 18 ++- lang/julia/files/patch-base_Makefile | 12 ++ .../files/patch-stdlib_LinearAlgebra_src_lbt.jl | 6 +- lang/julia/pkg-plist | 7 -- 6 files changed, 157 insertions(+), 21 deletions(-) diff --git a/lang/julia/Makefile b/lang/julia/Makefile index 6041ae0c0d10..ab4b36654b5e 100644 --- a/lang/julia/Makefile +++ b/lang/julia/Makefile @@ -1,7 +1,7 @@ PORTNAME= julia DISTVERSION= 1.9.3 -PORTREVISION= 4 DISTVERSIONSUFFIX= -full +PORTREVISION= 5 CATEGORIES= lang math MASTER_SITES= https://github.com/JuliaLang/${PORTNAME}/releases/download/v${DISTVERSION}/ @@ -19,6 +19,7 @@ MY_DEPENDS= 7zz:archivers/7-zip BUILD_DEPENDS= patchelf:sysutils/patchelf \ cmake:devel/cmake-core \ ittapi>0:devel/ittapi \ + gfortran${_GCC_VER}:lang/gcc${_GCC_VER} \ ${MY_DEPENDS} LIB_DEPENDS= libcurl.so:ftp/curl \ libdSFMT.so:math/dsfmt \ @@ -32,9 +33,12 @@ LIB_DEPENDS= libcurl.so:ftp/curl \ libnghttp2.so:www/libnghttp2 \ libunwind.so:devel/libunwind \ libopenlibm.so:math/openlibm -RUN_DEPENDS= ${MY_DEPENDS} +RUN_DEPENDS= ${MY_DEPENDS} \ + gfortran${_GCC_VER}:lang/gcc${_GCC_VER} -USES= gmake cpe fortran python perl5 blaslapack:openblas +# Do not set USES=fortran to avoid extra-linkage +USES= gmake cpe python perl5 blaslapack:openblas +_GCC_VER= ${GCC_DEFAULT:S/.//} CPE_VENDOR= julialang @@ -98,7 +102,7 @@ pre-configure: # unset ARCH for auto-detection # Julia build script uses the name x86_86/x86, which are different from ports framework echo "ARCH=" >> ${WRKSRC}/Make.user - echo "LIBBLAS=-lopenblas -L${LOCALBASE}/lib" >> ${WRKSRC}/Make.user + echo "LIBBLAS= -L${LOCALBASE}/lib -lopenblas" >> ${WRKSRC}/Make.user echo "LIBBLASNAME=libopenblas" >> ${WRKSRC}/Make.user echo 'LIBLAPACK= $$(LIBBLAS)' >> ${WRKSRC}/Make.user echo 'LIBLAPACKNAME= $$(LIBBLASNAME)' >> ${WRKSRC}/Make.user @@ -132,7 +136,6 @@ post-install-DEBUG-off: .for bin in lld dsymutil ${STRIP_CMD} ${STAGEDIR}${PREFIX}/libexec/julia/${bin} .endfor - ${FIND} ${STAGEDIR}${PREFIX}/share/julia/compiled -name "*.so" | ${XARGS} ${STRIP_CMD} post-install-DOCS-off: ${RM} -r ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/doc diff --git a/lang/julia/files/patch-Make.inc b/lang/julia/files/patch-Make.inc index f496531f6e90..8f1475d40a13 100644 --- a/lang/julia/files/patch-Make.inc +++ b/lang/julia/files/patch-Make.inc @@ -1,4 +1,4 @@ ---- Make.inc.orig 2023-05-09 10:49:55 UTC +--- Make.inc.orig 2023-08-24 16:20:21 UTC +++ Make.inc @@ -268,7 +268,7 @@ docdir := $(datarootdir)/doc/julia libexecdir := $(prefix)/libexec @@ -18,3 +18,123 @@ build_man1dir := $(build_mandir)/man1 build_includedir := $(build_prefix)/include build_sysconfdir := $(build_prefix)/etc +@@ -654,33 +654,6 @@ endif + include $(BUILDROOT)/$(MAKE_USER_FNAME) + endif + +-# A bit of a kludge to work around libraries linking to FreeBSD's outdated system libgcc_s +-# Instead, let's link to the libgcc_s corresponding to the installation of gfortran +-ifeq ($(OS),FreeBSD) +-ifneq (,$(findstring gfortran,$(FC))) +- +-# First let's figure out what version of GCC we're dealing with +-_GCCMAJOR := $(shell $(FC) -dumpversion 2>/dev/null | cut -d'.' -f1) +-_GCCMINOR := $(shell $(FC) -dumpversion 2>/dev/null | cut -d'.' -f2) +- +-# The ports system uses major and minor for GCC < 5 (e.g. gcc49 for GCC 4.9), otherwise major only +-ifeq ($(_GCCMAJOR),4) +- _GCCVER := $(_GCCMAJOR)$(_GCCMINOR) +-else +- _GCCVER := $(_GCCMAJOR) +-endif +- +-# Allow the user to specify this in Make.user +-GCCPATH ?= $(LOCALBASE)/lib/gcc$(_GCCVER) +- +-# We're going to copy over the libraries we need from GCCPATH into build_libdir, then +-# tell everyone to look for them there. At install time, the build_libdir added into +-# the RPATH here is removed by patchelf. +-LDFLAGS += -L$(build_libdir) -Wl,-rpath,$(build_libdir) +- +-endif # gfortran +-endif # FreeBSD +- + ifneq ($(CC_BASE)$(CXX_BASE),$(shell echo $(CC) | cut -d' ' -f1)$(shell echo $(CXX) | cut -d' ' -f1)) + $(error Forgot override directive on CC or CXX in Make.user? Cowardly refusing to build) + endif +@@ -1295,14 +1268,8 @@ JLDFLAGS += -Wl,-Bdynamic + + ifeq ($(OS), FreeBSD) + JLDFLAGS += -Wl,-Bdynamic +-OSLIBS += -lelf -lkvm -lrt -lpthread -latomic ++OSLIBS += -lelf -lkvm -lrt -lpthread + +-# Tweak order of libgcc_s in DT_NEEDED, +-# make it loaded first to +-# prevent from linking to outdated system libs. +-# See #21788 +-OSLIBS += -lgcc_s +- + OSLIBS += -Wl,--export-dynamic -Wl,--version-script=$(JULIAHOME)/src/julia.expmap \ + $(NO_WHOLE_ARCHIVE) + endif +@@ -1511,30 +1478,6 @@ LIBJULIACODEGEN_DEBUG_INSTALL_DEPLIB := $(call dep_lib + LIBJULIACODEGEN_DEBUG_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir),$(build_shlibdir)/libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT)) + LIBJULIACODEGEN_DEBUG_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir),$(private_shlibdir)/libjulia-codegen-debug.$(JL_MAJOR_SHLIB_EXT)) + +-ifeq ($(OS),WINNT) +-ifeq ($(BINARY),32) +-LIBGCC_NAME := libgcc_s_sjlj-1.$(SHLIB_EXT) +-else +-LIBGCC_NAME := libgcc_s_seh-1.$(SHLIB_EXT) +-endif +-endif +-# On macOS, libgcc_s has soversion 1.1 always on aarch64 and only for GCC 12+ +-# (-> libgfortran 5) on x86_64 +-ifeq ($(OS),Darwin) +-ifeq ($(ARCH),aarch64) +-LIBGCC_NAME := libgcc_s.1.1.$(SHLIB_EXT) +-else +-ifeq ($(LIBGFORTRAN_VERSION),5) +-LIBGCC_NAME := libgcc_s.1.1.$(SHLIB_EXT) +-else +-LIBGCC_NAME := libgcc_s.1.$(SHLIB_EXT) +-endif +-endif +-endif +-ifneq ($(findstring $(OS),Linux FreeBSD),) +-LIBGCC_NAME := libgcc_s.$(SHLIB_EXT).1 +-endif +- + # USE_SYSTEM_CSL causes it to get symlinked into build_private_shlibdir + ifeq ($(USE_SYSTEM_CSL),1) + LIBGCC_BUILD_DEPLIB := $(call dep_lib_path,$(build_libdir),$(build_private_shlibdir)/$(LIBGCC_NAME)) +@@ -1567,7 +1510,6 @@ LIBM_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir),$ + LIBM_INSTALL_DEPLIB := $(call dep_lib_path,$(libdir),$(private_shlibdir)/$(LIBMNAME).$(SHLIB_EXT)) + + # We list: +-# * libgcc_s, because FreeBSD needs to load ours, not the system one. + # * libopenlibm, because Windows has an untrustworthy libm, and we want to use ours more than theirs + # * libstdc++, because while performing `libstdc++` probing we need to + # know the path to the bundled `libstdc++` library. +@@ -1589,7 +1531,6 @@ LOADER_BUILD_DEP_LIBS = $(call build_deplibs, \ + endef + + LOADER_BUILD_DEP_LIBS = $(call build_deplibs, \ +- $(LIBGCC_BUILD_DEPLIB) \ + $(LIBM_BUILD_DEPLIB) \ + @$(LIBSTDCXX_BUILD_DEPLIB) \ + @$(LIBJULIAINTERNAL_BUILD_DEPLIB) \ +@@ -1597,7 +1538,6 @@ LOADER_DEBUG_BUILD_DEP_LIBS = $(call build_deplibs, \ + ) + + LOADER_DEBUG_BUILD_DEP_LIBS = $(call build_deplibs, \ +- $(LIBGCC_BUILD_DEPLIB) \ + $(LIBM_BUILD_DEPLIB) \ + @$(LIBSTDCXX_BUILD_DEPLIB) \ + @$(LIBJULIAINTERNAL_DEBUG_BUILD_DEPLIB) \ +@@ -1605,14 +1545,12 @@ LOADER_INSTALL_DEP_LIBS = $(call build_deplibs, \ + ) + + LOADER_INSTALL_DEP_LIBS = $(call build_deplibs, \ +- $(LIBGCC_INSTALL_DEPLIB) \ + $(LIBM_INSTALL_DEPLIB) \ + @$(LIBSTDCXX_INSTALL_DEPLIB) \ + @$(LIBJULIAINTERNAL_INSTALL_DEPLIB) \ + @$(LIBJULIACODEGEN_INSTALL_DEPLIB) \ + ) + LOADER_DEBUG_INSTALL_DEP_LIBS = $(call build_deplibs, \ +- $(LIBGCC_INSTALL_DEPLIB) \ + $(LIBM_INSTALL_DEPLIB) \ + @$(LIBSTDCXX_INSTALL_DEPLIB) \ + @$(LIBJULIAINTERNAL_DEBUG_INSTALL_DEPLIB) \ diff --git a/lang/julia/files/patch-Makefile b/lang/julia/files/patch-Makefile index e339d0dd603e..f3091dff5517 100644 --- a/lang/julia/files/patch-Makefile +++ b/lang/julia/files/patch-Makefile @@ -1,6 +1,14 @@ ---- Makefile.orig 2023-05-09 10:51:38 UTC +--- Makefile.orig 2023-08-24 16:20:21 UTC +++ Makefile -@@ -236,7 +236,7 @@ endef +@@ -210,7 +210,6 @@ endif + JL_PRIVATE_LIBS-$(USE_SYSTEM_LAPACK) += $(LIBLAPACKNAME) + endif + +-JL_PRIVATE_LIBS-$(USE_SYSTEM_CSL) += libgfortran libquadmath libstdc++ libgcc_s libgomp libssp libatomic + ifeq ($(OS),Darwin) + JL_PRIVATE_LIBS-$(USE_SYSTEM_CSL) += libc++ + endif +@@ -236,7 +235,7 @@ endef endef @@ -9,7 +17,7 @@ @$(MAKE) $(QUIET_MAKE) $(JULIA_BUILD_MODE) @for subdir in $(bindir) $(datarootdir)/julia/stdlib/$(VERSDIR) $(docdir) $(man1dir) $(includedir)/julia $(libdir) $(private_libdir) $(sysconfdir) $(private_libexecdir); do \ mkdir -p $(DESTDIR)$$subdir; \ -@@ -339,8 +339,6 @@ endif +@@ -339,8 +338,6 @@ endif cp -R -L $(JULIAHOME)/base/* $(DESTDIR)$(datarootdir)/julia/base cp -R -L $(JULIAHOME)/test/* $(DESTDIR)$(datarootdir)/julia/test cp -R -L $(build_datarootdir)/julia/* $(DESTDIR)$(datarootdir)/julia @@ -18,7 +26,7 @@ # Remove various files which should not be installed -rm -f $(DESTDIR)$(datarootdir)/julia/base/version_git.sh -rm -f $(DESTDIR)$(datarootdir)/julia/test/Makefile -@@ -350,12 +348,6 @@ endif +@@ -350,12 +347,6 @@ endif -rm -f $(DESTDIR)$(datarootdir)/julia/stdlib/$(VERSDIR)/*/build-checked # Copy in beautiful new man page $(INSTALL_F) $(build_man1dir)/julia.1 $(DESTDIR)$(man1dir)/ @@ -31,7 +39,7 @@ # Update RPATH entries and JL_SYSTEM_IMAGE_PATH if $(private_libdir_rel) != $(build_private_libdir_rel) ifneq ($(private_libdir_rel),$(build_private_libdir_rel)) -@@ -430,26 +422,16 @@ endif +@@ -430,26 +421,16 @@ endif endif endif diff --git a/lang/julia/files/patch-base_Makefile b/lang/julia/files/patch-base_Makefile new file mode 100644 index 000000000000..99a5ca8d82bc --- /dev/null +++ b/lang/julia/files/patch-base_Makefile @@ -0,0 +1,12 @@ +--- base/Makefile.orig 2023-08-24 16:20:21 UTC ++++ base/Makefile +@@ -242,9 +242,6 @@ $(eval $(call symlink_system_library,CSL,libstdc++,6)) + $(eval $(call symlink_system_library,CSL,libquadmath,0)) + $(eval $(call symlink_system_library,CSL,libstdc++,6)) + # We allow libssp, libatomic and libgomp to fail as they are not available on all systems +-$(eval $(call symlink_system_library,CSL,libssp,0,ALLOW_FAILURE)) +-$(eval $(call symlink_system_library,CSL,libatomic,1,ALLOW_FAILURE)) +-$(eval $(call symlink_system_library,CSL,libgomp,1,ALLOW_FAILURE)) + $(eval $(call symlink_system_library,PCRE,libpcre2-8)) + $(eval $(call symlink_system_library,DSFMT,libdSFMT)) + $(eval $(call symlink_system_library,LIBBLASTRAMPOLINE,libblastrampoline)) diff --git a/lang/julia/files/patch-stdlib_LinearAlgebra_src_lbt.jl b/lang/julia/files/patch-stdlib_LinearAlgebra_src_lbt.jl index ef9f481a9987..a6823905f426 100644 --- a/lang/julia/files/patch-stdlib_LinearAlgebra_src_lbt.jl +++ b/lang/julia/files/patch-stdlib_LinearAlgebra_src_lbt.jl @@ -1,6 +1,6 @@ ---- stdlib/LinearAlgebra/src/lbt.jl.orig 2022-11-23 20:37:29 UTC +--- stdlib/LinearAlgebra/src/lbt.jl.orig 2023-08-24 16:20:21 UTC +++ stdlib/LinearAlgebra/src/lbt.jl -@@ -181,7 +181,7 @@ function lbt_get_num_threads() +@@ -210,7 +210,7 @@ function lbt_set_num_threads(nthreads) end function lbt_set_num_threads(nthreads) @@ -8,4 +8,4 @@ + return end - function lbt_forward(path; clear::Bool = false, verbose::Bool = false, suffix_hint::Union{String,Nothing} = nothing) + function lbt_forward(path::AbstractString; clear::Bool = false, verbose::Bool = false, suffix_hint::Union{String,Nothing} = nothing) diff --git a/lang/julia/pkg-plist b/lang/julia/pkg-plist index e84a4af10d95..1a4bfc516581 100644 --- a/lang/julia/pkg-plist +++ b/lang/julia/pkg-plist @@ -38,18 +38,14 @@ include/julia/uv/unix.h include/julia/uv/version.h lib/julia/libLLVM-14jl.so lib/julia/libLLVM.so -lib/julia/libatomic.so.1 lib/julia/libblastrampoline.so lib/julia/libblastrampoline.so.5 lib/julia/libblastrampoline.so.5.4.0 lib/julia/libccalltest.so lib/julia/libcurl.so lib/julia/libdSFMT.so -lib/julia/libgcc_s.so.1 -lib/julia/libgfortran.so.5 lib/julia/libgit2.so lib/julia/libgmp.so -lib/julia/libgomp.so.1 lib/julia/libjulia-codegen.so lib/julia/libjulia-codegen.so.1 lib/julia/libjulia-codegen.so.%%VERSION%% @@ -65,10 +61,7 @@ lib/julia/libnghttp2.so lib/julia/libopenblas.so lib/julia/libopenlibm.so lib/julia/libpcre2-8.so -lib/julia/libquadmath.so.0 lib/julia/libssh2.so -lib/julia/libssp.so.0 -lib/julia/libstdc++.so.6 lib/julia/libuv.so lib/julia/libuv.so.2 lib/julia/libuv.so.2.0.0