ISA ?= rv64imafdc_zicsr_zifencei_zba_zbb ABI ?= lp64d #TARGET_BOARD is JH7110 or NULL SOC := JH7110 BOARD_FLAGS := HWBOARD ?= visionfive2 HWBOARD_FLAG ?= HWBOARD_VISIONFIVE2 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:$(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 ifeq ($(HWBOARD), evb) linux_defconfig := $(linux_srcdir)/arch/riscv/configs/starfive_jh7110_defconfig else linux_defconfig := $(linux_srcdir)/arch/riscv/configs/starfive_visionfive2_defconfig endif vmlinux := $(linux_wrkdir)/vmlinux vmlinux_stripped := $(linux_wrkdir)/vmlinux-stripped vmlinux_bin := $(wrkdir)/vmlinux.bin module_install_path:=$(wrkdir)/module_install_path perf_tool_path := $(linux_srcdir)/tools/perf its_file=$(confdir)/$(HWBOARD)-fit-image.its uboot_its_file=$(confdir)/$(HWBOARD)-uboot-fit-image.its vfat_image := $(wrkdir)/starfive-$(HWBOARD)-vfat.part #ext_image := $(wrkdir) # TODO initramfs := $(wrkdir)/initramfs.cpio.gz sbi_srcdir := $(srcdir)/opensbi sbi_wrkdir := $(wrkdir)/opensbi sbi_bin := $(wrkdir)/opensbi/platform/generic/firmware/fw_payload.bin fit := $(wrkdir)/image.fit uboot_fit := $(wrkdir)/$(HWBOARD)_fw_payload.img 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)/u-boot uboot_wrkdir := $(wrkdir)/u-boot uboot_dtb_file := $(wrkdir)/u-boot/arch/riscv/dts/starfive_$(HWBOARD).dtb uboot := $(uboot_wrkdir)/u-boot.bin spl_tool_srcdir :=$(CURDIR)/soft_3rdpart/spl_tool spl_tool := spl_tool spl_bin_normal_out := u-boot-spl.bin.normal.out uboot_config := starfive_$(HWBOARD)_defconfig uboot_defconfig := $(uboot_srcdir)/configs/$(uboot_config) rootfs := $(wrkdir)/rootfs.bin target_gcc := $(CROSS_COMPILE)gcc version := $(wrkdir)/version .PHONY: all check_arg all: check_arg $(fit) $(vfat_image) $(uboot_fit) $(spl_bin_normal_out) @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 check_arg: ifeq ( , $(filter $(HWBOARD), visionfive2 evb fpga)) $(error board $(HWBOARD) is not supported, BOARD=[visionfive2 | evb | fpga(deflault)]) endif # 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 .PHONY: visionfive2 evb fpga visionfive2: HWBOARD := visionfive2 visionfive2: HWBOARD_FLAG := HWBOARD_VISIONFIVE2 visionfive2: uboot_config := starfive_$(HWBOARD)_defconfig visionfive2: uboot_dtb_file := $(wrkdir)/u-boot/arch/riscv/dts/starfive_$(HWBOARD).dtb visionfive2: linux_defconfig := $(linux_srcdir)/arch/riscv/configs/starfive_visionfive2_defconfig visionfive2: uboot_fit := $(wrkdir)/$(HWBOARD)_fw_payload.img visionfive2: vfat_image := $(wrkdir)/starfive-$(HWBOARD)-vfat.part visionfive2: its_file=$(confdir)/$(HWBOARD)-fit-image.its visionfive2: uboot_its_file=$(confdir)/$(HWBOARD)-uboot-fit-image.its visionfive2: all evb: HWBOARD := evb evb: HWBOARD_FLAG := HWBOARD_EVB evb: uboot_config := starfive_$(HWBOARD)_defconfig evb: uboot_dtb_file := $(wrkdir)/u-boot/arch/riscv/dts/starfive_$(HWBOARD).dtb evb: linux_defconfig := $(linux_srcdir)/arch/riscv/configs/starfive_jh7110_defconfig evb: uboot_fit := $(wrkdir)/$(HWBOARD)_fw_payload.img evb: vfat_image := $(wrkdir)/starfive-$(HWBOARD)-vfat.part evb: its_file=$(confdir)/$(HWBOARD)-fit-image.its evb: uboot_its_file=$(confdir)/$(HWBOARD)-uboot-fit-image.its evb: all fpga: HWBOARD := fpga fpga: all fpga: HWBOARD_FLAG := HWBOARD_FPGA $(version): cd $(linux_srcdir) && \ sh $(confdir)/version > $(version) chmod 777 $(version) $(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 $(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) $(version) mkdir -p $(buildroot_rootfs_wrkdir)/target/lib cp -r $(module_install_path)/lib/modules $(buildroot_rootfs_wrkdir)/target/lib/ mkdir -p $(buildroot_rootfs_wrkdir)/target/usr/bin cp $(perf_tool_path)/perf $(buildroot_rootfs_wrkdir)/target/usr/bin/ cp $(version) $(buildroot_rootfs_wrkdir)/target/usr/bin/version $(MAKE) -C $< RISCV=$(RISCV) PATH=$(RVPATH) O=$(buildroot_rootfs_wrkdir) .PHONY: buildroot_rootfs buildroot_rootfs: $(buildroot_rootfs_ext) .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) 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) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=riscv olddefconfig $(uboot_wrkdir)/.config: $(uboot_defconfig) mkdir -p $(dir $@) cp -p $< $@ $(MAKE) -C $(uboot_srcdir) O=$(uboot_wrkdir) ARCH=riscv olddefconfig $(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(target_gcc) $(MAKE) -C $< O=$(linux_wrkdir) \ ARCH=riscv \ CROSS_COMPILE=$(CROSS_COMPILE) \ PATH=$(RVPATH) \ HWBOARD_FLAG=$(HWBOARD_FLAG) \ vmlinux \ all \ modules $(MAKE) -C $< O=$(linux_wrkdir) \ ARCH=riscv \ CROSS_COMPILE=$(CROSS_COMPILE) \ PATH=$(RVPATH) \ INSTALL_MOD_PATH=$(module_install_path) \ modules_install vpudriver-build: $(vmlinux) $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) \ INSTALL_MOD_PATH=$(module_install_path) wave511driver $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) \ INSTALL_MOD_PATH=$(module_install_path) wave420ldriver $(MAKE) -C $(buildroot_initramfs_wrkdir) O=$(buildroot_initramfs_wrkdir) \ INSTALL_MOD_PATH=$(module_install_path) codaj12driver linux-tools-build: $(vmlinux) $(MAKE) -C $(perf_tool_path) \ ARCH=riscv \ CROSS_COMPILE=$(CROSS_COMPILE) \ WERROR=0 NO_GTK2=1 NO_LIBPERL=1 \ NO_LIBBIONIC=1 .PHONY: initrd initrd: $(initramfs) $(initramfs).d: $(buildroot_initramfs_sysroot) $(linux_srcdir)/usr/gen_initramfs_list.sh -l $(confdir)/initramfs.txt $(buildroot_initramfs_sysroot) > $@ $(initramfs): $(buildroot_initramfs_sysroot) $(vmlinux) vpudriver-build $(version) linux-tools-build cp -r $(module_install_path)/lib/modules $(buildroot_initramfs_sysroot)/lib/ cp $(perf_tool_path)/perf $(buildroot_initramfs_sysroot)/usr/bin/ cp $(version) $(buildroot_initramfs_sysroot)/usr/bin/version && \ 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 menuconfig $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv savedefconfig cp $(dir $<)defconfig $(linux_defconfig) # Note: opensbi generic platform default FW_TEXT_START is 0x80000000 # For JH7110, need to specify the FW_TEXT_START to 0x40000000 # Otherwise, the fw_payload.bin downloading via jtag will not run. # not affect the evb_fw_payload.img for its file has FW_TEXT_START $(sbi_bin): $(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) FW_TEXT_START=0x40000000 $(fit): $(sbi_bin) $(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) && $