summaryrefslogtreecommitdiff
path: root/core/defconfigs/ci-build.sh
blob: 4cd46c2420faf80fc4ed34b6ff941b43b681c48c (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#!/bin/sh

# NOTE: this script only accepts long options

perror() {
	echo "[CI-BUILD-ERROR]  : $1"
}

pwarning() {
	echo "[CI-BUILD-WARNING]: $1"
}

pinfo() {
	echo "[CI-BUILD-INFO]   : $1"
}

set_os() {
	local x_os=$1
	local x_cibuild_kconfig=$2
	case "$x_os" in
		linux|LINUX)
			echo "CONFIG_EMBTK_OS_LINUX=y" >> $x_cibuild_kconfig
			;;
		*)
			perror "Unsupported OS $x_os , please help to support it"
			exit 1
			;;
	esac
}

set_xcompiler() {
	local x_toolchain=$1
	local x_cibuild_kconfig=$2
	case "$x_toolchain" in
		gcc|GCC)
			echo "CONFIG_EMBTK_GCC_TOOLCHAIN=y" >> $x_cibuild_kconfig
			;;
		Clang+llvm)
			echo "CONFIG_EMBTK_LLVM_ONLY_TOOLCHAIN=y" >> $x_cibuild_kconfig
			;;
		*)
			perror "Unsupported cross compiler $x_toolchain , please help to support it"
			exit 1
			;;
	esac
}

set_clibrary() {
	local x_clibrary=$1
	local x_cibuild_kconfig=$2
	case "$x_clibrary" in
		eglibc)
			echo "CONFIG_EMBTK_CLIB_EGLIBC=y" >> $x_cibuild_kconfig
			;;
		uClibc)
			echo "CONFIG_EMBTK_CLIB_UCLIBC=y" >> $x_cibuild_kconfig
			;;
		glibc)
			echo "CONFIG_EMBTK_CLIB_GLIBC=y" >> $x_cibuild_kconfig
			;;
		musl)
			echo "CONFIG_EMBTK_CLIB_MUSL=y" >> $x_cibuild_kconfig
			;;
		*)
			perror "Unsupported c library $x_clibrary , please help to support it"
			exit 1
			;;
	esac
}

options=$(echo $* | sed 's/=/ /g')
set -- $options

pinfo "Parsing parameters"

while true; do
	case "$1" in
		--abi)
			abi=$2; shift 2;;
		--arch)
			arch=$2; shift 2;;
		--archvariant)
			archvariant=$2; shift 2;;
		--clibrary)
			clibrary=$2; shift 2;;
		--endian)
			endian=$2; shift 2;;
		--float)
			float=$2; shift 2;;
		--os)
			os=$2; shift 2;;
		--toolchain)
			toolchain=$2; shift 2;;
		--workspace)
			workspace=$2; shift 2;;
		--downloaddir)
			downloaddir=$2; shift 2;;
		--makecmd)
			makecmd=$2; shift 2;;
		--)
			shift; break ;;
		*)
			break;;
	esac
done

#
# Basic checks
#
if [ "x$workspace" = "x" ]; then
	perror "Workspace not specified"
	exit 1
fi

if [ "x$arch" = "x" ]; then
	perror "Architecture not specified"
	exit 1
fi

if [ ! -d $workspace/core/defconfigs/$arch ]; then
	perror "Architecture $arch seems not be supported"
	exit 1
fi

if [ ! -e $workspace/core/defconfigs/$arch/$arch-ci-build.sh ]; then
	perror "Architecture $arch does not provide specifics"
	exit 1
fi

xmakecmd=""
if [ "x$makecmd" = "x" ]; then
	xmakecmd=make
else
	xmakecmd=$makecmd
fi

#
# Clean up old build
#
pinfo "Clean up old build"
cd $workspace && $xmakecmd clean
rm -rf $workspace/.config
rm -rf $workspace/.config.old
rm -rf $workspace/dl/*.patch
rm -rf $workspace/src/toolchain/*.git
rm -rf $workspace/src/toolchain/*.svn
rm -rf $workspace/generated/*

pinfo "Generating .config file"
#
# arch script
#
. $workspace/core/defconfigs/$arch/$arch-ci-build.sh

#
# toolchain and OS
#
set_os $os $workspace/.config
set_xcompiler $toolchain $workspace/.config
set_clibrary $clibrary $workspace/.config

#
# Now generating final .config
#

if [ ! "x$downloaddir" = "x" ]; then
	if [ -d $downloaddir ]; then
		echo "CONFIG_EMBTK_DOWNLOAD_DIR=\"$downloaddir\"" >> $workspace/.config
		rm -rf $downloaddir/*.patch
	fi
fi
cat $workspace/core/defconfigs/common.kconfig >> $workspace/.config

pinfo "Starting toolchain build"
set --
cd $workspace && $xmakecmd olddefconfig && $xmakecmd