blob: a808728f9ed61d40a24b4cc741741c0a331a88fa [file] [log] [blame] [edit]
#!/usr/bin/env bash
# Copyright 2021 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.
# TODO(pascallouis): better automate this.
set -euxo pipefail
if [ ! -x "${FUCHSIA_DIR}" ]; then
echo "error: did you fx exec? missing \$FUCHSIA_DIR" 1>&2
exit 1
fi
if [ ! -x "${FUCHSIA_BUILD_DIR}" ]; then
echo "error: did you fx exec? missing \$FUCHSIA_BUILD_DIR" 1>&2
exit 1
fi
pushd "$FUCHSIA_DIR"
FIDLC=$( fx list-build-artifacts --expect-one --name fidlc tools )
FIDLGEN_GO=$( fx list-build-artifacts --expect-one --name fidlgen_go tools )
fx ninja -C "${FUCHSIA_BUILD_DIR}" $FIDLC $FIDLGEN_GO
tmpout=$(mktemp -d 2>/dev/null || mktemp -d -t 'tmpout')
ir_file="${tmpout}/out.json"
trap 'rm -rf -- "${tmpout}" && popd > /dev/null' EXIT
declare -r repo=third_party/go
# Parameters:
# $1 = directory where fidl file is found.
# $2 = output of subdirectory of syscall/zx
# $3..n = additional arguments needed to generate this target.
function generate_file {
declare -r source_dir=$1
shift
declare -r package_dir=$1
shift
declare -r file=src/syscall/zx/"${package_dir}"/impl.go
declare -r out_file=$repo/$file
declare -r copyright_line=$(git -C ${repo} show HEAD:"${file}" | grep -E "^// Copyright [0-9]+" || \
echo "// Copyright $(date +%Y) The Fuchsia Authors. All rights reserved.")
"${FUCHSIA_BUILD_DIR}"/$FIDLC \
--available fuchsia:HEAD \
--json "${ir_file}" \
"$@" \
--files "${source_dir}"/*.fidl
"${FUCHSIA_BUILD_DIR}"/$FIDLGEN_GO \
-json "${ir_file}" \
-output-impl "${tmpout}/impl.go"
declare -r tmpfile=$(mktemp "${tmpout}/tmp.XXXXXXXX")
echo "${copyright_line}" > "${tmpfile}"
cat << EOF >> "${tmpfile}"
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Code generated by third_party/go/regen-fidl; DO NOT EDIT.
EOF
cat "${tmpout}"/impl.go >> "${tmpfile}"
perl -pi -e 's|^// Code generated by fidlgen; DO NOT EDIT.\n$||' "${tmpfile}"
perl -pi -e 's|fidl/fuchsia/|syscall/zx/|' "${tmpfile}"
./prebuilt/third_party/go/linux-x64/bin/gofmt -s -w "${tmpfile}"
mv -- "${tmpfile}" "${out_file}"
}
# Ensure we don't leave stale files around.
find $repo -path '*src/syscall/zx/*/impl.go' -exec rm {} \;
generate_file {third_party/go/src/syscall/zx/,}fidl/internal/bindingstest \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl
generate_file sdk/fidl/fuchsia.unknown unknown \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl
generate_file sdk/fidl/fuchsia.io io \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.unknown/*.fidl
generate_file sdk/fidl/fuchsia.net net
generate_file sdk/fidl/fuchsia.net.name net/name \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.net/*.fidl
generate_file sdk/fidl/fuchsia.posix posix
generate_file sdk/fidl/fuchsia.posix.socket posix/socket \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.unknown/*.fidl \
--files sdk/fidl/fuchsia.net/*.fidl \
--files sdk/fidl/fuchsia.hardware.network/*.fidl \
--files sdk/fidl/fuchsia.net.interfaces/*.fidl \
--files sdk/fidl/fuchsia.posix/*.fidl
generate_file sdk/fidl/fuchsia.hardware.network hardware/network \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.net/*.fidl
generate_file sdk/fidl/fuchsia.net.interfaces net/interfaces \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.net/*.fidl \
--files sdk/fidl/fuchsia.hardware.network/*.fidl
generate_file sdk/fidl/fuchsia.mem mem \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl
generate_file sdk/fidl/fuchsia.diagnostics diagnostics \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl
generate_file sdk/fidl/fuchsia.logger logger \
--files zircon/vdso/zx_common.fidl zircon/vdso/rights.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl \
--files sdk/fidl/fuchsia.diagnostics/*.fidl