diff --git a/lang/sbcl/Makefile b/lang/sbcl/Makefile index 088ca0bdb3dc..e99bcf039087 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.5.7 DISTVERSIONSUFFIX= -source PORTEPOCH= 1 CATEGORIES= lang lisp MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${DISTVERSION} \ - SF/${PORTNAME}/${PORTNAME}/${BOOTVERSION}:binaries + 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 +ONLY_FOR_ARCHS= amd64 i386 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 GARBAGE_COLLECTOR DOCS 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" -BOOTVERSION= 1.2.7 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= ${BOOTVERSION}-x86-64-freebsd ${BOOTVERSION}-x86-freebsd \ - ${BOOTVERSION}-x86-64-dragonfly +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 .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 d5154107b095..39a0aa7b6726 100644 --- a/lang/sbcl/distinfo +++ b/lang/sbcl/distinfo @@ -1,9 +1,11 @@ -TIMESTAMP = 1753698145 +TIMESTAMP = 1767618350 SHA256 (sbcl-2.5.7-source.tar.bz2) = c4fafeb795699d5bcff9085091acc762dcf5e55f85235625f3d7aef12c89d1d3 SIZE (sbcl-2.5.7-source.tar.bz2) = 8276880 +SHA256 (sbcl-2.5.7-powerpc64le-freebsd-binary.tar.bz2) = 3dc17885caa57fc10d972729dca6a5a1414a3043d3af406e8907659ac8ea856a +SIZE (sbcl-2.5.7-powerpc64le-freebsd-binary.tar.bz2) = 9973076 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 diff --git a/lang/sbcl/files/patch-make-config.sh b/lang/sbcl/files/patch-make-config.sh new file mode 100644 index 000000000000..d852da151217 --- /dev/null +++ b/lang/sbcl/files/patch-make-config.sh @@ -0,0 +1,28 @@ +--- make-config.sh.orig 2025-07-26 14:30:40 UTC ++++ make-config.sh +@@ -398,7 +398,7 @@ case $uname_arch in + amd64) guessed_sbcl_arch=x86-64 ;; + sparc*) guessed_sbcl_arch=sparc ;; + sun*) guessed_sbcl_arch=sparc ;; +- *ppc) guessed_sbcl_arch=ppc ;; ++ *powerpc|*ppc) guessed_sbcl_arch=ppc ;; + ppc64) guessed_sbcl_arch=ppc ;; + ppc64le) guessed_sbcl_arch=ppc64 ;; # is ok because there was never 32-bit LE + Power*Macintosh) guessed_sbcl_arch=ppc ;; +@@ -431,6 +431,16 @@ if [ "$sbcl_os" = "netbsd" ] && [ `uname -p` = "aarch6 + # Under NetBSD, uname -m returns "evbarm" even if CPU is arm64. + if [ "$sbcl_os" = "netbsd" ] && [ `uname -p` = "aarch64" ]; then + guessed_sbcl_arch=arm64 ++fi ++ ++# Under FreeBSD, uname -m returns "powerpc" even if CPU is powerpc64. ++if [ "$sbcl_os" = "freebsd" ] && [ `uname -p` = "powerpc64" ]; then ++ guessed_sbcl_arch=ppc ++fi ++ ++# Under FreeBSD, uname -m returns "powerpc" even if CPU is powerpc64le. ++if [ "$sbcl_os" = "freebsd" ] && [ `uname -p` = "powerpc64le" ]; then ++ guessed_sbcl_arch=ppc64 + fi + + echo //setting up CPU-architecture-dependent information diff --git a/lang/sbcl/files/patch-src_runtime_Config.ppc-freebsd b/lang/sbcl/files/patch-src_runtime_Config.ppc-freebsd new file mode 100644 index 000000000000..4c43b9c2633c --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_Config.ppc-freebsd @@ -0,0 +1,42 @@ +--- src/runtime/Config.ppc-freebsd.orig 2026-01-05 13:09:33 UTC ++++ src/runtime/Config.ppc-freebsd +@@ -0,0 +1,39 @@ ++# -*- makefile -*- for the C-level run-time support for SBCL ++ ++# This software is part of the SBCL system. See the README file for ++# more information. ++# ++# This software is derived from the CMU CL system, which was ++# written at Carnegie Mellon University and released into the ++# public domain. The software is in the public domain and is ++# provided with absolutely no warranty. See the COPYING and CREDITS ++# files for more information. ++ ++CFLAGS += -m32 -std=gnu99 ++LINKFLAGS += -m32 -Wl,--export-dynamic ++ ++ASSEM_SRC = ppc-assem.S ++ARCH_SRC = ppc-arch.c ++ ++OS_SRC = bsd-os.c ppc-bsd-os.c ++OS_LIBS = -ldl -Wl,-no-as-needed -lutil ++ ++ifdef LISP_FEATURE_GENCGC ++ GC_SRC = fullcgc.c gencgc.c traceroot.c ++endif ++ ++# Until sbcl-0.6.7.3, we used "LINKFLAGS+=-static" here, which ++# worked fine for most things, but LOAD-FOREIGN & friends require ++# dlopen() etc., which in turn depend on dynamic linking of the ++# runtime. ++OS_LIBS += -lutil -L/usr/local/lib ++CPPFLAGS += -isystem/usr/local/include ++ ++ifdef LISP_FEATURE_SB_THREAD ++ OS_LIBS += -lpthread ++endif ++ifdef LISP_FEATURE_SB_CORE_COMPRESSION ++ OS_LIBS += -lzstd ++endif ++ ++SBCL_PAXCTL=elfctl -e +noaslr diff --git a/lang/sbcl/files/patch-src_runtime_Config.ppc64-freebsd b/lang/sbcl/files/patch-src_runtime_Config.ppc64-freebsd new file mode 100644 index 000000000000..3873e419c30b --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_Config.ppc64-freebsd @@ -0,0 +1,42 @@ +--- src/runtime/Config.ppc64-freebsd.orig 2026-01-05 13:09:33 UTC ++++ src/runtime/Config.ppc64-freebsd +@@ -0,0 +1,39 @@ ++# -*- makefile -*- for the C-level run-time support for SBCL ++ ++# This software is part of the SBCL system. See the README file for ++# more information. ++# ++# This software is derived from the CMU CL system, which was ++# written at Carnegie Mellon University and released into the ++# public domain. The software is in the public domain and is ++# provided with absolutely no warranty. See the COPYING and CREDITS ++# files for more information. ++ ++CFLAGS += -m64 -std=gnu99 ++LINKFLAGS += -m64 -Wl,--export-dynamic ++ ++ASSEM_SRC = ppc64-assem.S ++ARCH_SRC = ppc-arch.c ++ ++OS_SRC = bsd-os.c ppc-bsd-os.c ++OS_LIBS = -ldl -Wl,-no-as-needed -lutil ++ ++ifdef LISP_FEATURE_GENCGC ++ GC_SRC = fullcgc.c gencgc.c traceroot.c ++endif ++ ++# Until sbcl-0.6.7.3, we used "LINKFLAGS+=-static" here, which ++# worked fine for most things, but LOAD-FOREIGN & friends require ++# dlopen() etc., which in turn depend on dynamic linking of the ++# runtime. ++OS_LIBS += -lutil -L/usr/local/lib ++CPPFLAGS += -isystem/usr/local/include ++ ++ifdef LISP_FEATURE_SB_THREAD ++ OS_LIBS += -lpthread ++endif ++ifdef LISP_FEATURE_SB_CORE_COMPRESSION ++ OS_LIBS += -lzstd ++endif ++ ++SBCL_PAXCTL=elfctl -e +noaslr diff --git a/lang/sbcl/files/patch-src_runtime_ppc-arch.c b/lang/sbcl/files/patch-src_runtime_ppc-arch.c new file mode 100644 index 000000000000..3a961cc79308 --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_ppc-arch.c @@ -0,0 +1,11 @@ +--- src/runtime/ppc-arch.c.orig 2025-07-26 14:30:41 UTC ++++ src/runtime/ppc-arch.c +@@ -60,7 +60,7 @@ arch_get_bad_addr(int sig, siginfo_t *code, os_context + { + os_vm_address_t addr; + +-#if defined(LISP_FEATURE_NETBSD) || defined(LISP_FEATURE_OPENBSD) ++#if defined(LISP_FEATURE_NETBSD) || defined(LISP_FEATURE_OPENBSD) || defined(LISP_FEATURE_FREEBSD) + addr = (os_vm_address_t) (code->si_addr); + #else + addr = (os_vm_address_t) (*os_context_register_addr(context,PT_DAR)); diff --git a/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.c b/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.c new file mode 100644 index 000000000000..f6c380dfce73 --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.c @@ -0,0 +1,63 @@ +--- src/runtime/ppc-bsd-os.c.orig 2025-07-26 14:30:41 UTC ++++ src/runtime/ppc-bsd-os.c +@@ -7,33 +7,39 @@ + #include "thread.h" + + +-int * ++os_context_register_t * + os_context_register_addr(os_context_t *context, int offset) + { + #if defined(LISP_FEATURE_NETBSD) + return &context->uc_mcontext.__gregs[offset]; + #elif defined(LISP_FEATURE_OPENBSD) + return &context->sc_frame.fixreg[offset]; ++#elif defined(LISP_FEATURE_FREEBSD) ++ return &context->uc_mcontext.mc_frame[offset]; + #endif + } + + #if defined(ARCH_HAS_STACK_POINTER) /* It's not defined on PPC. */ +-int * ++os_context_register_t * + os_context_sp_addr(os_context_t *context) + { + #if defined(LISP_FEATURE_NETBSD) + return &(_UC_MACHINE_SP(context)); ++#elif defined(LISP_FEATURE_FREEBSD) ++ return &context->uc_mcontext.mc_frame[1]; + #endif + } + #endif + +-int * ++os_context_register_t * + os_context_lr_addr(os_context_t *context) + { + #if defined(LISP_FEATURE_NETBSD) + return &context->uc_mcontext.__gregs[_REG_LR]; + #elif defined(LISP_FEATURE_OPENBSD) + return &context->sc_frame.lr; ++#elif defined(LISP_FEATURE_FREEBSD) ++ return &context->uc_mcontext.mc_lr; + #endif + } + +@@ -44,6 +50,8 @@ os_context_ctr_addr(os_context_t *context) + return &context->uc_mcontext.__gregs[_REG_CTR]; + #elif defined(LISP_FEATURE_OPENBSD) + return &context->sc_frame.ctr; ++#elif defined(LISP_FEATURE_FREEBSD) ++ return &context->uc_mcontext.mc_ctr; + #endif + } + +@@ -54,6 +62,8 @@ os_context_cr_addr(os_context_t *context) + return &context->uc_mcontext.__gregs[_REG_CR]; + #elif defined(LISP_FEATURE_OPENBSD) + return &context->sc_frame.cr; ++#elif defined(LISP_FEATURE_FREEBSD) ++ return &context->uc_mcontext.mc_cr; + #endif + } + diff --git a/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.h b/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.h new file mode 100644 index 000000000000..d25b85d31144 --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_ppc-bsd-os.h @@ -0,0 +1,22 @@ +--- src/runtime/ppc-bsd-os.h.orig 2025-07-26 14:30:41 UTC ++++ src/runtime/ppc-bsd-os.h +@@ -1,12 +1,19 @@ + #ifndef _PPC_BSD_OS_H + #define _PPC_BSD_OS_H + ++#ifdef __LP64__ ++typedef long os_context_register_t; ++#else + typedef int os_context_register_t; ++#endif ++typedef ucontext_t os_context_t; + + #ifdef LISP_FEATURE_NETBSD + # define OS_CONTEXT_PC(context) _UC_MACHINE_PC(context) + #elif defined LISP_FEATURE_OPENBSD + # define OS_CONTEXT_PC(context) context->sc_frame.srr0 ++#elif defined(LISP_FEATURE_FREEBSD) ++# define OS_CONTEXT_PC(context) context->uc_mcontext.mc_srr0 + #else + # error "Need a definition of OS_CONTEXT_PC" + #endif diff --git a/lang/sbcl/files/patch-src_runtime_ppc64-bsd-os.h b/lang/sbcl/files/patch-src_runtime_ppc64-bsd-os.h new file mode 100644 index 000000000000..d51bc8bbb919 --- /dev/null +++ b/lang/sbcl/files/patch-src_runtime_ppc64-bsd-os.h @@ -0,0 +1,4 @@ +--- src/runtime/ppc64-bsd-os.h.orig 2026-01-05 13:09:33 UTC ++++ src/runtime/ppc64-bsd-os.h +@@ -0,0 +1 @@ ++#include