Closed rkarsnk closed 3 years ago
ROOTDIR = $(CURDIR)/..
# EDK_WORKSPACE = $(WORKSPACE)
EDK_WORKSPACE = ~/Work/OSdev/WcatOS/tool/edk2
default:
# echo $(EDK_WORKSPACE)
# ifeq ($(EDK_WORKSPACE),)
# echo "$(error EDK PATH not set)"
# else
ln -sf $(ROOTDIR)/boot/WcatBootPkg $(EDK_WORKSPACE)
cd $(EDK_WORKSPACE); source edksetup.sh
build -p WcatBootPkg/WcatBootPkg.dsc -b RELEASE -a X64 -t CLANG38
# cd $(EDK_WORKSPACE); build
# endif
このように変更を行い、実行をすると以下のエラーが出てしまいます。
make boot
make[1]: ディレクトリ '/home/toto/Work/OSdev/WcatOS' に入ります
make -C boot
make[2]: ディレクトリ '/home/toto/Work/OSdev/WcatOS/boot' に入ります
ln -sf /home/toto/Work/OSdev/WcatOS/boot/../boot/WcatBootPkg ~/Work/OSdev/WcatOS/tool/edk2
cd ~/Work/OSdev/WcatOS/tool/edk2; source edksetup.sh
/bin/sh: 1 行: source: edksetup.sh: ファイルが見つかりません
make[2]: *** [Makefile:21: default] エラー 1
make[2]: ディレクトリ '/home/toto/Work/OSdev/WcatOS/boot' から出ます
make[1]: *** [Makefile:14: boot] エラー 2
make[1]: ディレクトリ '/home/toto/Work/OSdev/WcatOS' から出ます
make: *** [Makefile:27: all] エラー 2
以前もsource edksetup.shの自動化にはチャレンジしたことがあったのですが、ここでつまずき保留としていました。
これに関しては知りませんでした。オプションでオーバーライドできたのですね。教えていただきありがとうございます。
修正してみたところ、WcatBootPkg.dscを見つけきれないようです。
make boot
make[1]: ディレクトリ '/home/toto/Work/OSdev/WcatOS' に入ります
make -C boot
make[2]: ディレクトリ '/home/toto/Work/OSdev/WcatOS/boot' に入ります
echo /home/toto/Work/OSdev/WcatOS/tool/edk2
/home/toto/Work/OSdev/WcatOS/tool/edk2
ln -sf /home/toto/Work/OSdev/WcatOS/boot/../boot/WcatBootPkg /home/toto/Work/OSdev/WcatOS/tool/edk2
cd /home/toto/Work/OSdev/WcatOS/tool/edk2;source /home/toto/Work/OSdev/WcatOS/tool/edk2/edksetup.sh
Loading previous configuration from /home/toto/Work/OSdev/WcatOS/tool/edk2/Conf/BuildEnv.sh
Using EDK2 in-source Basetools
WORKSPACE: /home/toto/Work/OSdev/WcatOS/tool/edk2
EDK_TOOLS_PATH: /home/toto/Work/OSdev/WcatOS/tool/edk2/BaseTools
CONF_PATH: /home/toto/Work/OSdev/WcatOS/tool/edk2/Conf
build -p WcatBootPkg/WcatBootPkg.dsc -b DEBUG -a X64 -t CLANG38
Build environment: Linux-5.10.32-1-MANJARO-x86_64-with-glibc2.33
Build start time: 22:10:59, May.05 2021
WORKSPACE = /home/toto/Work/OSdev/WcatOS/tool/edk2
EDK_TOOLS_PATH = /home/toto/Work/OSdev/WcatOS/tool/edk2/BaseTools
CONF_PATH = /home/toto/Work/OSdev/WcatOS/tool/edk2/Conf
PYTHON_COMMAND = /usr/bin/python3.9
build.py...
: error 000E: File/directory not found in workspace
/home/toto/Work/OSdev/WcatOS/tool/edk2/WcatBootPkg/WcatBootPkg.dsc
- Failed -
Build end time: 22:10:59, May.05 2021
Build total time: 00:00:00
make[2]: *** [Makefile:18: default] エラー 14
make[2]: ディレクトリ '/home/toto/Work/OSdev/WcatOS/boot' から出ます
make[1]: *** [Makefile:14: boot] エラー 2
make[1]: ディレクトリ '/home/toto/Work/OSdev/WcatOS' から出ます
make: *** [Makefile:27: all] エラー 2
これはシンボリックリンクをしているからなのでしょうか?
setupの自動化をしたかったので助かります。ありがとう御座います。
こちらのtarget.txtへの依存解消ができました。すみません。WcatBoot.dscだったようです。 Makefileの修正を行いました。
makeで利用するSHELLが/bin/sh
だとsource
コマンドがないため,以下の文はエラーになるようです.
cd $(EDK_WORKSPACE); source edksetup.sh
sourceコマンドを使う場合は,Makefile冒頭にbashで実行するように明示すると問題が解消するかと思います.
SHELL=/bin/bash
追加情報1:
edksetup.shはsource時に環境変数WORKSPACEを参照し、WORKSPACEが空の場合,カレントディレクトリをWORKSPACEとして扱うように動作します(source ./edksetup.sh --help
参照)。以下のように入力するとcd $(EDK_WORKSPACE)
をしなくても,sourceコマンドが実行できます.
- cd $(EDK_WORKSPACE); source edksetup.sh
+ WORKSPACE=$(EDK_WORKSPACE) source $(EDK_WORKSPACE)/edksetup.sh
追加情報2:
edksetup.shは/bin/shの.
コマンドど実行しようとすると,Syntax Errorが発生するので,bashを使うのが無難です.
自動化できました。教えていただきありがとうございます。/bin/bashの方で修正を行ってみました。
https://github.com/No000/WcatOS/commit/fe48f09547a4008a36578fbc5d84682ce1fa0e97
取り込まれたみたいですので、クローズしますね。
boot/Makefileを以下のように修正するのはどうでしょう?
buildコマンドにオプションを渡すことで、edk2/Conf/target.txtをOverrideできます。
OVMFをビルドする場合も、
を追加するだけでビルドできます。