Simplify bazel build.

Use variables instead of functions, and add wrappers for builtins.

Change-Id: If6e75efe35ce2fe754f2ed7421497bc1f5d47507
diff --git a/pw_build/pigweed.bzl b/pw_build/pigweed.bzl
index 4599c9b..d9a8be4 100644
--- a/pw_build/pigweed.bzl
+++ b/pw_build/pigweed.bzl
@@ -12,76 +12,63 @@
 # License for the specific language governing permissions and limitations under
 # the License.
 
-def reduced_size_copts():
-    """Standard compiler flags to reduce output binary size."""
+# Standard compiler flags to reduce output binary size.
+REDUCED_SIZE_COPTS = [
+    "-fno-common",
+    "-fno-exceptions",
+    "-ffunction-sections",
+    "-fdata-sections",
+    "-fno-rtti",
+]
 
-    return [
-        "-fno-common",
-        "-fno-exceptions",
-        "-ffunction-sections",
-        "-fdata-sections",
-        "-fno-rtti",
-    ]
+STRICT_WARNINGS_COPTS = [
+    "-Wall",
+    "-Wextra",
+    # Make all warnings errors, except for the exemptions below.
+    "-Werror",
+    "-Wno-error=cpp",  # preprocessor #warning statement
+    "-Wno-error=deprecated-declarations",  # [[deprecated]] attribute
+]
 
-def strict_warnings_copts():
-    return [
-        "-Wall",
-        "-Wextra",
+CPP17_COPTS = [
+    "-std=c++17",
+    # Allow uses of the register keyword, which may appear in C headers.
+    "-Wno-register",
+]
 
-        # Make all warnings errors, except for the exemptions below.
-        "-Werror",
-        "-Wno-error=cpp",  # preprocessor #warning statement
-        "-Wno-error=deprecated-declarations",  # [[deprecated]] attribute
-    ]
+INCLUDES_COPTS = [
+    "-Ipw_preprocessor/public",
+    "-Ipw_span/public",
+    "-Ipw_status/public",
+    "-Ipw_string/public",
+    "-Ipw_unit_test/public",
+]
 
-def cpp17_copts():
-    return [
-        "-std=c++17",
+PW_DEFAULT_COPTS = (
+    REDUCED_SIZE_COPTS +
+    STRICT_WARNINGS_COPTS +
+    CPP17_COPTS +
+    INCLUDES_COPTS
+)
 
-        # Allow uses of the register keyword, which may appear in C headers.
-        "-Wno-register",
-    ]
+PW_DEFAULT_LINKOPTS = []
 
-def includes_copts():
-    return [
-        "-Ipw_preprocessor/public",
-        "-Ipw_span/public",
-        "-Ipw_status/public",
-        "-Ipw_string/public",
-        "-Ipw_unit_test/public",
-    ]
+def _add_defaults(kwargs):
+    kwargs.setdefault("copts", [])
+    kwargs["copts"].extend(PW_DEFAULT_COPTS)
+    kwargs.setdefault("linkopts", [])
+    kwargs["linkopts"].extend(PW_DEFAULT_LINKOPTS)
 
-def pw_default_copts():
-    return (
-        reduced_size_copts() +
-        strict_warnings_copts() +
-        cpp17_copts() +
-        includes_copts()
-    )
+def pw_cc_binary(**kwargs):
+    _add_defaults(kwargs)
+    native.cc_binary(**kwargs)
 
-def pw_default_linkopts():
-    return []
+def pw_cc_library(**kwargs):
+    _add_defaults(kwargs)
+    native.cc_library(**kwargs)
 
-def pw_test(
-        name,
-        srcs,
-        deps = None,
-        **kwargs):
-    """Create a Pigweed test.
-
-    Args:
-      name: name of target to create
-      srcs: test source files
-      deps: dependencies of target
-    """
-
-    if not deps:
-        deps = []
-    deps.append("//pw_unit_test:main")
-
-    native.cc_test(
-        name = name,
-        srcs = srcs,
-        deps = deps,
-        **kwargs
-    )
+def pw_cc_test(**kwargs):
+    _add_defaults(kwargs)
+    kwargs.setdefault("deps", [])
+    kwargs["deps"].append("//pw_unit_test:main")
+    native.cc_test(**kwargs)
diff --git a/pw_preprocessor/BUILD b/pw_preprocessor/BUILD
index abdf61e..206521d 100644
--- a/pw_preprocessor/BUILD
+++ b/pw_preprocessor/BUILD
@@ -18,16 +18,13 @@
 
 load(
     "//pw_build:pigweed.bzl",
-    "pw_default_copts",
-    "pw_default_linkopts",
-    "pw_test",
+    "pw_cc_library",
+    "pw_cc_test",
 )
 
