ISA ?= rv64imafdc ABI ?= lp64d TARGET_BOARD := U74 BOARD_FLAGS := srcdir := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) srcdir := $(srcdir:/=) confdir := $(srcdir)/conf wrkdir := $(CURDIR)/work buildroot_srcdir := $(srcdir)/buildroot buildroot_initramfs_wrkdir := $(wrkdir)/buildroot_initramfs # TODO: make RISCV be able to be set to alternate toolchain path RISCV ?= $(buildroot_initramfs_wrkdir)/host RVPATH ?= $(RISCV)/bin:/usr/sbin:/sbin:$(PATH) target ?= riscv64-buildroot-linux-gnu CROSS_COMPILE ?= $(RISCV)/bin/$(target)- buildroot_initramfs_tar := $(buildroot_initramfs_wrkdir)/images/rootfs.tar buildroot_initramfs_config := $(confdir)/buildroot_initramfs_config buildroot_initramfs_sysroot_stamp := $(wrkdir)/.buildroot_initramfs_sysroot buildroot_initramfs_sysroot := $(wrkdir)/buildroot_initramfs_sysroot buildroot_rootfs_wrkdir := $(wrkdir)/buildroot_rootfs buildroot_rootfs_ext := $(buildroot_rootfs_wrkdir)/images/rootfs.ext4 buildroot_rootfs_config := $(confdir)/buildroot_rootfs_config linux_srcdir := $(srcdir)/linux linux_wrkdir := $(wrkdir)/linux linux_defconfig := $(confdir)/beaglev_defconfig_513 vmlinux := $(linux_wrkdir)/vmlinux vmlinux_stripped := $(linux_wrkdir)/vmlinux-stripped vmlinux_bin := $(wrkdir)/vmlinux.bin ifeq ($(TARGET_BOARD),U74) export TARGET_BOARD BOARD_FLAGS += -DTARGET_BOARD_U74 bbl_link_addr :=0x80700000 its_file=$(confdir)/u74_nvdla-uboot-fit-image.its else bbl_link_addr :=0x80000000 its_file=$(confdir)/nvdla-uboot-fit-image.its endif flash_image := $(wrkdir)/hifive-unleashed-a00-YYYY-MM-DD.gpt vfat_image := $(wrkdir)/hifive-unleashed-vfat.part #ext_image := $(wrkdir) # TODO initramfs := $(wrkdir)/initramfs.cpio.gz sbi_srcdir := $(srcdir)/opensbi sbi_wrkdir := $(wrkdir)/opensbi #sbi_bin := $(wrkdir)/opensbi/platform/starfive/vic7100/firmware/fw_payload.bin sbi_bin := $(wrkdir)/opensbi/platform/generic/firmware/fw_payload.bin fit := $(wrkdir)/image.fit fesvr_srcdir := $(srcdir)/riscv-fesvr fesvr_wrkdir := $(wrkdir)/riscv-fesvr libfesvr := $(fesvr_wrkdir)/prefix/lib/libfesvr.so spike_srcdir := $(srcdir)/riscv-isa-sim spike_wrkdir := $(wrkdir)/riscv-isa-sim spike := $(spike_wrkdir)/prefix/bin/spike qemu_srcdir := $(srcdir)/riscv-qemu qemu_wrkdir := $(wrkdir)/riscv-qemu qemu := $(qemu_wrkdir)/prefix/bin/qemu-system-riscv64 uboot_srcdir := $(srcdir)/HiFive_U-Boot uboot_wrkdir := $(wrkdir)/HiFive_U-Boot uboot_dtb_file := $(wrkdir)/HiFive_U-Boot/arch/riscv/dts/jh7100-beaglev-starlight.dtb uboot := $(uboot_wrkdir)/u-boot.bin uboot_config := HiFive-U540_regression_defconfig ifeq ($(TARGET_BOARD),U74) uboot_config := starfive_jh7100_starlight_smode_defconfig # uboot_config := starfive_vic7100_evb_smode_defconfig else uboot_config := HiFive-U540_nvdla_iofpga_defconfig endif uboot_defconfig := $(uboot_srcdir)/configs/$(uboot_config) rootfs := $(wrkdir)/rootfs.bin target_gcc ?= $(CROSS_COMPILE)gcc .PHONY: all nvdla-demo nvdla-demo: $(fit) $(vfat_image) @echo "To completely erase, reformat, and program a disk sdX, run:" @echo " make DISK=/dev/sdX format-nvdla-disk" @echo " ... you will need gdisk and e2fsprogs installed" @echo " Please note this will not currently format the SDcard ext4 partition" @echo " This can be done manually if needed" @echo all: $(fit) $(flash_image) @echo @echo "This image has been generated for an ISA of $(ISA) and an ABI of $(ABI)" @echo "Find the image in work/image.fit, which should be copied to an MSDOS boot partition 1" @echo @echo "To completely erase, reformat, and program a disk sdX, run:" @echo " make DISK=/dev/sdX format-boot-loader" @echo " ... you will need gdisk and e2fsprogs installed" @echo " Please note this will not currently format the SDcard ext4 partition" @echo " This can be done manually if needed" @echo # TODO: depracated for now #ifneq ($(RISCV),$(buildroot_initramfs_wrkdir)/host) #$(target_gcc): # $(error The RISCV environment variable was set, but is not pointing at a toolchain install tree) #else #$(target_gcc): $(buildroot_initramfs_tar) #endif $(buildroot_initramfs_wrkdir)/.config: $(buildroot_srcdir) rm -rf $(dir $@) mkdir -p $(dir $@) cp $(buildroot_initramfs_config) $@ $(MAKE) -C $< RISCV=$(RISCV) O=$(buildroot_initramfs_wrkdir) olddefconfig # buildroot_initramfs provides gcc $(buildroot_initramfs_tar): $(buildroot_srcdir) $(buildroot_initramfs_wrkdir)/.config $(buildroot_initramfs_config) $(MAKE) -C $< RISCV=$(RISCV) O=$(buildroot_initramfs_wrkdir) .PHONY: buildroot_initramfs-menuconfig buildroot_initramfs-menuconfig: $(buildroot_initramfs_wrkdir)/.config $(buildroot_srcdir) $(MAKE) -C $(dir $<) O=$(buildroot_initramfs_wrkdir) menuconfig $(MAKE) -C $(dir $<) O=$(buildroot_initramfs_wrkdir) savedefconfig cp $(dir $<)defconfig conf/buildroot_initramfs_config # use buildroot_initramfs toolchain # TODO: fix path and conf/buildroot_rootfs_config $(buildroot_rootfs_wrkdir)/.config: $(buildroot_srcdir) $(buildroot_initramfs_tar) # rm -rf $(dir $@) mkdir -p $(dir $@) cp $(buildroot_rootfs_config) $@ $(MAKE) -C $< RISCV=$(RISCV) PATH=$(RVPATH) O=$(buildroot_rootfs_wrkdir) olddefconfig $(buildroot_rootfs_ext): $(buildroot_srcdir) $(buildroot_rootfs_wrkdir)/.config $(target_gcc) $(buildroot_rootfs_config) $(MAKE) -C $< RISCV=$(RISCV) PATH=$(RVPATH) O=$(buildroot_rootfs_wrkdir) .PHONY: buildroot_rootfs buildroot_rootfs: $(buildroot_rootfs_ext) cp $< $@ .PHONY: buildroot_rootfs-menuconfig buildroot_rootfs-menuconfig: $(buildroot_rootfs_wrkdir)/.config $(buildroot_srcdir) $(MAKE) -C $(dir $<) O=$(buildroot_rootfs_wrkdir) menuconfig $(MAKE) -C $(dir $<) O=$(buildroot_rootfs_wrkdir) savedefconfig cp $(dir $<)defconfig conf/buildroot_rootfs_config $(buildroot_initramfs_sysroot_stamp): $(buildroot_initramfs_tar) -rm -rf $(buildroot_initramfs_sysroot) mkdir -p $(buildroot_initramfs_sysroot) tar -xpf $< -C $(buildroot_initramfs_sysroot) --exclude ./dev --exclude ./usr/share/locale touch $@ $(linux_wrkdir)/.config: $(linux_defconfig) $(linux_srcdir) mkdir -p $(dir $@) cp -p $< $@ $(MAKE) -C $(linux_srcdir) O=$(linux_wrkdir) ARCH=riscv CROSS_COMPILE=$(CROSS_COMPILE) olddefconfig ifeq (,$(filter rv%c,$(ISA))) sed 's/^.*CONFIG_RISCV_ISA_C.*$$/CONFIG_RISCV_ISA_C=n/' -i $@ $(MAKE) -C $(linux_srcdir) O=$(linux_wrkdir) ARCH=riscv CROSS_COMPILE=$(CROSS_COMPILE) olddefconfig endif ifeq ($(ISA),$(filter rv32%,$(ISA))) sed 's/^.*CONFIG_ARCH_RV32I.*$$/CONFIG_ARCH_RV32I=y/' -i $@ sed 's/^.*CONFIG_ARCH_RV64I.*$$/CONFIG_ARCH_RV64I=n/' -i $@ $(MAKE) -C $(linux_srcdir) O=$(linux_wrkdir) ARCH=riscv CROSS_COMPILE=$(CROSS_COMPILE) olddefconfig endif $(uboot_wrkdir)/.config: $(uboot_defconfig) mkdir -p $(dir $@) cp -p $< $@ $(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(target_gcc) $(buildroot_initramfs_sysroot) $(MAKE) -C $< O=$(linux_wrkdir) \ ARCH=riscv \ CROSS_COMPILE=$(CROSS_COMPILE) \ PATH=$(RVPATH) \ vmlinux \ all \ modules $(MAKE) -C $< O=$(linux_wrkdir) \ ARCH=riscv \ CROSS_COMPILE=$(CROSS_COMPILE) \ PATH=$(RVPATH) \ INSTALL_MOD_PATH=$(buildroot_initramfs_sysroot) \ modules_install # vpu building depend on the $(vmlinux), $(vmlinux) depend on $(buildroot_initramfs_sysroot) # so vpubuild should be built after $(vmlinux) vpubuild: $(vmlinux) wave511-build omxil-build gstomx-build wave511-build: $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) wave511-dirclean $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) wave511-rebuild wave521-build: $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) wave521-dirclean $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) wave521-rebuild omxil-build: $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) sf-omx-il-dirclean $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) sf-omx-il-rebuild gstomx-build: $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) sf-gst-omx-dirclean $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) sf-gst-omx-rebuild vpubuild_rootfs: $(vmlinux) wave511-build-rootfs omxil-build-rootfs gstomx-build-rootfs wave511-build-rootfs: $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) wave511-dirclean $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) wave511-rebuild wave521-build-rootfs: $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) wave521-dirclean $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) wave521-rebuild omxil-build-rootfs: $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) sf-omx-il-dirclean $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) sf-omx-il-rebuild gstomx-build-rootfs: $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) sf-gst-omx-dirclean $(MAKE) -C $(buildroot_rootfs_wrkdir) O=$(buildroot_rootfs_wrkdir) sf-gst-omx-rebuild .PHONY: initrd initrd: $(initramfs) $(initramfs).d: $(buildroot_initramfs_sysroot) $(buildroot_initramfs_tar) $(linux_srcdir)/usr/gen_initramfs_list.sh -l $(confdir)/initramfs.txt $(buildroot_initramfs_sysroot) > $@ $(initramfs): $(buildroot_initramfs_sysroot) $(vmlinux) $(buildroot_initramfs_tar) cd $(linux_wrkdir) && \ $(linux_srcdir)/usr/gen_initramfs_list.sh \ -o $@ -u $(shell id -u) -g $(shell id -g) \ $(confdir)/initramfs.txt \ $(buildroot_initramfs_sysroot) $(vmlinux_stripped): $(vmlinux) PATH=$(RVPATH) $(target)-strip -o $@ $< $(vmlinux_bin): $(vmlinux) PATH=$(RVPATH) $(target)-objcopy -O binary $< $@ .PHONY: linux-menuconfig linux-menuconfig: $(linux_wrkdir)/.config $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv CROSS_COMPILE=$(CROSS_COMPILE) menuconfig $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv CROSS_COMPILE=$(CROSS_COMPILE) savedefconfig cp $(dir $<)defconfig $(linux_defconfig) sbi: $(uboot) $(vmlinux) rm -rf $(sbi_wrkdir) mkdir -p $(sbi_wrkdir) cd $(sbi_wrkdir) && O=$(sbi_wrkdir) CFLAGS="-mabi=$(ABI) -march=$(ISA)" ${MAKE} -C $(sbi_srcdir) CROSS_COMPILE=$(CROSS_COMPILE) \ PLATFORM=generic FW_PAYLOAD_PATH=$(uboot) FW_FDT_PATH=$(uboot_dtb_file) $(fit): sbi $(vmlinux_bin) $(uboot) $(its_file) $(initramfs) $(uboot_wrkdir)/tools/mkimage -f $(its_file) -A riscv -O linux -T flat_dt $@ @if [ -f fsz.sh ]; then ./fsz.sh $(sbi_bin); fi $(libfesvr): $(fesvr_srcdir) rm -rf $(fesvr_wrkdir) mkdir -p $(fesvr_wrkdir) mkdir -p $(dir $@) cd $(fesvr_wrkdir) && $