diff --git a/lang/sbcl/Makefile b/lang/sbcl/Makefile index 12b01dc607d7..6426dad13f63 100644 --- a/lang/sbcl/Makefile +++ b/lang/sbcl/Makefile @@ -1,192 +1,192 @@ # All *-sbcl ports and any other port with SBCL fasl files must get a # PORTREVISION bump when lang/sbcl is updated. The compiled fasl files are # pinned to exact versions of everything used to build them. PORTNAME= sbcl -DISTVERSION= 2.6.5 +DISTVERSION= 2.6.6 DISTVERSIONSUFFIX= -source PORTEPOCH= 1 CATEGORIES= lang lisp MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${DISTVERSION} \ SF/${PORTNAME}/${PORTNAME}/1.2.7:binaries \ LOCAL/pkubaj:binaries DISTFILES= ${DISTNAME}${EXTRACT_SUFX} MAINTAINER= krion@FreeBSD.org COMMENT= Common Lisp development system derived from the CMU CL system WWW= https://sbcl.sourceforge.io/ LICENSE= BSD2CLAUSE PD LICENSE_COMB= dual LICENSE_FILE= ${WRKSRC}/COPYING ONLY_FOR_ARCHS= amd64 i386 powerpc64 powerpc64le LIB_DEPENDS= libgmp.so:math/gmp \ libmpfr.so:math/mpfr RUN_DEPENDS= cl-freebsd-asdf-init>=0:devel/cl-freebsd-asdf-init USES= gmake makeinfo tar:bzip2 SUB_FILES= sbclrc WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION} PORTDOCS= * # All options explained into file: ${WRKSRC}/base-target-features.lisp-expr OPTIONS_DEFINE= COMPRESSION DOCS GARBAGE_COLLECTOR LINKABLE_RUNTIME \ QSHOW SAFEPOINT SIMD THREADS UNICODE XREF OPTIONS_DEFAULT= COMPRESSION SBCL THREADS UNICODE OPTIONS_SINGLE= BOOTSTRAP OPTIONS_SINGLE_BOOTSTRAP= ABCL CCL CMUCL SBCL OPTIONS_EXCLUDE= ABCL CMUCL ABCL_DESC= Armed Bear Common Lisp BOOTSTRAP_DESC= Supported languages of the build host CCL_DESC= Clozure Common Lisp CMUCL_DESC= Carnegie Mellon University Common Lisp COMPRESSION_DESC= Enable core compression GARBAGE_COLLECTOR_DESC= Enable mark-region parallel garbage collector LINKABLE_RUNTIME_DESC= Enable SB-LINKABLE-RUNTIME feature (experimental) QSHOW_DESC= C runtime with low-level debugging output SAFEPOINT_DESC= Using safepoints instead of signals SBCL_DESC= Steel Bank Common Lisp SIMD_DESC= Enable SB-SIMD (requires CPUs supporting AVX2) XREF_DESC= XREF data for SBCL internals ABCL_BUILD_DEPENDS= abcl:lang/abcl ABCL_VARS= XC_HOST="abcl" CCL_BUILD_DEPENDS= ccl:lang/ccl CCL_VARS= XC_HOST="ccl --no-init --batch --quiet" CMUCL_BUILD_DEPENDS= lisp:lang/cmucl CMUCL_VARS= XC_HOST="lisp -nositeinit -noinit -batch -quiet" COMPRESSION_LIB_DEPENDS= libzstd.so:archivers/zstd COMPRESSION_USES= localbase:ldflags COMPRESSION_VARS= MAKE_SH_ARGS+="--with-sb-core-compression" COMPRESSION_VARS_OFF= MAKE_SH_ARGS+="--without-sb-core-compression" DOCS_VARS= INFO="asdf sbcl" GARBAGE_COLLECTOR_VARS= MAKE_SH_ARGS+="--without-gencgc --with-mark-region-gc" GARBAGE_COLLECTOR_VARS_OFF= MAKE_SH_ARGS+="--with-gencgc --without-mark-region-gc" LINKABLE_RUNTIME_VARS= MAKE_SH_ARGS+="--with-sb-linkable-runtime" LINKABLE_RUNTIME_VARS_OFF= MAKE_SH_ARGS+="--without-sb-linkable-runtime" QSHOW_VARS= MAKE_SH_ARGS+="--with-sb-qshow" QSHOW_VARS_OFF= MAKE_SH_ARGS+="--without-sb-qshow" SAFEPOINT_IMPLIES= THREADS SAFEPOINT_VARS= MAKE_SH_ARGS+="--with-sb-safepoint --with-sb-thruption --with-sb-wtimer" SAFEPOINT_VARS_OFF= MAKE_SH_ARGS+="--without-sb-safepoint --without-sb-thruption --without-sb-wtimer" SBCL_DISTFILES= ${PORTNAME}-${SBCL_BOOT_LIST:M${ARCHOS_PATTERN}}-binary${EXTRACT_SUFX}:binaries SBCL_VARS= XC_HOST="${BOOT_WRKSRC}/src/runtime/sbcl --core ${BOOT_WRKSRC}/output/sbcl.core --noinform --disable-debugger --no-sysinit --no-userinit" SIMD_VARS= MAKE_SH_ARGS+="--with-sb-simd" SIMD_VARS_OFF= MAKE_SH_ARGS+="--without-sb-simd" THREADS_VARS= MAKE_SH_ARGS+="--with-sb-thread" THREADS_VARS_OFF= MAKE_SH_ARGS+="--without-sb-thread" UNICODE_VARS= MAKE_SH_ARGS+="--with-sb-unicode" UNICODE_VARS_OFF= MAKE_SH_ARGS+="--without-sb-unicode" XREF_VARS= MAKE_SH_ARGS+="--with-sb-xref-for-internals" XREF_VARS_OFF= MAKE_SH_ARGS+="--without-sb-xref-for-internals" CONMODULES= asdf sb-aclrepl sb-bsd-sockets sb-cltl2 sb-concurrency sb-cover \ sb-executable sb-gmp sb-grovel sb-introspect sb-md5 sb-mpfr \ sb-posix sb-queue sb-rotate-byte sb-rt sb-simple-streams \ sb-sprof MAKE_SH_ARGS?= --prefix="${PREFIX}" --xc-host="${XC_HOST}" # You can use the DYNAMIC_SPACE_SIZE knob to change the size of SBCL dynamically-allocated memory. # Default for arch: i386 = 512Mb, amd64 = 1Gb. .if defined(DYNAMIC_SPACE_SIZE) MAKE_SH_ARGS+= --dynamic-space-size=${DYNAMIC_SPACE_SIZE} .endif SBCL_BOOT_LIST= 1.2.7-x86-64-freebsd 1.2.7-x86-freebsd 1.2.7-x86-64-dragonfly \ 2.5.7-powerpc64le-freebsd 2.6.5-powerpc64-freebsd .include ARCHOS_PATTERN= *-${ARCH:S/amd64/x86-64/:S/i386/x86/}-${OPSYS:tl}* BOOT_WRKSRC= ${WRKDIR}/${PORTNAME}-${SBCL_BOOT_LIST:M${ARCHOS_PATTERN}} .if ${PORT_OPTIONS:MLINKABLE_RUNTIME} PLIST_SUB+= LINKABLE_RUNTIME="" .else PLIST_SUB+= LINKABLE_RUNTIME="@comment " .endif .if ${PORT_OPTIONS:MSIMD} PLIST_SUB+= SIMD="" .else PLIST_SUB+= SIMD="@comment " .endif # for port maintenance, invoke "make makesum PLUS_BOOTSTRAPS=1" .if defined (PLUS_BOOTSTRAPS) . for B in ${SBCL_BOOT_LIST} . if !${DISTFILES:Msbcl-${B}-*} DISTFILES:= ${DISTFILES} \ ${PORTNAME}-${B}-binary${EXTRACT_SUFX}:binaries . endif . endfor .endif post-patch: @${REINPLACE_CMD} -e 's|/etc|${PREFIX}/etc|' \ ${WRKSRC}/src/code/toplevel.lisp \ ${WRKSRC}/doc/${PORTNAME}.1 \ ${WRKSRC}/doc/manual/start-stop.texinfo do-build: (cd ${WRKSRC} && ${SH} make.sh ${MAKE_SH_ARGS}) post-build-DOCS-on: ${DO_MAKE_BUILD} -C ${WRKSRC}/doc/manual info html do-install: (cd ${WRKSRC} && ${SETENV} \ INSTALL_ROOT="${STAGEDIR}${PREFIX}" \ MAN_DIR="${STAGEDIR}${PREFIX}/share/man" \ INFO_DIR="${STAGEDIR}${PREFIX}/${INFO_PATH}" \ DOC_DIR="${STAGEDIR}${DOCSDIR}" \ SBCL_HOME="" \ ${SH} install.sh) .for M in ${CONMODULES} ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/${M} ${INSTALL_DATA} ${WRKSRC}/contrib/${M}/*.[la]* \ ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/${M}/ .endfor .if ${PORT_OPTIONS:MSIMD} # sb-simd has its code in './code' ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/sb-simd ${INSTALL_DATA} ${WRKSRC}/contrib/sb-simd/code/*.[la]* \ ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/sb-simd/ .endif ${INSTALL_DATA} ${WRKDIR}/sbclrc ${STAGEDIR}${PREFIX}/etc/sbclrc.sample post-install: ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME} post-install-DOCS-on: ${RM} ${STAGEDIR}${PREFIX}/${INFO_PATH}/dir # don't requered with INFO= ${RM} -r ${STAGEDIR}${DOCSDIR}/html # empty directory created by install.sh check regression-test test: build (cd ${WRKSRC}/tests && ${SH} run-tests.sh) .include .if ${OSVERSION} >= 1500000 BUILD_DEPENDS+= ${LOCALBASE}/lib/compat/libutil.so.9:misc/compat14x .endif .include diff --git a/lang/sbcl/distinfo b/lang/sbcl/distinfo index 582c0daaf839..bd0cdd4ba722 100644 --- a/lang/sbcl/distinfo +++ b/lang/sbcl/distinfo @@ -1,13 +1,13 @@ -TIMESTAMP = 1780741067 -SHA256 (sbcl-2.6.5-source.tar.bz2) = 91ec75f647252ed6e6aeae9b1a13f47c7c6cfd9b68488dc69f1a6fea5accb440 -SIZE (sbcl-2.6.5-source.tar.bz2) = 8497853 +TIMESTAMP = 1783069472 +SHA256 (sbcl-2.6.6-source.tar.bz2) = a65a7a30812aaf54925d1192b9b9e810f527c79911c6000b7548105aef7da34b +SIZE (sbcl-2.6.6-source.tar.bz2) = 8514421 SHA256 (sbcl-2.6.5-powerpc64-freebsd-binary.tar.bz2) = 524bd7a65f9b499dd32be87438118893c9f74976e33912920d1ab86b1a509425 SIZE (sbcl-2.6.5-powerpc64-freebsd-binary.tar.bz2) = 8592925 SHA256 (sbcl-1.2.7-x86-64-freebsd-binary.tar.bz2) = c61f5e777e56921d2452d0fa6b71024ccd9b99bc659676498d398b8663176492 SIZE (sbcl-1.2.7-x86-64-freebsd-binary.tar.bz2) = 10463348 SHA256 (sbcl-1.2.7-x86-freebsd-binary.tar.bz2) = cf68bfab780a14964d9593f5b47fa3e174cf43e95ae3e558712d218f1c37bdbe SIZE (sbcl-1.2.7-x86-freebsd-binary.tar.bz2) = 10322926 SHA256 (sbcl-1.2.7-x86-64-dragonfly-binary.tar.bz2) = 4d8d589909d1b003afc5d58276affe2202f4a75d3760737f2ac6ce046a1f905c SIZE (sbcl-1.2.7-x86-64-dragonfly-binary.tar.bz2) = 10586301 SHA256 (sbcl-2.5.7-powerpc64le-freebsd-binary.tar.bz2) = 3dc17885caa57fc10d972729dca6a5a1414a3043d3af406e8907659ac8ea856a SIZE (sbcl-2.5.7-powerpc64le-freebsd-binary.tar.bz2) = 9973076 diff --git a/lang/sbcl/files/patch-make-config.sh b/lang/sbcl/files/patch-make-config.sh deleted file mode 100644 index 2b821e305daa..000000000000 --- a/lang/sbcl/files/patch-make-config.sh +++ /dev/null @@ -1,19 +0,0 @@ ---- make-config.sh.orig -+++ make-config.sh -@@ -765,6 +765,16 @@ - fi - ;; - ppc64) -+ # The ppc64 C calling convention is either ELFv1, which passes function -+ # pointers as 3-word descriptors, or ELFv2, which branches to the entry -+ # address directly. This is a property of the toolchain, independent of -+ # endianness (ppc64le is always ELFv2; ppc64 big-endian may be either), so -+ # ask the C compiler which ABI it targets via its _CALL_ELF predefine -+ # (2 = ELFv2, 1 or undefined = ELFv1) and add :ppc64-elfv1 for the -+ # descriptor ABI. -+ if [ "`echo | ${CC:-cc} -E -dM - 2>/dev/null | grep -w _CALL_ELF | awk '{print $3}'`" != 2 ]; then -+ printf ' :ppc64-elfv1' >> $ltf -+ fi - ;; - riscv) - if [ "$xlen" = "64" ]; then diff --git a/lang/sbcl/files/patch-src_compiler_ppc64_c-call.lisp b/lang/sbcl/files/patch-src_compiler_ppc64_c-call.lisp deleted file mode 100644 index 57d2e85ec47c..000000000000 --- a/lang/sbcl/files/patch-src_compiler_ppc64_c-call.lisp +++ /dev/null @@ -1,59 +0,0 @@ ---- src/compiler/ppc64/c-call.lisp.orig -+++ src/compiler/ppc64/c-call.lisp -@@ -25,7 +25,7 @@ - ;;;; "The stack pointer (stored in r1) shall maintain quadword alignment." - ;;;; (quadword = 16 bytes) - (defconstant +stack-alignment-mask+ 15) --(defconstant +stack-frame-size+ #+little-endian 12 #+big-endian 14) -+(defconstant +stack-frame-size+ #-ppc64-elfv1 12 #+ppc64-elfv1 14) - - (defstruct arg-state - (gpr-args 0) -@@ -139,7 +139,7 @@ - (arg-tns (invoke-alien-type-method :arg-tn arg-type arg-state))) - (values (make-wired-tn* 'positive-fixnum any-reg-sc-number nsp-offset) - (let ((size (arg-state-stack-frame-size arg-state))) -- (cond #+little-endian -+ (cond #-ppc64-elfv1 - ((= size +stack-frame-size+) - ;; no stack args - 0) -@@ -261,7 +261,7 @@ - (make-fpr (n) - (make-random-tn (sc-or-lose 'double-reg) n))) - (let* ((segment (make-segment)) -- #+big-endian -+ #+ppc64-elfv1 - (function-descriptor-size 24)) - (assemble (segment 'nil) - ;; Copy args from registers or stack to new position -@@ -387,7 +387,7 @@ - (bug "Unknown alien floating point type: ~S" type)))))) - ;; Leave a gap for a PPC64ELF ABIv1 function descriptor, - ;; to be filled in later relative to the SAP. -- #+big-endian -+ #+ppc64-elfv1 - (dotimes (k (/ function-descriptor-size 4)) ; nop is 4 bytes - (inst nop)) - (mapc #'save-arg -@@ -411,9 +411,9 @@ - (inst stdu stack-pointer stack-pointer (- frame-size)) - - ;; And make the call. -- #+little-endian -+ #-ppc64-elfv1 - (load-address-into r0 (callback_wrapper_trampoline)) -- #+big-endian -+ #+ppc64-elfv1 - (destructuring-bind (r2 r12) (mapcar #'make-gpr '(2 12)) - (load-address-into r12 (callback_wrapper_trampoline)) - (inst ld r0 r12 0) -@@ -461,7 +461,7 @@ - ;; instruction of the wrapper. This assembler wrapper only - ;; cares about the address, so leave the other descriptor - ;; fields filled with no-op instructions. -- #+big-endian -+ #+ppc64-elfv1 - (setf (sap-ref-64 sap 0) (+ (sap-int sap) function-descriptor-size)) - (alien-funcall - (extern-alien "ppc_flush_icache" diff --git a/lang/sbcl/files/patch-src_compiler_ppc64_parms.lisp b/lang/sbcl/files/patch-src_compiler_ppc64_parms.lisp deleted file mode 100644 index f3839b126d59..000000000000 --- a/lang/sbcl/files/patch-src_compiler_ppc64_parms.lisp +++ /dev/null @@ -1,13 +0,0 @@ ---- src/compiler/ppc64/parms.lisp.orig -+++ src/compiler/ppc64/parms.lisp -@@ -80,7 +80,9 @@ - :dynamic-space-start #x1000000000) - - (defconstant alien-linkage-table-growth-direction :up) --(defconstant alien-linkage-table-entry-size #+little-endian 28 #+big-endian 24) -+;; ELFv2 uses a 7-instruction inline jump (28 bytes); the ELFv1 ABI uses -+;; a 3-word function descriptor (24 bytes). -+(defconstant alien-linkage-table-entry-size #-ppc64-elfv1 28 #+ppc64-elfv1 24) - - - (defenum (:start 8) diff --git a/lang/sbcl/files/patch-src_runtime_ppc-arch.c b/lang/sbcl/files/patch-src_runtime_ppc-arch.c deleted file mode 100644 index 039a0841fb11..000000000000 --- a/lang/sbcl/files/patch-src_runtime_ppc-arch.c +++ /dev/null @@ -1,22 +0,0 @@ ---- src/runtime/ppc-arch.c.orig -+++ src/runtime/ppc-arch.c -@@ -616,7 +616,9 @@ - // but trick the compiler into thinking it isn't, so that it does not - // indirect through a descriptor, but instead we get its logical address. - if (target_addr != &call_into_c) { --#ifdef LISP_FEATURE_LITTLE_ENDIAN -+#ifndef LISP_FEATURE_PPC64_ELFV1 -+ /* ELFv2: no function descriptors, so the linkage entry is an inline -+ * jump that materializes the target address in r12 and branches to it. */ - int* inst_ptr; - unsigned long a0,a16,a32,a48; - unsigned int inst; -@@ -670,7 +672,7 @@ - os_flush_icache((os_vm_address_t) reloc_addr, (char*) inst_ptr - reloc_addr); - - #else -- // Could use either ABI, but we're assuming v1 -+ /* ELFv1: function pointers are descriptors, as detailed below. */ - /* In the 64-bit v1 ABI, function pointers are alway passed around - * as "function descriptors", not directly the jump target address. - * A descriptor is 3 words: diff --git a/lang/sbcl/files/patch-src_runtime_ppc64-assem.S b/lang/sbcl/files/patch-src_runtime_ppc64-assem.S deleted file mode 100644 index fd5798afa5ac..000000000000 --- a/lang/sbcl/files/patch-src_runtime_ppc64-assem.S +++ /dev/null @@ -1,21 +0,0 @@ ---- src/runtime/ppc64-assem.S.orig -+++ src/runtime/ppc64-assem.S -@@ -259,7 +259,7 @@ - - /* "When a function is entered through its global entry point, - * register r12 contains the entry-point address." */ --#ifdef LISP_FEATURE_BIG_ENDIAN -+#ifdef LISP_FEATURE_PPC64_ELFV1 - mfctr 11 - ld reg_CFUNC, 0(11) - /* In the v1 64-bit ABI, a function pointer is a pointer to a -@@ -273,6 +273,9 @@ - // ld 11, 16(11) - mtctr reg_CFUNC - #else -+ /* ELFv2: the call target is the function's address itself; reg_CFUNC -+ * is r12, which the global entry point uses to set up its own TOC. -+ * No descriptor indirection. */ - mfctr reg_CFUNC - #endif - /* Into C we go. */