No000 / WcatOS

6 stars 0 forks source link

[提案]source edksetup.shの自動化について #10

Closed rkarsnk closed 3 years ago

rkarsnk commented 3 years ago

boot/Makefileを以下のように修正するのはどうでしょう?

buildコマンドにオプションを渡すことで、edk2/Conf/target.txtをOverrideできます。

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 $(EDK_WORKSPACE)/edksetup.sh
+       build -p WcatBootPkg/WcatBootPkg.dsc -b DEBUG -a X64 -t CLANG38
-   cd $(EDK_WORKSPACE); build
endif

OVMFをビルドする場合も、

build -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG -a X64 -t CLANG38

を追加するだけでビルドできます。

No000 commented 3 years ago

source edksetup.shの自動化に関して

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の自動化にはチャレンジしたことがあったのですが、ここでつまずき保留としていました。

build -p WcatBootPkg/WcatBootPkg.dsc -b DEBUG -a X64 -t CLANG38

これに関しては知りませんでした。オプションでオーバーライドできたのですね。教えていただきありがとうございます。

修正してみたところ、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

これはシンボリックリンクをしているからなのでしょうか?

build -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG -a X64 -t CLANG38

setupの自動化をしたかったので助かります。ありがとう御座います。

No000 commented 3 years ago

build -p WcatBootPkg/WcatBootPkg.dsc -b DEBUG -a X64 -t CLANG38

こちらのtarget.txtへの依存解消ができました。すみません。WcatBoot.dscだったようです。 Makefileの修正を行いました。

rkarsnk commented 3 years ago

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を使うのが無難です.

No000 commented 3 years ago

自動化できました。教えていただきありがとうございます。/bin/bashの方で修正を行ってみました。

https://github.com/No000/WcatOS/commit/fe48f09547a4008a36578fbc5d84682ce1fa0e97

rkarsnk commented 3 years ago

取り込まれたみたいですので、クローズしますね。