From: Brian Callahan Subject: UNBREAK/UPDATE: lang/ldc 1.35.0 => 1.38.0, and de-bootstrap ldc To: OpenBSD Ports ML Date: Fri, 24 May 2024 04:11:49 +0000 Hi ports -- Attached is an update to the latest LDC. With this, I would also like to make the build process a lot easier. LDC does not need to be built with itself; it can be built with DMD or GDC as well. I would like to make LDC have a BDEP on DMD. Now that DMD has an LTS bootstrap it should be always have a package available. Also, Phobos, the D standard library, is always built and shipped as a static library, so DMD won't be an LDEP or RDEP, just a BDEP. This has the instant benefit of enabling LDC on i386, which I have tested alongside amd64 and does work. This also has the benefit of making LDC much easier to update. Should be as easy as cranking version number, updating patches, and updating plist. Other platforms may need a bootstrap or use GDC to build LDC, but I will tackle those on an as-needed basis. I tried making an LTS bootstrap of LDC but there are linker errors for multiple symbols of the same name. And I think this new strategy is good enough. OK? ~Brian Index: Makefile =================================================================== RCS file: /cvs/ports/lang/ldc/Makefile,v retrieving revision 1.13 diff -u -p -r1.13 Makefile --- Makefile 9 Mar 2024 15:18:28 -0000 1.13 +++ Makefile 24 May 2024 00:52:45 -0000 @@ -1,15 +1,14 @@ -BROKEN= needs new bootstrap +# A bootstrap may be needed for !amd64, !i386 archs. +# Can try GDC to bootstrap as well. +ONLY_FOR_ARCHS = amd64 i386 -# You must create a bootstrap for each supported arch. -# Can use GDC to create said bootstrap compiler. -ONLY_FOR_ARCHS = amd64 +# No BT CFI yet. +USE_NOBTCFI = Yes -V = 1.35.0 +V = 1.38.0 COMMENT = LLVM D Compiler DISTFILES = ldc-${V}-src.tar.gz -DISTFILES.boot= ldc-${V}-bootstrap.tar.gz PKGNAME = ldc-${V} -REVISION = 0 CATEGORIES = lang HOMEPAGE = https://wiki.dlang.org/LDC @@ -23,7 +22,6 @@ PERMIT_PACKAGE = Yes WANTLIB += ${COMPILER_LIBCXX} c execinfo m z SITES = https://github.com/ldc-developers/ldc/releases/download/v${V}/ -SITES.boot = https://github.com/ibara/ldc/releases/download/bootstrap-${V}/ # C++14 COMPILER = base-clang ports-gcc @@ -34,29 +32,18 @@ MODCLANG_COMPILER_LINKS = No MODCLANG_RUNDEP = No MODCLANG_VERSION = 16 +BUILD_DEPENDS = lang/dmd + # COMPILE_D_MODULES_SEPARATELY=ON lets ldc compile with sane memory limits. CONFIGURE_ARGS = -DCOMPILE_D_MODULES_SEPARATELY=ON \ -DLDC_DYNAMIC_COMPILE=OFF \ -DLDC_WITH_LLD=OFF \ -DLLVM_CONFIG="${LOCALBASE}/bin/llvm-config-${MODCLANG_VERSION}" -# Use a bootstrap compiler, similar to DMD. -CONFIGURE_ENV = DMD="${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}/ldmd2" \ - LD_LIBRARY_PATH="${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}" - -MAKE_ENV += LD_LIBRARY_PATH="${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}" +# Use DMD as the bootstrap compiler. +CONFIGURE_ENV = DMD="${LOCALBASE}/bin/dmd" WRKDIST = ${WRKDIR}/ldc-${V}-src - -# I put a vanilla ldc2.conf in the bootstrap tarball. -# This fixes it up for the specifics for each arch. -post-patch: - sed -i 's#/usr/local/include/d#${WRKDIR}/ldc-${V}-bootstrap/d#g' \ - ${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}/ldc2.conf - sed -i 's#"/usr/local/lib",#"/usr/local/lib","${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}",#g' \ - ${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}/ldc2.conf - chmod 644 ${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}/lib*.so* # XXX - cp /usr/lib/libc.so.98.* ${WRKDIR}/ldc-${V}-bootstrap/${MACHINE_ARCH}/ # XXX # Same trick as with flang: # Replace the shared LLVM.so library with the static libraries. Index: distinfo =================================================================== RCS file: /cvs/ports/lang/ldc/distinfo,v retrieving revision 1.6 diff -u -p -r1.6 distinfo --- distinfo 14 Dec 2023 15:31:31 -0000 1.6 +++ distinfo 24 May 2024 00:52:45 -0000 @@ -1,4 +1,2 @@ -SHA256 (ldc-1.35.0-bootstrap.tar.gz) = 8IbnqIzaBxRP2vOWAl3c3sTvyTVv9NxMuJD24CVF1i8= -SHA256 (ldc-1.35.0-src.tar.gz) = bilpk3BsdsCT5gkTmqCz+HBDVfoPN1b2dY141EIm36A= -SIZE (ldc-1.35.0-bootstrap.tar.gz) = 49813924 -SIZE (ldc-1.35.0-src.tar.gz) = 8241960 +SHA256 (ldc-1.38.0-src.tar.gz) = ymI47+Ai40zTB2dB+KBwxqN3GWNRxhlJpIpIyZN5844= +SIZE (ldc-1.38.0-src.tar.gz) = 8691096 Index: patches/patch-driver_cl_options_instrumentation_cpp =================================================================== RCS file: patches/patch-driver_cl_options_instrumentation_cpp diff -N patches/patch-driver_cl_options_instrumentation_cpp --- patches/patch-driver_cl_options_instrumentation_cpp 14 Aug 2023 22:35:35 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,15 +0,0 @@ -Default to -fcf-protection=branch -May need to be tweaked if ldc grows !amd64 packages... - -Index: driver/cl_options_instrumentation.cpp ---- driver/cl_options_instrumentation.cpp.orig -+++ driver/cl_options_instrumentation.cpp -@@ -95,7 +95,7 @@ cl::opt fCFProtection( - clEnumValN(CFProtectionType::Full, "", - "") // default to "full" if no argument specified - ), -- cl::init(CFProtectionType::None)); -+ cl::init(CFProtectionType::Branch)); - - void initializeInstrumentationOptionsFromCmdline(const llvm::Triple &triple) { - if (ASTPGOInstrGenFile.getNumOccurrences() > 0) { Index: patches/patch-driver_linker-gcc_cpp =================================================================== RCS file: /cvs/ports/lang/ldc/patches/patch-driver_linker-gcc_cpp,v retrieving revision 1.4 diff -u -p -r1.4 patch-driver_linker-gcc_cpp --- patches/patch-driver_linker-gcc_cpp 8 Dec 2023 05:14:12 -0000 1.4 +++ patches/patch-driver_linker-gcc_cpp 24 May 2024 00:52:45 -0000 @@ -4,7 +4,7 @@ Need -lexecinfo for Backtrace symbols. Index: driver/linker-gcc.cpp --- driver/linker-gcc.cpp.orig +++ driver/linker-gcc.cpp -@@ -424,7 +424,6 @@ void ArgsBuilder::addCppStdlibLinkFlags(const llvm::Tr +@@ -436,7 +436,6 @@ void ArgsBuilder::addCppStdlibLinkFlags(const llvm::Tr break; case llvm::Triple::Solaris: case llvm::Triple::NetBSD: @@ -12,7 +12,7 @@ Index: driver/linker-gcc.cpp case llvm::Triple::DragonFly: args.push_back("-lstdc++"); break; -@@ -434,6 +433,7 @@ void ArgsBuilder::addCppStdlibLinkFlags(const llvm::Tr +@@ -446,6 +445,7 @@ void ArgsBuilder::addCppStdlibLinkFlags(const llvm::Tr case llvm::Triple::WatchOS: case llvm::Triple::TvOS: case llvm::Triple::FreeBSD: @@ -20,7 +20,20 @@ Index: driver/linker-gcc.cpp args.push_back("-lc++"); break; default: -@@ -675,11 +675,14 @@ void ArgsBuilder::addDefaultPlatformLibs() { +@@ -542,6 +542,12 @@ void ArgsBuilder::build(llvm::StringRef outputPath, + args.push_back("-static"); + } + ++ // No BT CFI ++ if (triple.getOS() == llvm::Triple::OpenBSD) { ++ args.push_back("-Wl,--no-execute-only"); ++ args.push_back("-Wl,-z,nobtcfi"); ++ } ++ + args.push_back("-o"); + args.push_back(std::string(outputPath)); + +@@ -687,11 +693,14 @@ void ArgsBuilder::addDefaultPlatformLibs() { args.push_back("-lrt"); args.push_back("-ldl"); // fallthrough Index: patches/patch-driver_targetmachine_cpp =================================================================== RCS file: /cvs/ports/lang/ldc/patches/patch-driver_targetmachine_cpp,v retrieving revision 1.5 diff -u -p -r1.5 patch-driver_targetmachine_cpp --- patches/patch-driver_targetmachine_cpp 8 Dec 2023 05:14:12 -0000 1.5 +++ patches/patch-driver_targetmachine_cpp 24 May 2024 00:52:45 -0000 @@ -3,9 +3,9 @@ Taken from ports LLVM. Index: driver/targetmachine.cpp --- driver/targetmachine.cpp.orig +++ driver/targetmachine.cpp -@@ -540,6 +540,8 @@ createTargetMachine(const std::string targetTriple, co - // these OSes. - // On Android, PIC is default as well. +@@ -579,6 +579,8 @@ createTargetMachine(const std::string targetTriple, co + // We default to PIC code to avoid linking issues on FreeBSD, especially + // on aarch64. relocModel = llvm::Reloc::PIC_; + } else if (triple.isOSOpenBSD()) { + relocModel = llvm::Reloc::PIC_; Index: patches/patch-gen_ctfloat_cpp =================================================================== RCS file: patches/patch-gen_ctfloat_cpp diff -N patches/patch-gen_ctfloat_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-gen_ctfloat_cpp 24 May 2024 00:52:45 -0000 @@ -0,0 +1,14 @@ +Mismatched parameter, only matters on 32-bit. + +Index: gen/ctfloat.cpp +--- gen/ctfloat.cpp.orig ++++ gen/ctfloat.cpp +@@ -125,7 +125,7 @@ bool CTFloat::isFloat64LiteralOutOfRange(const char *l + + //////////////////////////////////////////////////////////////////////////////// + +-int CTFloat::sprint(char *str, size_t str_buf_length, char fmt, real_t x) { ++int CTFloat::sprint(char *str, d_size_t str_buf_length, char fmt, real_t x) { + assert(fmt == 'g' || fmt == 'a' || fmt == 'A'); + const bool uppercase = fmt == 'A'; + Index: patches/patch-runtime_CMakeLists_txt =================================================================== RCS file: /cvs/ports/lang/ldc/patches/patch-runtime_CMakeLists_txt,v retrieving revision 1.5 diff -u -p -r1.5 patch-runtime_CMakeLists_txt --- patches/patch-runtime_CMakeLists_txt 8 Dec 2023 05:14:12 -0000 1.5 +++ patches/patch-runtime_CMakeLists_txt 24 May 2024 00:52:45 -0000 @@ -13,7 +13,7 @@ Index: runtime/CMakeLists.txt set(D_EXTRA_FLAGS "" CACHE STRING "Runtime extra D compiler flags, separated by ';'") set(D_FLAGS_DEBUG -g;-link-defaultlib-debug;-d-debug CACHE STRING "Runtime D compiler flags (debug libraries), separated by ';'") set(D_FLAGS_RELEASE -O3;-release;-femit-local-var-lifetime CACHE STRING "Runtime D compiler flags (release libraries), separated by ';'") -@@ -587,7 +587,7 @@ function(set_common_library_properties target name out +@@ -588,7 +588,7 @@ function(set_common_library_properties target name out # linker default on Ubuntu 16.10 and above. As we might be building on an # older system (e.g. binary packages), we need to make sure the C parts are # built as PIC as well. Index: patches/patch-runtime_druntime_src_rt_sections_elf_shared_d =================================================================== RCS file: /cvs/ports/lang/ldc/patches/patch-runtime_druntime_src_rt_sections_elf_shared_d,v retrieving revision 1.3 diff -u -p -r1.3 patch-runtime_druntime_src_rt_sections_elf_shared_d --- patches/patch-runtime_druntime_src_rt_sections_elf_shared_d 12 Feb 2023 22:57:55 -0000 1.3 +++ patches/patch-runtime_druntime_src_rt_sections_elf_shared_d 24 May 2024 00:52:45 -0000 @@ -7,9 +7,9 @@ Index: runtime/druntime/src/rt/sections_ else version (NetBSD) enum SharedELF = true; +else version (OpenBSD) enum SharedELF = true; else version (DragonFlyBSD) enum SharedELF = true; + else version (CRuntime_Bionic) enum SharedELF = true; else version (CRuntime_UClibc) enum SharedELF = true; - else enum SharedELF = false; -@@ -78,6 +79,12 @@ else version (NetBSD) +@@ -79,6 +80,12 @@ else version (NetBSD) import core.sys.netbsd.sys.elf; import core.sys.netbsd.sys.link_elf; } @@ -22,7 +22,7 @@ Index: runtime/druntime/src/rt/sections_ else version (DragonFlyBSD) { import core.sys.dragonflybsd.dlfcn; -@@ -217,6 +224,7 @@ __gshared bool _isRuntimeInitialized; +@@ -219,6 +226,7 @@ __gshared bool _isRuntimeInitialized; version (FreeBSD) private __gshared void* dummy_ref; version (DragonFlyBSD) private __gshared void* dummy_ref; version (NetBSD) private __gshared void* dummy_ref; @@ -30,7 +30,7 @@ Index: runtime/druntime/src/rt/sections_ /**** * Gets called on program startup just before GC is initialized. -@@ -228,6 +236,7 @@ void initSections() nothrow @nogc +@@ -230,6 +238,7 @@ void initSections() nothrow @nogc version (FreeBSD) dummy_ref = &_d_dso_registry; version (DragonFlyBSD) dummy_ref = &_d_dso_registry; version (NetBSD) dummy_ref = &_d_dso_registry; @@ -38,7 +38,7 @@ Index: runtime/druntime/src/rt/sections_ } -@@ -402,6 +411,7 @@ else (private) +@@ -404,6 +413,7 @@ else (private) version (FreeBSD) deprecated extern (C) __gshared void* _Dmodule_ref; version (DragonFlyBSD) deprecated extern (C) __gshared void* _Dmodule_ref; version (NetBSD) deprecated extern (C) __gshared void* _Dmodule_ref; @@ -46,7 +46,7 @@ Index: runtime/druntime/src/rt/sections_ version (Shared) { -@@ -938,6 +948,8 @@ version (Shared) +@@ -940,6 +950,8 @@ version (Shared) enum relocate = true; else version (NetBSD) enum relocate = true; @@ -55,7 +55,7 @@ Index: runtime/druntime/src/rt/sections_ else version (DragonFlyBSD) enum relocate = true; else -@@ -1153,18 +1165,18 @@ version (LDC) +@@ -1177,12 +1189,12 @@ version (LDC) version (PPC) { extern(C) void* __tls_get_addr_opt(tls_index* ti) nothrow @nogc; @@ -68,6 +68,11 @@ Index: runtime/druntime/src/rt/sections_ - alias __tls_get_addr = __tls_get_addr_opt; + alias __emutls_get_address = __tls_get_addr_opt; } + else version (Android_X86) // extra underscore + { +@@ -1190,10 +1202,10 @@ version (LDC) + alias __tls_get_addr = ___tls_get_addr; + } else - extern(C) void* __tls_get_addr(tls_index* ti) nothrow @nogc; + extern(C) void* __emutls_get_address(tls_index* ti) nothrow @nogc; @@ -78,7 +83,16 @@ Index: runtime/druntime/src/rt/sections_ /* The dynamic thread vector (DTV) pointers may point 0x8000 past the start of * each TLS block. This is at least true for PowerPC and Mips platforms. -@@ -1251,7 +1263,7 @@ void[] getTLSRange(size_t mod, size_t sz, size_t align +@@ -1261,7 +1273,7 @@ void[] getTLSRange(size_t mod, size_t sz, size_t align + if (mod != 0) + { + auto ti = tls_index(mod, 0); +- reference = __tls_get_addr(&ti); ++ reference = __emutls_get_address(&ti); + } + + if (reference != start) +@@ -1282,7 +1294,7 @@ void[] getTLSRange(size_t mod, size_t sz, size_t align // base offset auto ti = tls_index(mod, 0); Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/lang/ldc/pkg/PLIST,v retrieving revision 1.5 diff -u -p -r1.5 PLIST --- pkg/PLIST 8 Dec 2023 05:14:12 -0000 1.5 +++ pkg/PLIST 24 May 2024 00:52:45 -0000 @@ -1,6 +1,7 @@ @bin bin/ldc-build-plugin @bin bin/ldc-build-runtime @bin bin/ldc-profdata +@bin bin/ldc-profgen @bin bin/ldc-prune-cache @bin bin/ldc2 @bin bin/ldmd2 @@ -73,6 +74,7 @@ include/d/core/internal/gc/proxy.d include/d/core/internal/hash.d include/d/core/internal/lifetime.d include/d/core/internal/moving.d +include/d/core/internal/newaa.d include/d/core/internal/parseoptions.d include/d/core/internal/postblit.d include/d/core/internal/qsort.d @@ -87,6 +89,7 @@ include/d/core/internal/util/math.d include/d/core/internal/vararg/ include/d/core/internal/vararg/aarch64.d include/d/core/internal/vararg/sysv_x64.d +include/d/core/interpolation.d include/d/core/lifetime.d include/d/core/math.d include/d/core/memory.d @@ -106,6 +109,7 @@ include/d/core/stdc/locale.d include/d/core/stdc/math.d include/d/core/stdc/signal.d include/d/core/stdc/stdarg.d +include/d/core/stdc/stdatomic.d include/d/core/stdc/stddef.d include/d/core/stdc/stdint.d include/d/core/stdc/stdio.d @@ -203,6 +207,10 @@ include/d/core/sys/freebsd/config.d include/d/core/sys/freebsd/dlfcn.d include/d/core/sys/freebsd/err.d include/d/core/sys/freebsd/execinfo.d +include/d/core/sys/freebsd/ifaddrs.d +include/d/core/sys/freebsd/net/ +include/d/core/sys/freebsd/net/if_.d +include/d/core/sys/freebsd/net/if_dl.d include/d/core/sys/freebsd/netinet/ include/d/core/sys/freebsd/netinet/in_.d include/d/core/sys/freebsd/pthread_np.d @@ -220,7 +228,9 @@ include/d/core/sys/freebsd/sys/event.d include/d/core/sys/freebsd/sys/link_elf.d include/d/core/sys/freebsd/sys/mman.d include/d/core/sys/freebsd/sys/mount.d +include/d/core/sys/freebsd/sys/socket.d include/d/core/sys/freebsd/sys/sysctl.d +include/d/core/sys/freebsd/sys/types.d include/d/core/sys/freebsd/time.d include/d/core/sys/freebsd/unistd.d include/d/core/sys/linux/ @@ -238,6 +248,9 @@ include/d/core/sys/linux/input.d include/d/core/sys/linux/input_event_codes.d include/d/core/sys/linux/io_uring.d include/d/core/sys/linux/link.d +include/d/core/sys/linux/linux/ +include/d/core/sys/linux/linux/if_arp.d +include/d/core/sys/linux/linux/if_packet.d include/d/core/sys/linux/netinet/ include/d/core/sys/linux/netinet/in_.d include/d/core/sys/linux/netinet/tcp.d