12345678910111213141516171819202122232425262728293031323334353637383940 |
- require picolibc.inc
- # baremetal-image overrides
- BAREMETAL_BINNAME ?= "hello_picolibc_${MACHINE}"
- IMAGE_LINK_NAME ?= "baremetal-picolibc-image-${MACHINE}"
- IMAGE_NAME_SUFFIX ?= ""
- QB_DEFAULT_KERNEL ?= "${IMAGE_LINK_NAME}.elf"
- inherit baremetal-image
- COMPATIBLE_MACHINE = "qemuarm|qemuarm64|qemuriscv32|qemuriscv64"
- # Use semihosting to test via QEMU
- QB_OPT_APPEND:append = " -semihosting-config enable=on"
- # picolibc comes with a set of linker scripts, set the file
- # according to the architecture being built.
- PICOLIBC_LINKERSCRIPT:qemuarm64 = "aarch64.ld"
- PICOLIBC_LINKERSCRIPT:qemuarm = "arm.ld"
- PICOLIBC_LINKERSCRIPT:qemuriscv32 = "riscv.ld"
- PICOLIBC_LINKERSCRIPT:qemuriscv64 = "riscv.ld"
- # Simple compile function that manually exemplifies usage; as noted,
- # use a custom linker script, the GCC specs provided by picolibc
- # and semihost to be able to test via QEMU's monitor
- do_compile(){
- ${CC} ${CFLAGS} ${LDFLAGS} --verbose -T${S}/hello-world/${PICOLIBC_LINKERSCRIPT} -specs=picolibc.specs --oslib=semihost -o ${BAREMETAL_BINNAME}.elf ${S}/hello-world/hello-world.c
- ${OBJCOPY} -O binary ${BAREMETAL_BINNAME}.elf ${BAREMETAL_BINNAME}.bin
- }
- do_install(){
- install -d ${D}/${base_libdir}/firmware
- install -m 755 ${B}/${BAREMETAL_BINNAME}.elf ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf
- install -m 755 ${B}/${BAREMETAL_BINNAME}.bin ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin
- }
- FILES:${PN} += " \
- ${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf \
- ${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin \
- "
|