Ah, makes sense. I didn’t register that you were compiling from scratch!
See this part of the FPGA build Makefile:
https://github.com/sifive/freedom/blob/master/fpga/e300artydevkit/Makefile#L9
When we built the image that’s posted online, we used the FLASHED_PROGRAM
variable to include a binary version of demo_gpio
from the Freedom E SDK
This requires a binary format (slightly different than the actual ELF file that Freedom E SDK creates). You can generate it from the ELF with objcopy also installed as part of the SDK:
freedom-e-sdk/toolchain/bin/riscv32-unknown-elf-objcopy -O binary input.elf output.bin