blob: d52ef44af09cdd69d51e655d1ffe2926544ebf68 [file] [log] [blame]
#!/usr/bin/env bash
# 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=host_x64/fidlc
FIDLGEN_GO=host_x64/fidlgen_go
fx build zircon/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
# 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 {
local source_dir=$1
shift
local package_dir=$1
shift
out_file=third_party/go/src/syscall/zx/"${package_dir}"/impl.go
copyright_line=$(grep -E "^// Copyright [0-9]+" "${out_file}" || \
echo "// Copyright $(date +%Y) The Fuchsia Authors. All rights reserved.")
"${FUCHSIA_BUILD_DIR}"/$FIDLC \
--json "${ir_file}" \
"$@" \
--files "${source_dir}"/*.fidl
"${FUCHSIA_BUILD_DIR}"/$FIDLGEN_GO \
-json "${ir_file}" \
-output-impl "${tmpout}/impl.go"
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.
// +build fuchsia
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}"
}
generate_file {third_party/go/src/syscall/zx/,}fidl/internal/bindingstest \
--experimental enable_handle_rights \
--files zircon/vdso/zx_common.fidl
generate_file sdk/fidl/fuchsia.mem mem \
--files zircon/vdso/zx_common.fidl
generate_file sdk/fidl/fuchsia.io io \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl
generate_file sdk/fidl/fuchsia.posix posix
generate_file sdk/fidl/fuchsia.posix.socket posix/socket \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.posix/*.fidl \
--files sdk/fidl/fuchsia.net/*.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl \
--files sdk/fidl/fuchsia.io/*.fidl
generate_file sdk/fidl/fuchsia.hardware.ethernet hardware/ethernet \
--files zircon/vdso/zx_common.fidl
generate_file sdk/fidl/fuchsia.hardware.network hardware/network \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.net/*.fidl
generate_file sdk/fidl/fuchsia.net.name net/name \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.net/*.fidl
generate_file sdk/fidl/fuchsia.net net
generate_file sdk/fidl/fuchsia.diagnostics diagnostics \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl
generate_file sdk/fidl/fuchsia.logger logger \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl \
--files sdk/fidl/fuchsia.diagnostics/*.fidl
generate_file sdk/fidl/fuchsia.net.stack net/stack \
--files zircon/vdso/zx_common.fidl \
--files sdk/fidl/fuchsia.mem/*.fidl \
--files sdk/fidl/fuchsia.io/*.fidl \
--files sdk/fidl/fuchsia.diagnostics/*.fidl \
--files sdk/fidl/fuchsia.logger/*.fidl \
--files sdk/fidl/fuchsia.net/*.fidl \
--files sdk/fidl/fuchsia.net.name/*.fidl \
--files sdk/fidl/fuchsia.hardware.ethernet/*.fidl \
--files sdk/fidl/fuchsia.hardware.network/*.fidl \
--files sdk/fidl/fuchsia.posix/*.fidl \
--files sdk/fidl/fuchsia.posix.socket/*.fidl