Add initial driver repo layout
Change-Id: I3282dea542e78580c50393dd49a67f3656a29d78
Reviewed-on: https://fuchsia-review.googlesource.com/c/template/driver/+/900366
Reviewed-by: Jiaming Li <lijiaming@google.com>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..134dccc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+out/
+.fuchsia-build-config.json
+
+# Ignore symlinks created by Bazel.
+bazel-*
+
+# compiledb information for IDE integration
+**/.cache/clangd
+compile_commands.json
+
+# Files created by IntelliJ IDE.
+.idea
+
+# Files created by VSCode.
+.vscode
+
+# Files created by cipd
+.cipd/
+.cipd_client
+tools/.versions/
+
+# Tools
+tools/bazel
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..9635f5f
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,7 @@
+[submodule "third_party/fuchsia-infra-bazel-rules"]
+ path = third_party/fuchsia-infra-bazel-rules
+ url = https://fuchsia.googlesource.com/fuchsia-infra-bazel-rules
+[submodule "third_party/googletest"]
+ path = third_party/googletest
+ url = https://fuchsia.googlesource.com/third_party/github.com/google/googletest
+ branch = sandbox/fuchsia_bazel_sdk
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..5e9bee1
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,46 @@
+# Copyright 2023 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.
+
+load(
+ "@fuchsia_infra//infra:infra.bzl",
+ "fuchsia_builder_group",
+ "fuchsia_test_group",
+ "fuchsia_tests",
+)
+
+common_test_deps = [
+]
+
+fuchsia_test_group(
+ name = "target_tests",
+ product_bundle = "core.x64",
+ deps = common_test_deps,
+)
+
+fuchsia_test_group(
+ name = "target_tests_asan",
+ asan_enabled = True,
+ product_bundle = "core.x64",
+ deps = common_test_deps,
+)
+
+fuchsia_tests(
+ name = "tests",
+ deps = [
+ ":target_tests",
+ ":target_tests_asan",
+ ],
+)
+
+# buildifier: leave-alone
+fuchsia_builder_group(
+ name = "infra",
+ build_only = [
+ ],
+ test_groups = [
+ ":tests",
+ ],
+ cipd_uploads = [
+ ],
+)
diff --git a/README.md b/README.md
index 8b90b74..84600fa 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-Fuchsia Open Source Template Repository
+Fuchsia Driver Template Repository
=======================================
-This repository is a template that we will use when creating new open source
+This repository is a template that we will use when creating new driver
repositories for Fuchsia.
diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel
new file mode 100644
index 0000000..5c77d00
--- /dev/null
+++ b/WORKSPACE.bazel
@@ -0,0 +1,69 @@
+# Copyright 2023 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.
+
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+http_archive(
+ name = "bazel_skylib",
+ sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728",
+ urls = [
+ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz",
+ "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz",
+ ],
+)
+
+load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
+
+bazel_skylib_workspace()
+
+local_repository(
+ name = "fuchsia_infra",
+ path = "third_party/fuchsia-infra-bazel-rules",
+)
+
+load("@fuchsia_infra//:workspace.bzl", "fuchsia_infra_workspace")
+load("@fuchsia_infra//cipd:defs.bzl", "cipd_repository", "cipd_tool_repository")
+
+fuchsia_infra_workspace()
+
+cipd_tool_repository(
+ name = "cipd_tool",
+)
+
+cipd_repository(
+ name = "fuchsia_sdk",
+ cipd_bin = "@cipd_tool//:cipd",
+ ensure_file = "//manifests:bazel_sdk.ensure",
+)
+
+load(
+ "@fuchsia_sdk//fuchsia:deps.bzl",
+ "rules_fuchsia_deps",
+)
+
+rules_fuchsia_deps()
+
+register_toolchains("@fuchsia_sdk//:fuchsia_toolchain_sdk")
+
+load(
+ "@fuchsia_sdk//fuchsia:clang.bzl",
+ "fuchsia_clang_repository",
+)
+
+fuchsia_clang_repository(
+ name = "fuchsia_clang",
+ cipd_bin = "@cipd_tool//:cipd",
+ cipd_ensure_file = "//manifests:clang.ensure",
+ sdk_root_label = "@fuchsia_sdk",
+)
+
+load("@fuchsia_clang//:defs.bzl", "register_clang_toolchains")
+
+register_clang_toolchains()
+
+# gTest.
+local_repository(
+ name = "com_google_googletest",
+ path = "third_party/googletest",
+)
diff --git a/fuchsia_env.toml b/fuchsia_env.toml
new file mode 100644
index 0000000..f85483e
--- /dev/null
+++ b/fuchsia_env.toml
@@ -0,0 +1,4 @@
+[fuchsia.config]
+build_out_dir = "bazel-out"
+build_config_path = ".fuchsia-build-config.json"
+
diff --git a/manifests/BUILD.bazel b/manifests/BUILD.bazel
new file mode 100644
index 0000000..1bbe1b8
--- /dev/null
+++ b/manifests/BUILD.bazel
@@ -0,0 +1,10 @@
+# Copyright 2023 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.
+
+exports_files(
+ glob([
+ "*.ensure",
+ "*.resolved",
+ ]),
+)
diff --git a/manifests/bazel_sdk.ensure b/manifests/bazel_sdk.ensure
new file mode 100644
index 0000000..62840d3
--- /dev/null
+++ b/manifests/bazel_sdk.ensure
@@ -0,0 +1,4 @@
+$ResolvedVersions bazel_sdk.resolved
+$VerifiedPlatform linux-amd64 mac-amd64
+fuchsia/sdk/core/fuchsia-bazel-rules/${os=linux}-${arch} version:14.20230811.1.1
+fuchsia/sdk/core/fuchsia-bazel-rules/${os=mac}-amd64 version:14.20230811.1.1
diff --git a/manifests/bazel_sdk.resolved b/manifests/bazel_sdk.resolved
new file mode 100644
index 0000000..933918a
--- /dev/null
+++ b/manifests/bazel_sdk.resolved
@@ -0,0 +1,10 @@
+# This file is auto-generated by 'cipd ensure-file-resolve'.
+# Do not modify manually. All changes will be overwritten.
+
+fuchsia/sdk/core/fuchsia-bazel-rules/linux-amd64
+ version:14.20230811.1.1
+ FMoDn9X0Ni9ZVynt7XfRFRkD5i1sEFrFLMwu0D6tUpoC
+
+fuchsia/sdk/core/fuchsia-bazel-rules/mac-amd64
+ version:14.20230811.1.1
+ ZE9Fp0kusiHYaCzkDnTTO4ydWEodKlMdpbhSUbTfpLIC
diff --git a/manifests/clang.ensure b/manifests/clang.ensure
new file mode 100644
index 0000000..7948d5c
--- /dev/null
+++ b/manifests/clang.ensure
@@ -0,0 +1,4 @@
+$ResolvedVersions clang.resolved
+$VerifiedPlatform linux-amd64 linux-arm64 mac-amd64 windows-amd64
+fuchsia/third_party/clang/${os=linux}-${arch} git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
+fuchsia/third_party/clang/${os=mac,windows}-amd64 git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
diff --git a/manifests/clang.resolved b/manifests/clang.resolved
new file mode 100644
index 0000000..ebc04ab
--- /dev/null
+++ b/manifests/clang.resolved
@@ -0,0 +1,18 @@
+# This file is auto-generated by 'cipd ensure-file-resolve'.
+# Do not modify manually. All changes will be overwritten.
+
+fuchsia/third_party/clang/linux-amd64
+ git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
+ 8GgFsbo_UN7dwHkm4deOaZOCzhjeFnRNWYvGejpK0csC
+
+fuchsia/third_party/clang/linux-arm64
+ git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
+ magCqaEyxKWsVF5NWlWMbANN4kbU3MjrkGOrjSlx_k8C
+
+fuchsia/third_party/clang/mac-amd64
+ git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
+ cQg24HbE0o9RkNuSKF1Gq4kuvYodtnGCxXnJwFy3bXsC
+
+fuchsia/third_party/clang/windows-amd64
+ git_revision:020d2fb7711d70e296f19d83565f8d93d2cfda71
+ 4TSVd8X2QqiDuOMJ3lnrlsnum-I5QfAPraVYGKMlNZ8C
diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh
new file mode 120000
index 0000000..d3a684a
--- /dev/null
+++ b/scripts/bootstrap.sh
@@ -0,0 +1 @@
+../third_party/fuchsia-infra-bazel-rules/scripts/bootstrap.sh
\ No newline at end of file
diff --git a/scripts/update_lockfiles.sh b/scripts/update_lockfiles.sh
new file mode 100755
index 0000000..d7f3fda
--- /dev/null
+++ b/scripts/update_lockfiles.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+# Copyright 2023 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
+
+REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/..
+readonly REPO_ROOT="${REPO_ROOT}"
+
+readonly MANIFEST_DIRECTORY="manifests"
+
+help() {
+ echo
+ echo "Script used to update all lockfiles in this repository"
+ echo
+ echo "Usage:"
+ echo " $(basename "$0") [<options>]"
+ echo
+ echo "Options:"
+ echo
+ echo " -h"
+ echo " Prints this help message"
+ echo
+}
+
+update_ensure_files_in_dir() {
+ local cipd_client=$1
+ local manifest_dir=$2
+ echo "Updating manifest files in ${manifest_dir}"
+ cd "${manifest_dir}"
+
+ for file in *.ensure; do
+ echo "Running cipd ensure-file resolve on ${file}"
+ "${cipd_client}" ensure-file-resolve -ensure-file "${file}"
+ done
+}
+
+main() {
+ while getopts ":h" opt; do
+ case ${opt} in
+ 'h' | '?')
+ help
+ exit 1
+ ;;
+ esac
+ done
+
+ cd "${REPO_ROOT}"
+
+ if command -v 'cipd' >/dev/null; then
+ CIPD_CLIENT="cipd"
+ elif command -v '.cipd_client' >/dev/null; then
+ CIPD_CLIENT=".cipd_client"
+ else
+ echo "Cannot find a cipd client"
+ exit 1
+ fi
+
+ update_ensure_files_in_dir $CIPD_CLIENT "${MANIFEST_DIRECTORY}"
+}
+
+main "$@"
diff --git a/third_party/fuchsia-infra-bazel-rules b/third_party/fuchsia-infra-bazel-rules
new file mode 160000
index 0000000..cee346b
--- /dev/null
+++ b/third_party/fuchsia-infra-bazel-rules
@@ -0,0 +1 @@
+Subproject commit cee346b317bea2a1f51cb1fc07894b2af3e5ca53
diff --git a/third_party/googletest b/third_party/googletest
new file mode 160000
index 0000000..89865ac
--- /dev/null
+++ b/third_party/googletest
@@ -0,0 +1 @@
+Subproject commit 89865ac025955f3c761c2d730a9081a78593cf83
diff --git a/tools/ffx b/tools/ffx
new file mode 120000
index 0000000..7716d0c
--- /dev/null
+++ b/tools/ffx
@@ -0,0 +1 @@
+../third_party/fuchsia-infra-bazel-rules/scripts/run_sdk_tool.sh
\ No newline at end of file
diff --git a/tools/fssh b/tools/fssh
new file mode 120000
index 0000000..7716d0c
--- /dev/null
+++ b/tools/fssh
@@ -0,0 +1 @@
+../third_party/fuchsia-infra-bazel-rules/scripts/run_sdk_tool.sh
\ No newline at end of file