xref: /aosp_15_r20/external/crosvm/jail/seccomp/generate_constants.sh (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors
3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard Worker# Run this script to re-generate the seccomp/*/constants.json files for
7*bb4ee6a4SAndroid Build Coastguard Worker# each architecture.
8*bb4ee6a4SAndroid Build Coastguard Worker
9*bb4ee6a4SAndroid Build Coastguard Workerset -ex
10*bb4ee6a4SAndroid Build Coastguard Workercd "$(dirname "${BASH_SOURCE[0]}")/.."
11*bb4ee6a4SAndroid Build Coastguard Worker
12*bb4ee6a4SAndroid Build Coastguard WorkerMINIJAIL_DIR=$(realpath "third_party/minijail")
13*bb4ee6a4SAndroid Build Coastguard WorkerSECCOMP_DIR=$(realpath seccomp)
14*bb4ee6a4SAndroid Build Coastguard Worker
15*bb4ee6a4SAndroid Build Coastguard Workerexport SRC="$MINIJAIL_DIR"
16*bb4ee6a4SAndroid Build Coastguard Worker
17*bb4ee6a4SAndroid Build Coastguard Worker# Create temporary directory for build artifacts and make sure it's cleaned up.
18*bb4ee6a4SAndroid Build Coastguard WorkerTMP_DIR="$(mktemp -d)"
19*bb4ee6a4SAndroid Build Coastguard Workercleanup() {
20*bb4ee6a4SAndroid Build Coastguard Worker    rm -rf "$TMP_DIR"
21*bb4ee6a4SAndroid Build Coastguard Worker}
22*bb4ee6a4SAndroid Build Coastguard Workertrap cleanup EXIT
23*bb4ee6a4SAndroid Build Coastguard Worker
24*bb4ee6a4SAndroid Build Coastguard Worker# Create bindings for each platform
25*bb4ee6a4SAndroid Build Coastguard Workerfor arch in "x86_64" "arm" "aarch64" "riscv64"; do
26*bb4ee6a4SAndroid Build Coastguard Worker    BUILD_DIR="$TMP_DIR/$arch"
27*bb4ee6a4SAndroid Build Coastguard Worker    mkdir -p "$BUILD_DIR"
28*bb4ee6a4SAndroid Build Coastguard Worker    cd "$BUILD_DIR"
29*bb4ee6a4SAndroid Build Coastguard Worker
30*bb4ee6a4SAndroid Build Coastguard Worker    # Pick the right cross-compiler
31*bb4ee6a4SAndroid Build Coastguard Worker    if [ "$arch" = "x86_64" ]; then
32*bb4ee6a4SAndroid Build Coastguard Worker        export CC="gcc"
33*bb4ee6a4SAndroid Build Coastguard Worker        TARGET="x86_64-unknown-linux-gnu"
34*bb4ee6a4SAndroid Build Coastguard Worker    elif [ "$arch" = "arm" ]; then
35*bb4ee6a4SAndroid Build Coastguard Worker        export CC="arm-linux-gnueabihf-gcc"
36*bb4ee6a4SAndroid Build Coastguard Worker        TARGET="armv7-unknown-linux-gnueabihf"
37*bb4ee6a4SAndroid Build Coastguard Worker    elif [ "$arch" = "aarch64" ]; then
38*bb4ee6a4SAndroid Build Coastguard Worker        export CC="aarch64-linux-gnu-gcc"
39*bb4ee6a4SAndroid Build Coastguard Worker        TARGET="aarch64-unknown-linux-gnu"
40*bb4ee6a4SAndroid Build Coastguard Worker    elif [ "$arch" = "riscv64" ]; then
41*bb4ee6a4SAndroid Build Coastguard Worker        export CC="riscv64-unknown-linux-gnu-gcc"
42*bb4ee6a4SAndroid Build Coastguard Worker        TARGET="riscv64-unknown-linux-gnu"
43*bb4ee6a4SAndroid Build Coastguard Worker    fi
44*bb4ee6a4SAndroid Build Coastguard Worker
45*bb4ee6a4SAndroid Build Coastguard Worker    "$MINIJAIL_DIR/gen_constants.sh" "libconstants.gen.c"
46*bb4ee6a4SAndroid Build Coastguard Worker    "$MINIJAIL_DIR/gen_syscalls.sh" "libsyscalls.gen.c"
47*bb4ee6a4SAndroid Build Coastguard Worker
48*bb4ee6a4SAndroid Build Coastguard Worker    clang \
49*bb4ee6a4SAndroid Build Coastguard Worker        -target "$TARGET" \
50*bb4ee6a4SAndroid Build Coastguard Worker        -S \
51*bb4ee6a4SAndroid Build Coastguard Worker        -emit-llvm \
52*bb4ee6a4SAndroid Build Coastguard Worker        -I "$MINIJAIL_DIR" \
53*bb4ee6a4SAndroid Build Coastguard Worker        "libconstants.gen.c" \
54*bb4ee6a4SAndroid Build Coastguard Worker        "libsyscalls.gen.c"
55*bb4ee6a4SAndroid Build Coastguard Worker
56*bb4ee6a4SAndroid Build Coastguard Worker    "$MINIJAIL_DIR/tools/generate_constants_json.py" \
57*bb4ee6a4SAndroid Build Coastguard Worker        --output "$SECCOMP_DIR/$arch/constants.json" \
58*bb4ee6a4SAndroid Build Coastguard Worker        "libconstants.gen.ll" \
59*bb4ee6a4SAndroid Build Coastguard Worker        "libsyscalls.gen.ll"
60*bb4ee6a4SAndroid Build Coastguard Workerdone
61