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