picolibc-helloworld_git.bb 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. require picolibc.inc
  2. # baremetal-image overrides
  3. BAREMETAL_BINNAME ?= "hello_picolibc_${MACHINE}"
  4. IMAGE_LINK_NAME ?= "baremetal-picolibc-image-${MACHINE}"
  5. IMAGE_NAME_SUFFIX ?= ""
  6. QB_DEFAULT_KERNEL ?= "${IMAGE_LINK_NAME}.elf"
  7. inherit baremetal-image
  8. COMPATIBLE_MACHINE = "qemuarm|qemuarm64|qemuriscv32|qemuriscv64"
  9. # Use semihosting to test via QEMU
  10. QB_OPT_APPEND:append = " -semihosting-config enable=on"
  11. # picolibc comes with a set of linker scripts, set the file
  12. # according to the architecture being built.
  13. PICOLIBC_LINKERSCRIPT:qemuarm64 = "aarch64.ld"
  14. PICOLIBC_LINKERSCRIPT:qemuarm = "arm.ld"
  15. PICOLIBC_LINKERSCRIPT:qemuriscv32 = "riscv.ld"
  16. PICOLIBC_LINKERSCRIPT:qemuriscv64 = "riscv.ld"
  17. # Simple compile function that manually exemplifies usage; as noted,
  18. # use a custom linker script, the GCC specs provided by picolibc
  19. # and semihost to be able to test via QEMU's monitor
  20. do_compile(){
  21. ${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
  22. ${OBJCOPY} -O binary ${BAREMETAL_BINNAME}.elf ${BAREMETAL_BINNAME}.bin
  23. }
  24. do_install(){
  25. install -d ${D}/${base_libdir}/firmware
  26. install -m 755 ${B}/${BAREMETAL_BINNAME}.elf ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf
  27. install -m 755 ${B}/${BAREMETAL_BINNAME}.bin ${D}/${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin
  28. }
  29. FILES:${PN} += " \
  30. ${base_libdir}/firmware/${BAREMETAL_BINNAME}.elf \
  31. ${base_libdir}/firmware/${BAREMETAL_BINNAME}.bin \
  32. "