Vivado fsbl build batchmode②

前回
e-tipsmemo.hatenablog.com

まだ稚拙だがとりあえず自動化できた
依存の書き方がちょっとよくわからないので、本当は更新していないのに毎回ビルドされる。
それでもSDKをいちいち立ち上げるよりは早い。
いつか直す。

構造
f:id:katakanan:20180606234510p:plain
hsi**はログファイル

makeファイルの書き方がよくわからないけどこんな感じだろうか

$(eval current_dir_name := $(notdir $(shell pwd)))
sdk_dir := "./"$(current_dir_name)".sdk"
fsbl_dir := $(sdk_dir)"/fsbl"
lib_dir := $(fsbl_dir)"/zynq_fsbl_bsp"
release_dir := $(fsbl_dir)"/Release"
USER_SRCS := $(wildcard ../src/*.c) $(wildcard ../src/*.h)
FSBL_SRCS := $(wildcard $(sdk_dir)/*.c) $(wildcard $(sdk_dir)/*.h)

.PHONY: all
all: BOOT.bin

fsbl_project: fsbl.tcl
	cmd.exe /c 'hsi -mode tcl -source .\fsbl.tcl'

libs: fsbl_project
	make -C $(lib_dir) all

executable.elf: libs $(USER_SRCS)
	$(shell cp $(USER_SRCS) ./$(fsbl_dir))
	make -C ./$(fsbl_dir) all

BOOT.bin: executable.elf
	$(shell cp ./$(fsbl_dir)/executable.elf $(release_dir)/fsbl.elf)
	$(shell cp ../bifs/* $(release_dir)/)
	$(shell sh $(release_dir)/bootgen.sh)

clean:
	rm -f $(release_dir)/*
	make -C $(lib_dir) clean
	make -C $(fsbl_dir) clean

また
bootgen,batは考えるのを諦めたので
bootgen.shを別に作ってRelease下で実行させるようにした。

#!/bin/sh
cd `dirname $0`
cmd.exe /c "bootgen.bat -image ./bootbin.bif -arch zynq -o BOOT.bin"

①tclでfsbl. fsbl_bspが生成されて、
②libsをビルドしてから
ソースコードをコピーして
④fsbl自体をビルドして、
⑤Releaseフォルダにいろんな物をコピーして
⑥bootgenでBOOT.binを生成する。

という流れ。