fpga-pynq/common/Makefrag

168 lines
5.7 KiB
Plaintext
Raw Normal View History

2014-09-19 08:44:45 +08:00
# This makefrag is sourced by each board's subdirectory
JOBS = 16
2014-09-11 08:53:33 +08:00
base_dir = $(abspath ..)
2014-09-25 08:12:28 +08:00
common = $(base_dir)/common
output_delivery = deliver_output
2014-09-11 08:53:33 +08:00
ifneq ($(BOARD_MODEL),)
2014-09-25 08:12:28 +08:00
insert_board = s/\# REPLACE FOR OFFICIAL BOARD NAME/set_property "board" "$(BOARD_MODEL)"/g
endif
2014-09-11 08:53:33 +08:00
2014-09-25 08:12:28 +08:00
2014-09-19 08:44:45 +08:00
verilog_srcs = \
src/verilog/clocking.vh \
src/verilog/rocketchip_wrapper.v \
src/verilog/Top.$(CHISEL_CONFIG).v \
2014-09-19 08:44:45 +08:00
2014-09-11 08:53:33 +08:00
2014-09-20 01:37:50 +08:00
default: project
2014-09-19 08:44:45 +08:00
# Specialize sources for board
2014-09-25 08:12:28 +08:00
# ------------------------------------------------------------------------------
src/verilog/rocketchip_wrapper.v: $(common)/rocketchip_wrapper.v
cp $(common)/rocketchip_wrapper.v src/verilog/
2014-09-11 08:53:33 +08:00
2014-09-25 08:12:28 +08:00
src/tcl/$(BOARD)_rocketchip.tcl: $(common)/zynq_rocketchip.tcl Makefile
sed 's/BOARD_NAME_HERE/$(BOARD)/g;s/PART_NUMBER_HERE/$(PART)/g;$(insert_board);s/CHISEL_CONFIG_HERE/$(CHISEL_CONFIG)/g' \
$(common)/zynq_rocketchip.tcl > src/tcl/$(BOARD)_rocketchip.tcl
2014-09-11 14:37:47 +08:00
2014-09-25 08:12:28 +08:00
src/tcl/make_bitstream.tcl: $(common)/make_bitstream.tcl
sed 's/BOARD_NAME_HERE/$(BOARD)/g' \
$(common)/make_bitstream.tcl > src/tcl/make_bitstream.tcl
2014-09-19 08:44:45 +08:00
rocket:
2014-09-25 08:12:28 +08:00
cd $(base_dir)/rocket-chip/fsim; \
make verilog CONFIG=$(CHISEL_CONFIG); \
cp generated-src/Top.$(CHISEL_CONFIG).v $(base_dir)/$(BOARD)/src/verilog
2014-09-19 08:44:45 +08:00
2014-09-20 01:37:50 +08:00
2014-09-19 08:44:45 +08:00
# Project generation
2014-09-25 08:12:28 +08:00
# ------------------------------------------------------------------------------
project = $(BOARD)_rocketchip/$(BOARD)_rocketchip.xpr
$(project): | src/verilog/rocketchip_wrapper.v src/tcl/$(BOARD)_rocketchip.tcl
2014-09-26 05:04:14 +08:00
vivado -mode tcl -source src/tcl/$(BOARD)_rocketchip.tcl;
2014-09-25 08:12:28 +08:00
project: $(project)
2014-09-19 08:44:45 +08:00
2014-09-25 08:12:28 +08:00
vivado: $(project)
vivado $(project) &
2014-09-19 08:44:45 +08:00
2014-09-25 08:12:28 +08:00
bitstream = $(BOARD)_rocketchip/$(BOARD)_rocketchip.runs/impl_1/rocketchip_wrapper.bit
$(bitstream): src/tcl/make_bitstream.tcl $(verilog_srcs) src/constrs/base.xdc | $(project)
vivado -mode tcl -source src/tcl/make_bitstream.tcl
bitstream: $(bitstream)
2014-09-20 01:37:50 +08:00
2014-09-25 08:12:28 +08:00
# Platform software generation
# ------------------------------------------------------------------------------
arm_linux_dir = $(base_dir)/common/linux-xlnx
uboot_dir = $(base_dir)/common/u-boot-xlnx
soft_build_dir = soft_build
arm-linux: arm-uboot # must first build uboot because we need tools
# compile kernel
2014-09-24 22:53:05 +08:00
git submodule update --init $(arm_linux_dir)
# no make clean included here since one copy of linux should work on all boards
cd $(arm_linux_dir) && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
cd $(arm_linux_dir) && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- -j$(JOBS)
# convert zImage to uImage
cd $(arm_linux_dir) && export PATH=$(uboot_dir)/tools:$$PATH && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
mkdir -p $(output_delivery)
cp $(arm_linux_dir)/arch/arm/boot/uImage $(output_delivery)/
arm-uboot:
# compile board-compatible u-boot
2014-09-24 22:53:05 +08:00
git submodule update --init $(uboot_dir)
# copy relevant configuration files
if [ -a soft_config/boards.cfg ] ; \
then \
cp soft_config/boards.cfg $(uboot_dir)/ ; \
fi;
cp soft_config/zynq_$(UBOOT_CONFIG).h $(uboot_dir)/include/configs/
# actually build
cd $(uboot_dir) && make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_$(UBOOT_CONFIG)_config
cd $(uboot_dir) && make CROSS_COMPILE=arm-xilinx-linux-gnueabi- -j$(JOBS)
mkdir -p $(soft_build_dir)
cp $(uboot_dir)/u-boot $(soft_build_dir)/u-boot.elf
2014-09-19 08:44:45 +08:00
arm-dtb:
export PATH=$(arm_linux_dir)/scripts/dtc:$$PATH && dtc -I dts -O dtb -o $(output_delivery)/devicetree.dtb soft_config/$(BOARD)_devicetree.dts
2014-09-25 08:12:28 +08:00
2014-09-20 05:54:09 +08:00
# Handle images and git submodule for prebuilt modules
2014-09-25 08:12:28 +08:00
# ------------------------------------------------------------------------------
2014-09-26 05:04:14 +08:00
images = fpga-images-$(BOARD)/boot.bif
$(images):
2014-09-19 08:44:45 +08:00
git submodule update --init --depth=1 fpga-images-$(BOARD)
2014-09-26 05:04:14 +08:00
fetch-images: $(images)
2014-09-19 08:44:45 +08:00
2014-09-26 05:04:14 +08:00
fpga-images-$(BOARD)/boot.bin: $(images) $(bitstream)
cd fpga-images-$(BOARD); bootgen -image boot.bif -w -o boot.bin
2014-09-19 08:44:45 +08:00
2014-09-26 13:48:58 +08:00
load-sd: $(images)
2014-09-19 08:44:45 +08:00
$(base_dir)/common/load_card.sh $(SD)
2014-09-26 05:04:14 +08:00
ramdisk-open: $(images)
2014-09-20 05:54:09 +08:00
mkdir ramdisk
dd if=fpga-images-$(BOARD)/uramdisk.image.gz bs=64 skip=1 | \
gunzip -c | sudo sh -c 'cd ramdisk/ && cpio -i'
ramdisk-close:
@if [ ! -d "ramdisk" ]; then \
echo "No ramdisk to close (use make ramdisk-open first)"; \
exit 1; \
fi
sh -c 'cd ramdisk/ && sudo find . | sudo cpio -H newc -o' | gzip -9 > uramdisk.cpio.gz
mkimage -A arm -O linux -T ramdisk -d uramdisk.cpio.gz fpga-images-$(BOARD)/uramdisk.image.gz
rm uramdisk.cpio.gz
@echo "Don't forget to remove ramdisk before opening it again (sudo rm -rf ramdisk)"
2014-09-20 01:37:50 +08:00
2014-09-25 08:12:28 +08:00
# Fetch ramdisk for user building from scratch
# ------------------------------------------------------------------------------
s3_url = https://s3-us-west-1.amazonaws.com/riscv.org/fpga-zynq-files
ramdisk_url = $(s3_url)/uramdisk.image.gz
fetch-ramdisk:
mkdir -p $(output_delivery)
curl $(ramdisk_url) > $(output_delivery)/uramdisk.image.gz
# Rebuild from bif for user building from scratch
# ------------------------------------------------------------------------------
$(output_delivery)/boot.bin:
cd $(output_delivery); bootgen -image output.bif -w -o boot.bin
2014-09-26 08:39:49 +08:00
# Fetch pre-built risc-v linux binary and root fs from S3
# ------------------------------------------------------------------------------
riscv_root_bin = $(s3_url)/root.bin
2014-09-26 08:39:49 +08:00
ifeq ($(BOARD), zybo)
riscv_vmlinux = $(s3_url)/vmlinux_nofpu
2014-09-26 08:39:49 +08:00
else
riscv_vmlinux = $(s3_url)/vmlinux
2014-09-26 08:39:49 +08:00
endif
sd_riscv = fpga-images-$(BOARD)/riscv
sd_riscv_scratch = $(output_delivery)/riscv
fetch-riscv-linux:
mkdir -p $(sd_riscv)
curl $(riscv_root_bin) > $(sd_riscv)/root.bin
curl $(riscv_vmlinux) > $(sd_riscv)/vmlinux
fetch-riscv-linux-deliver:
mkdir -p $(sd_riscv_scratch)
curl $(riscv_root_bin) > $(sd_riscv_scratch)/root.bin
curl $(riscv_vmlinux) > $(sd_riscv_scratch)/vmlinux
clean:
2014-09-25 08:12:28 +08:00
rm -f *.log *.jou *.str
2014-09-20 01:37:50 +08:00
2014-09-26 05:04:14 +08:00
.PHONY: vivado rocket fetch-images load-sd ramdisk-open ramdisk-close clean