Device: nRF51822_xxac; the Nordic-supplied NUS application worked after I figured out the softdevice and application loading sequence.
Development platform: Mac OS Tahoe 26.3; Toolchain: Arm GNU Toolchain 14.3.1, downloaded from https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
I'm in the "blink an LED" / see if it works stage of changing the UART NUS application, and haven't actually changed anything in the ble_peripheral/ble_app_uart application, except for DEVICE_NAME: I'm just testing that my build tools can correctly produce an output. It's sort-of working, but the "printf( "UART start!" );" isn't working. The binary builds, and the "make flash_softdevice && make flash" seem to work; I can see and connect to the updated DEVICE_NAME in the BLE scan tool, but the program serial output via printf() doesn't print. Here's the build output:
$ make && make flash_softdevice && make flash
Compiling file: main.c
Linking target: _build/nrf51822_xxac.out
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o): in function `_close_r':
closer.c:(.text._close_r+0xc): warning: _close is not implemented and will always fail
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o): note: the message above does not take linker garbage collection into account
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o): in function `_lseek_r':
lseekr.c:(.text._lseek_r+0x10): warning: _lseek is not implemented and will always fail
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o): note: the message above does not take linker garbage collection into account
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o): in function `_read_r':
readr.c:(.text._read_r+0x10): warning: _read is not implemented and will always fail
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o): note: the message above does not take linker garbage collection into account
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o): in function `_write_r':
writer.c:(.text._write_r+0x10): warning: _write is not implemented and will always fail
/Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld: /Applications/ArmGNUToolchain/14.3.rel1/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o): note: the message above does not take linker garbage collection into account
text data bss dec hex filename
20584 136 2208 22928 5990 _build/nrf51822_xxac.out
Preparing: _build/nrf51822_xxac.hex
Preparing: _build/nrf51822_xxac.bin
Flashing: s130_nrf51_2.0.1_softdevice.hex
nrfjprog --jdll /Applications/SEGGER/JLink_V890/libjlinkarm.8.90.0.dylib --program /Users/aaronm/Downloads/NordicSemi-nRF51822/nRF5_SDK_12.3.0_d7731ad/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex -f nrf51 --sectorerase
[ #################### ] 4.232s | Erase file - Done erasing
[ #################### ] 1.469s | Program file - Done programming
WARNING: A programming operation has been performed without --verify.
WARNING: Programming can fail without error.
nrfjprog --jdll /Applications/SEGGER/JLink_V890/libjlinkarm.8.90.0.dylib --reset -f nrf51
Applying system reset.
Run.
Flashing: _build/nrf51822_xxac.hex
nrfjprog --jdll /Applications/SEGGER/JLink_V890/libjlinkarm.8.90.0.dylib --program _build/nrf51822_xxac.hex -f nrf51 --sectorerase
[ #################### ] 0.807s | Erase file - Done erasing
[ #################### ] 0.283s | Program file - Done programming
WARNING: A programming operation has been performed without --verify.
WARNING: Programming can fail without error.
nrfjprog --jdll /Applications/SEGGER/JLink_V890/libjlinkarm.8.90.0.dylib --reset -f nrf51
Applying system reset.
Run.
I disabled #define RETARGET_ENABLED 0 to get it to compile; it wouldn't complete the linking phase at all with RETARGET set to 1. I suspect the "LDFLAGS += --specs=nano.specs -lc -lnosys" has something to do with the missing printf() and related libraries, but I'm not wizard enough to determine how. Hopefully, this is a trivial issue for the more experienced among us.
Thanks!