aboutsummaryrefslogtreecommitdiffstats
path: root/build.sh
blob: 8099fc19525d75d08a49d15f28cfe6d0f4a60b3b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash

. ./stable-commits

BUILD_DIR=`pwd`/src
OUTPUT_DIR=`pwd`/output
NUM_OF_CORES=`grep -c ^processor /proc/cpuinfo`

run_cmd()
{
	echo "$*"

	$*
	if [ $? -ne 0 ]; then
		echo "ERROR: $*"
		exit 1
	fi
}

fetch_kernel()
{
	run_cmd "mkdir -p ${BUILD_DIR}/$1"
	run_cmd "git clone --single-branch -b ${KERNEL_COMMIT} ${KERNEL_GIT_URL} ${BUILD_DIR}/$1"
}

build_kernel()
{
	if [ ! -d $BUILD_DIR/$1 ]; then
		fetch_kernel "$1"
	fi
	run_cmd "cd $BUILD_DIR/$1"
	run_cmd "cp /boot/config-$(uname -r) .config"
	sed  -ie s/CONFIG_LOCALVERSION.*/CONFIG_LOCALVERSION=\"\"/g .config
	./scripts/config --enable CONFIG_AMD_MEM_ENCRYPT
	./scripts/config --enable AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT
	./scripts/config --enable CONFIG_KVM_AMD_SEV
	./scripts/config --disable CONFIG_DEBUG_INFO
	./scripts/config --enable CRYPTO_DEV_SP_PSP
	./scripts/config --module CRYPTO_DEV_CCP_DD
	./scripts/config --enable CONFIG_CRYPTO_DEV_CCP
	./scripts/config --disable CONFIG_LOCALVERSION_AUTO
	yes "" | make olddefconfig

	if [ "$2" = "rpm" ]; then
		echo "%_topdir    `pwd`/rpmbuild" > $HOME/.rpmmacros
	fi
	run_cmd "make -j `getconf _NPROCESSORS_ONLN` $2-pkg LOCALVERSION=-sev"
	run_cmd "mkdir -p $OUTPUT_DIR/$1"
	if [ "$2" = "rpm" ]; then
		run_cmd "mv `pwd`/rpmbuild/RPMS/* $OUTPUT_DIR/$1"
		run_cmd "rm -rf `pwd`/rpmbuild"
		run_cmd "rm -rf $HOME/.rpmmacros"
	else
		run_cmd "mv ../linux-*sev*.deb $OUTPUT_DIR/$1"
	fi
}

fetch_ovmf()
{
	run_cmd "mkdir -p ${BUILD_DIR}/edk2"
	run_cmd "git clone ${EDK2_GIT_URL} ${BUILD_DIR}/edk2"
	cd ${BUILD_DIR}/edk2
}

build_ovmf()
{
	if [ ! -d $BUILD_DIR/edk2 ]; then
		fetch_ovmf
	fi
	cd $BUILD_DIR/edk2
	run_cmd "make -C BaseTools"
	. ./edksetup.sh
	run_cmd "nice build --cmd-len=64436 \
		-DDEBUG_ON_SERIAL_PORT=TRUE \
		-n $(getconf _NPROCESSORS_ONLN) \
		-a X64 \
		-a IA32 \
		-t GCC5 \
	        -p OvmfPkg/OvmfPkgIa32X64.dsc"
	run_cmd "mkdir -p $OUTPUT_DIR/qemu-output/share/qemu"
	run_cmd "cp Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_CODE.fd $OUTPUT_DIR/qemu-output/share/qemu"
	run_cmd "cp Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_VARS.fd $OUTPUT_DIR/qemu-output/"
}

fetch_qemu()
{
	run_cmd "mkdir -p ${BUILD_DIR}/qemu"
	run_cmd "git clone --single-branch -b ${QEMU_COMMIT} ${QEMU_GIT_URL} ${BUILD_DIR}/qemu"
	cd ${BUILD_DIR}/qemu
}

build_qemu()
{
	if [ ! -d $BUILD_DIR/qemu ]; then
		fetch_qemu
	fi
	cd $BUILD_DIR/qemu
	run_cmd "./configure --target-list=x86_64-softmmu --enable-trace-backend=log\
		--prefix=$OUTPUT_DIR/qemu-output"
	run_cmd "make -j$(getconf _NPROCESSORS_ONLN)"
	run_cmd "make -j$(getconf _NPROCESSORS_ONLN) install"
	run_cmd "cp $BUILD_DIR/../launch-qemu.sh $OUTPUT_DIR/qemu-output"
}

dep_install ()
{
	# install the build dependencies 
	run_cmd "sudo apt-get -y install git build-essential zlib1g-dev libglib2.0-dev libpixman-1-dev uuid-dev nasm bison acpica-tools libncurses5-dev libssl-dev fakeroot dpkg-dev bc libelf-dev"
}

grep ubuntu /etc/*-release* >/dev/null
if [ $? -eq 0 ]; then
	dep_install
	pkg="deb"
else
	pkg="rpm"
fi

build_kernel "linux" "$pkg"
build_qemu
build_ovmf