Improve gn rules to allow linking

Change-Id: Ifb3566f5d89926b56828a1ce093d913df6e99239
diff --git a/BUILD.gn b/BUILD.gn
index a074def..47e682e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -12,4 +12,10 @@
   include_dirs = [
     "//third_party/abseil-cpp",
   ]
+
+  cflags = [
+    # Google style does not use unsigned integers, though STL containers
+    # have unsigned types.
+    "-Wno-sign-compare",
+  ]
 }
diff --git a/absl/base/BUILD.gn b/absl/base/BUILD.gn
index 4440f8e..d092553 100644
--- a/absl/base/BUILD.gn
+++ b/absl/base/BUILD.gn
@@ -14,3 +14,31 @@
   ]
 }
 
+
+static_library("base") {
+  public_configs = ["//third_party/abseil-cpp:abseil_config"]
+
+  sources = [
+    "call_once.h",
+    "casts.h",
+    "internal/atomic_hook.h",
+    "internal/cycleclock.cc",
+    "internal/cycleclock.h",
+    "internal/low_level_scheduling.h",
+    "internal/per_thread_tls.h",
+    "internal/raw_logging.cc",
+    "internal/raw_logging.h",
+    "internal/spinlock.cc",
+    "internal/spinlock.h",
+    "internal/sysinfo.cc",
+    "internal/sysinfo.h",
+    "internal/thread_identity.cc",
+    "internal/thread_identity.h",
+    "internal/tsan_mutex_interface.h",
+    "internal/unscaledcycleclock.cc",
+    "internal/unscaledcycleclock.h",
+    "log_severity.h",
+  ]
+
+  deps = [":core_headers"]
+}
diff --git a/absl/strings/BUILD.gn b/absl/strings/BUILD.gn
index 8f9b8dd..c889b5e 100644
--- a/absl/strings/BUILD.gn
+++ b/absl/strings/BUILD.gn
@@ -6,13 +6,55 @@
   public_configs = ["//third_party/abseil-cpp:abseil_config"]
 
   sources = [
-    "escaping.h",
+    "ascii.cc",
+    "ascii.h",
+    "charconv.cc",
+    "charconv.h",
     "escaping.cc",
-    "str_cat.h",
+    "escaping.h",
+    "internal/charconv_bigint.cc",
+    "internal/charconv_bigint.h",
+    "internal/charconv_parse.cc",
+    "internal/charconv_parse.h",
+    "internal/memutil.cc",
+    "internal/memutil.h",
+    "internal/stl_type_traits.h",
+    "internal/str_join_internal.h",
+    "internal/str_split_internal.h",
+    "match.cc",
+    "match.h",
+    "numbers.cc",
+    "numbers.h",
     "str_cat.cc",
+    "str_cat.h",
+    "string_view.cc",
+    "string_view.h",
+    "strip.h",
+    "str_join.h",
+    "str_replace.cc",
+    "str_replace.h",
+    "str_split.cc",
+    "str_split.h",
+    "substitute.cc",
+    "substitute.h",
   ]
 
   deps = [
-    "//third_party/abseil-cpp/absl/base:core_headers",
+    ":internal",
+    "//third_party/abseil-cpp/absl/base:base",
+  ]
+}
+
+static_library("internal") {
+  public_configs = ["//third_party/abseil-cpp:abseil_config"]
+
+  sources = [
+    "internal/bits.h",
+    "internal/char_map.h",
+    "internal/ostringstream.cc",
+    "internal/ostringstream.h",
+    "internal/resize_uninitialized.h",
+    "internal/utf8.cc",
+    "internal/utf8.h",
   ]
 }