-cc_library(
+pw_cc_library(
     name = "pw_preprocessor",
     hdrs = glob(["public/pw_preprocessor/*.h"]),
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
 )
 
 TESTS = [
@@ -38,11 +35,9 @@
 ]
 
 [
-    pw_test(
+    pw_cc_test(
         name = t,
         srcs = [t + ".cc"],
-        copts = pw_default_copts(),
-        linkopts = pw_default_linkopts(),
         deps = ["//pw_preprocessor"],
     )
     for t in TESTS
diff --git a/pw_span/BUILD b/pw_span/BUILD
index 666d1a1..ea21100 100644
--- a/pw_span/BUILD
+++ b/pw_span/BUILD
@@ -18,23 +18,18 @@
 
 load(
     "//pw_build:pigweed.bzl",
-    "pw_default_copts",
-    "pw_default_linkopts",
-    "pw_test",
+    "pw_cc_library",
+    "pw_cc_test",
 )
 
-cc_library(
+pw_cc_library(
     name = "pw_span",
     srcs = [],
     hdrs = ["public/pw_span/span.h"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
 )
 
-pw_test(
+pw_cc_test(
     name = "span_test",
     srcs = ["span_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_span"],
 )
diff --git a/pw_status/BUILD b/pw_status/BUILD
index 717dede..e381e07 100644
--- a/pw_status/BUILD
+++ b/pw_status/BUILD
@@ -18,34 +18,27 @@
 
 load(
     "//pw_build:pigweed.bzl",
-    "pw_default_copts",
-    "pw_default_linkopts",
-    "pw_test",
+    "pw_cc_library",
+    "pw_cc_test",
 )
 
-cc_library(
+pw_cc_library(
     name = "pw_status",
     srcs = ["status.cc"],
     hdrs = [
         "public/pw_status/status.h",
         "public/pw_status/status_with_size.h",
     ],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
 )
 
-pw_test(
+pw_cc_test(
     name = "status_test",
     srcs = ["status_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_status"],
 )
 
-pw_test(
+pw_cc_test(
     name = "status_with_size_test",
     srcs = ["status_with_size_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_status"],
 )
diff --git a/pw_string/BUILD b/pw_string/BUILD
index e5edc2a..9b9f29b 100644
--- a/pw_string/BUILD
+++ b/pw_string/BUILD
@@ -18,12 +18,11 @@
 
 load(
     "//pw_build:pigweed.bzl",
-    "pw_default_copts",
-    "pw_default_linkopts",
-    "pw_test",
+    "pw_cc_library",
+    "pw_cc_test",
 )
 
-cc_library(
+pw_cc_library(
     name = "pw_string",
     srcs = [
         "format.cc",
@@ -34,8 +33,6 @@
         "public/pw_string/to_string.h",
         "public/pw_string/type_to_string.h",
     ],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = [
         "//pw_preprocessor",
         "//pw_span",
@@ -43,26 +40,20 @@
     ],
 )
 
-pw_test(
+pw_cc_test(
     name = "format_test",
     srcs = ["format_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_string"],
 )
 
-pw_test(
+pw_cc_test(
     name = "type_to_string_test",
     srcs = ["type_to_string_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_string"],
 )
 
-pw_test(
+pw_cc_test(
     name = "to_string_test",
     srcs = ["to_string_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_string"],
 )
diff --git a/pw_unit_test/BUILD b/pw_unit_test/BUILD
index 4f75733..31cb44d 100644
--- a/pw_unit_test/BUILD
+++ b/pw_unit_test/BUILD
@@ -18,24 +18,21 @@
 
 load(
     "//pw_build:pigweed.bzl",
-    "pw_default_copts",
-    "pw_default_linkopts",
-    "pw_test",
+    "pw_cc_library",
+    "pw_cc_test",
 )
 
-cc_library(
+pw_cc_library(
     name = "simple_printing_event_handler",
     srcs = [
         "public/pw_unit_test/event_handler.h",
         "public/pw_unit_test/simple_printing_event_handler.h",
         "simple_printing_event_handler.cc",
     ],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = ["//pw_preprocessor"],
 )
 
-cc_library(
+pw_cc_library(
     name = "main",
     srcs = [
         "framework.cc",
@@ -46,8 +43,6 @@
         "public/pw_unit_test/event_handler.h",
         "public/pw_unit_test/framework.h",
     ],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
     deps = [
         ":simple_printing_event_handler",
         "//pw_preprocessor",
@@ -55,9 +50,7 @@
     ],
 )
 
-pw_test(
+pw_cc_test(
     name = "framework_test",
     srcs = ["framework_test.cc"],
-    copts = pw_default_copts(),
-    linkopts = pw_default_linkopts(),
 )