blob: e2f80a5d9f048193749827b783050d30d2993bdd [file] [log] [blame]
Yegor Timoshenkoc2e49412018-10-07 01:58:27 +00001#!/usr/bin/env bash
Patrick Georgi1afe2862020-05-10 17:34:15 +02002# SPDX-License-Identifier: BSD-2-Clause
Martin Roth29535842015-11-05 07:51:28 -07003
4if [ -z "$1" ] || [ -z "$2" ]; then
Bartek Pastudzki69a88dd2018-04-06 12:40:09 +02005 printf "Usage: %s <output file> \"<microcode .h files>\"\\n" "$0"
Martin Roth29535842015-11-05 07:51:28 -07006fi
7
8OUTFILE=$1
9TMPFILE=$(mktemp microcode_XXXX)
10cat > "${TMPFILE}.c" << EOF
11#include <stdio.h>
12unsigned int microcode[] = {
13EOF
14
Bartek Pastudzki69a88dd2018-04-06 12:40:09 +020015include_file() {
Werner Zehabaa1de2020-04-21 10:52:48 +020016 if [ "${1: -4}" == ".inc" ]; then
Werner Zeh51719602020-04-21 11:16:10 +020017 sed '/^;/d' <"$1" | awk '{gsub( /h.*$/, "", $2 ); print "0x" $2 ","; }' \
Werner Zehabaa1de2020-04-21 10:52:48 +020018 >> "${TMPFILE}.c"
19 else
20 echo "#include \"$1\"" >> "${TMPFILE}.c"
21 fi
Bartek Pastudzki69a88dd2018-04-06 12:40:09 +020022}
23
Werner Zeh21530bd2020-04-21 11:03:11 +020024for UCODE in ${@:2}; do
Werner Zehabaa1de2020-04-21 10:52:48 +020025 if [ -d "$UCODE" ]; then
26 for f in "$UCODE/"*.inc
27 do
28 include_file "$f"
29 done
30 else
31 include_file "$UCODE"
32 fi
Martin Roth29535842015-11-05 07:51:28 -070033done
34
35cat >> "${TMPFILE}.c" << EOF
36};
37int main(void)
38{
39 FILE *f = fopen("$OUTFILE", "wb");
40 fwrite(microcode, sizeof(microcode), 1, f);
41 fclose(f);
42 return 0;
43}
44EOF
45
46gcc -o "$TMPFILE" "${TMPFILE}.c"
Marshall Dawson1bc2b0b2016-06-25 10:17:07 -060047[ -f "${TMPFILE}.exe" ] && mv "${TMPFILE}.exe" "$TMPFILE"
Martin Roth29535842015-11-05 07:51:28 -070048"./$TMPFILE"
49rm "$TMPFILE" "${TMPFILE}.c"