blob: b60fa1db66e76e06086902bd7b2f989c7ef1c564 [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -e
#
# Requires $FUCHSIA_DIR to be set
#
if [[ -z "$FUCHSIA_DIR" ]] ; then
echo "FUCHSIA_DIR not set."
exit 1
fi
#
# Go to the directory this script lives in
#
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd $SCRIPT_DIR
#
# Clean
#
rm -f wrapper.h
#
# All relative to compute/ dir
#
readonly COMPUTE_DIR=$FUCHSIA_DIR/src/graphics/lib/compute
readonly VULKAN_DIR=$FUCHSIA_DIR/prebuilt/third_party/vulkansdk/linux/x86_64/include
#
# Import <spinel/*.h>
#
readonly SPINEL_DIR=$COMPUTE_DIR/spinel/include
cd $SPINEL_DIR
for header in $(find spinel -type f); do
echo "#include <${header}>" >> $SCRIPT_DIR/wrapper.h
done
#
# Import <spinel/platforms/vk/*.h>
#
readonly SPINEL_VK_DIR=$COMPUTE_DIR/spinel/platforms/vk/include
cd $SPINEL_VK_DIR
for header in $(find spinel -type f); do
echo "#include <${header}>" >> $SCRIPT_DIR/wrapper.h
done
#
# Import "spinel_vk_rs.h"
#
echo "#include <spinel-rs-sys/spinel_vk_rs.h>" >> $SCRIPT_DIR/wrapper.h
#
# Allow only "spinel_xxx" symbols and "SPN_xxx" defines.
#
ALLOWLIST="(spinel|SPN)_.*$"
#
# Generate bindings
#
cd $SCRIPT_DIR
bindgen wrapper.h \
--allowlist-function "$ALLOWLIST" \
--allowlist-type "$ALLOWLIST" \
--allowlist-var "$ALLOWLIST" \
--no-layout-tests \
--constified-enum-module "$ALLOWLIST" \
-o src/lib.rs \
-- \
-I $SPINEL_DIR \
-I $SPINEL_VK_DIR \
-I $COMPUTE_DIR \
-I $VULKAN_DIR
TMP="$(mktemp)"
#
# 1. Prepend Copyright comment
# 2. #[allow] for various warnings we don't care about
#
cat >> "$TMP" <<EOF
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
EOF
cat src/lib.rs >> "$TMP"
mv "$TMP" src/lib.rs
rustfmt src/lib.rs
#
# Clean
#
rm wrapper.h