crosvm/seccomp/generate_constants.sh

58 lines
1.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Run this script to re-generate the seccomp/*/constants.json files for
# each architecture.
set -ex
cd "$(dirname "${BASH_SOURCE[0]}")/.."
MINIJAIL_DIR=$(realpath "third_party/minijail")
SECCOMP_DIR=$(realpath seccomp)
export SRC="$MINIJAIL_DIR"
# Create temporary directory for build artifacts and make sure it's cleaned up.
TMP_DIR="$(mktemp -d)"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
# Create bindings for each platform
for arch in "x86_64" "arm" "aarch64"; do
BUILD_DIR="$TMP_DIR/$arch"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
# Pick the right cross-compiler
if [ "$arch" = "x86_64" ]; then
export CC="gcc"
TARGET="x86_64-unknown-linux-gnu"
elif [ "$arch" = "arm" ]; then
export CC="arm-linux-gnueabihf-gcc"
TARGET="armv7-unknown-linux-gnueabihf"
elif [ "$arch" = "aarch64" ]; then
export CC="aarch64-linux-gnu-gcc"
TARGET="aarch64-unknown-linux-gnu"
fi
"$MINIJAIL_DIR/gen_constants.sh" "libconstants.gen.c"
"$MINIJAIL_DIR/gen_syscalls.sh" "libsyscalls.gen.c"
clang \
-target "$TARGET" \
-S \
-emit-llvm \
-I "$MINIJAIL_DIR" \
"libconstants.gen.c" \
"libsyscalls.gen.c"
"$MINIJAIL_DIR/tools/generate_constants_json.py" \
--output "$SECCOMP_DIR/$arch/constants.json" \
"libconstants.gen.ll" \
"libsyscalls.gen.ll"
done