Skip to content

Commit f79a486

Browse files
authored
Merge pull request #427 from citrus-it/bhyveuefi
bhyve-fw: build non-CSM variants too
2 parents 8f6caa8 + 4aefdf6 commit f79a486

File tree

2 files changed

+73
-37
lines changed

2 files changed

+73
-37
lines changed

build/bhyve-fw/build.sh

Lines changed: 72 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,25 @@ DESC="$SUMMARY"
3535
: ${PKG_SOURCE_BRANCH:=bhyve/UDK2014.SP1}
3636

3737
# Extend VER so that the temporary build directory is branch specific.
38-
# Branches can include '/' so remove them.
38+
# Branch names can include '/' so remove them.
3939
VER+="-${PKG_SOURCE_BRANCH//\//_}"
4040

41-
clone_source(){
41+
export GCCPATH=/opt/gcc-4.4.4
42+
43+
MAKE_ARGS="
44+
AS=/usr/bin/gas
45+
AR=/usr/bin/gar
46+
LD=/usr/bin/gld
47+
OBJCOPY=/usr/bin/gobjcopy
48+
CC=${GCCPATH}/bin/gcc
49+
CXX=${GCCPATH}/bin/g++
50+
"
51+
52+
export OOGCC_BIN=$GCCPATH/bin/
53+
export IASL_PREFIX=/usr/sbin/
54+
export NASM_PREFIX=/usr/bin/i386/
55+
56+
clone_source() {
4257
logmsg "$PROG -> $TMPDIR/$BUILDDIR/$PROG"
4358
logcmd mkdir -p $TMPDIR/$BUILDDIR
4459
pushd $TMPDIR/$BUILDDIR > /dev/null
@@ -58,72 +73,92 @@ clone_source(){
5873
popd > /dev/null
5974
}
6075

61-
build() {
62-
pushd $TMPDIR/$BUILDDIR/$PROG >/dev/null || logerr "--- chdir failed"
63-
64-
export GCCPATH=/opt/gcc-4.4.4
65-
66-
MAKE_ARGS="
67-
AS=/usr/bin/gas
68-
AR=/usr/bin/gar
69-
LD=/usr/bin/gld
70-
OBJCOPY=/usr/bin/gobjcopy
71-
CC=${GCCPATH}/bin/gcc
72-
CXX=${GCCPATH}/bin/g++
73-
"
76+
edksetup() {
77+
pushd $TMPDIR/$BUILDDIR/$PROG > /dev/null || logerr "--- chdir failed"
78+
source edksetup.sh
79+
popd > /dev/null
80+
}
7481

82+
cleanup() {
7583
logmsg "-- Cleaning source tree"
7684

85+
pushd $TMPDIR/$BUILDDIR/$PROG > /dev/null || logerr "--- chdir failed"
86+
7787
logcmd gmake $MAKE_ARGS ARCH=X64 -C BaseTools clean
78-
rm -f Build Conf/{target,build_rule,tools_def}.txt Conf/.cache 2>/dev/null
88+
rm -rf Build Conf/{target,build_rule,tools_def}.txt Conf/.cache 2>/dev/null
7989

90+
popd > /dev/null
91+
}
92+
93+
build_tools() {
8094
logmsg "-- Building tools"
8195

82-
# First build the tools. The code isn't able to detect the build
83-
# architecture - it doesn't expect `uname -m` to return `i86pc`
96+
pushd $TMPDIR/$BUILDDIR/$PROG > /dev/null || logerr "--- chdir failed"
97+
98+
# The code isn't able to detect the build architecture - it doesn't
99+
# expect `uname -m` to return `i86pc`
84100
logcmd gmake $MAKE_ARGS ARCH=X64 -C BaseTools \
85101
|| logerr "--- BaseTools build failed"
86102

87-
BUILD_ARGS="-DDEBUG_ON_SERIAL_PORT=TRUE -DFD_SIZE_2MB -DCSM_ENABLE=TRUE"
103+
popd > /dev/null
104+
}
105+
106+
build() {
107+
pushd $TMPDIR/$BUILDDIR/$PROG > /dev/null || logerr "--- chdir failed"
88108

89-
(
90-
export OOGCC_BIN=$GCCPATH/bin/
91-
export IASL_PREFIX=/usr/sbin/
92-
export NASM_PREFIX=/usr/bin/i386/
93-
source edksetup.sh
109+
[ "$1" = "-csm" ] && csm=1 || csm=0
94110

111+
BUILD_ARGS="-DDEBUG_ON_SERIAL_PORT=TRUE -DFD_SIZE_2MB"
112+
[ $csm -eq 1 ] && BUILD_ARGS+=" -DCSM_ENABLE=TRUE"
113+
export BUILD_ARGS
114+
115+
if [ $csm -eq 1 ]; then
95116
logmsg "-- Building compatibility support module (CSM)"
96117
logcmd gmake $MAKE_ARGS -C BhyvePkg/Csm/BhyveCsm16/ \
97118
|| logerr "--- CSM build failed"
119+
fi
98120

99-
for mode in RELEASE DEBUG; do
100-
logmsg "-- Building $mode firmware"
101-
logcmd `which build` \
102-
-t OOGCC -a X64 -b $mode \
103-
-p BhyvePkg/BhyvePkgX64.dsc \
104-
$BUILD_ARGS || logerr "--- $mode build failed"
105-
done
106-
) || logerr "--- Build failed"
121+
for mode in RELEASE DEBUG; do
122+
logmsg "-- Building $mode firmware"
123+
logcmd `which build` \
124+
-t OOGCC -a X64 -b $mode \
125+
-p BhyvePkg/BhyvePkgX64.dsc \
126+
$BUILD_ARGS || logerr "--- $mode build failed"
127+
done
107128

108-
popd >/dev/null
129+
popd > /dev/null
109130
}
110131

111132
install() {
112-
pushd $TMPDIR/$BUILDDIR/$PROG >/dev/null || logerr "--- chdir failed"
133+
suffix="$1"
134+
pushd $TMPDIR/$BUILDDIR/$PROG > /dev/null || logerr "--- chdir failed"
113135
logcmd mkdir -p $DESTDIR/usr/share/bhyve/firmware
114-
cp OvmfPkg/License.txt $DESTDIR/LICENCE
136+
[ -f $DESTDIR/LICENCE ] || cp OvmfPkg/License.txt $DESTDIR/LICENCE
115137
for mode in RELEASE DEBUG; do
116138
logcmd cp Build/BhyveX64/${mode}_OOGCC/FV/BHYVE.fd \
117-
$DESTDIR/usr/share/bhyve/firmware/BHYVE_$mode.fd
139+
$DESTDIR/usr/share/bhyve/firmware/BHYVE_$mode$suffix.fd
118140
done
119-
popd >/dev/null
141+
popd > /dev/null
120142
}
121143

122144
init
123145
prep_build
124146
clone_source
147+
148+
cleanup
149+
build_tools
150+
edksetup
151+
152+
# Build UEFI firmware
153+
note "UEFI Firmware"
125154
build
126155
install
156+
157+
# Build UEFI+CSM firmware
158+
note "UEFI+CSM Firmware"
159+
build -csm
160+
install _CSM
161+
127162
# Reset version for package creation
128163
VER=$VERHUMAN
129164
make_package

build/bhyve-fw/local.mog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ license LICENCE license=Intel
1414

1515
<transform file -> set mode 0755>
1616
link path=usr/share/bhyve/firmware/BHYVE.fd target=BHYVE_RELEASE.fd
17+
link path=usr/share/bhyve/firmware/BHYVE_CSM.fd target=BHYVE_RELEASE_CSM.fd
1718

0 commit comments

Comments
 (0)