summaryrefslogtreecommitdiff
path: root/Meta/generate-embedded-resource-assembly.sh
blob: bb1d61975392425150041f11df33a488bdac249f (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
#!/usr/bin/env bash

set -e

if [ -z "$1" ]; then
    echo "ERROR: No output file specified"
    exit 1
fi

OUTPUT_FILE="$1"
shift

rm -f "${OUTPUT_FILE}"

while (( "$#" >= 3 )); do
    SECTION_NAME="$1"
    INPUT_FILE="$2"
    FILE_SIZE="$3"

    {
        printf '    .file "%s"\n' "${OUTPUT_FILE}"
        printf '    .data\n'
        printf '    .section %s, "a", @progbits\n' "${SECTION_NAME}"
        printf '    .align 4\n'
        printf '    .globl %s\n' "${SECTION_NAME}_start"
        printf '    .type %s, @object\n' "${SECTION_NAME}_start"
        printf '    .size %s, 4\n' "${SECTION_NAME}_start"
        printf '%s:\n' "${SECTION_NAME}_start"
        printf '    .incbin "%s"\n' "${INPUT_FILE}"
        printf '    .section serenity_embedded_resource_info, "a", @progbits\n'
        printf '    .align 4\n'
        printf '    .globl %s\n' "${SECTION_NAME}_size"
        printf '    .type %s, @object\n' "${SECTION_NAME}_size"
        printf '    .size %s, 4\n' "${SECTION_NAME}_size"
        printf '%s:\n' "${SECTION_NAME}_size"
        printf '    .long %s\n' "${FILE_SIZE}"
        printf '\n'
    } >> "${OUTPUT_FILE}"
    shift 3
done