Define Linux clang target as toolchain

This change configures the Linux clang -Og target as a toolchain with
args. To support this, all Pigweed variables from pw_vars_default are
made into build args, defined within their respective modules.

The Linux clang target/toolchain is the only one that currently works.
Pigweed's other targets will be ported in later changes.

Change-Id: I051e29fde7577e41a3184c37031a4e04936404e1
diff --git a/pw_boot_armv7m/BUILD.gn b/pw_boot_armv7m/BUILD.gn
index 01bbc1d..7857557 100644
--- a/pw_boot_armv7m/BUILD.gn
+++ b/pw_boot_armv7m/BUILD.gn
@@ -19,16 +19,25 @@
 import("$dir_pw_build/linker_script.gni")
 import("$dir_pw_build/target_types.gni")
 import("$dir_pw_docgen/docs.gni")
-if (dir_pw_boot_backend == dir_pw_boot_armv7m) {
+declare_args() {
+  # TODO(frolv): Move this into the pw_boot module.
+  pw_boot_BACKEND = ""
+
+  # Module configuration options for pw_boot_armv7m.
+  pw_boot_armv7m_CONFIG = {
+    # C Preprocessor defines used for linker script configuration.
+    defines = []
+  }
+}
+
+if (pw_boot_BACKEND == dir_pw_boot_armv7m) {
   config("default_config") {
     include_dirs = [ "public" ]
   }
 
   pw_linker_script("armv7m_linker_script") {
-    # pw_boot_armv7m_config is a scope provided by the target.
-    assert(defined(pw_boot_armv7m_config),
-           "pw_boot_armv7m depends on pw_boot_armv7m_config being defined!")
-    defines = pw_boot_armv7m_config.defines
+    # pw_boot_armv7m_CONFIG is a scope provided by the target.
+    defines = pw_boot_armv7m_CONFIG.defines
     linker_script = "basic_armv7m.ld"
   }