linker: extract defaults and source files

Move source files to filegroup and extract c/ldflags and
version-script to linker_defaults.

Bug: http://b/71494052
Test: make
Change-Id: Ic82885e1c006f91a8446978fabd214f87cd20510
diff --git a/linker/Android.bp b/linker/Android.bp
index b809f76..1e14ee3 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -66,8 +66,8 @@
     include_dirs: ["bionic/libc"],
 }
 
-cc_binary {
-    defaults: ["linux_bionic_supported"],
+filegroup {
+    name: "linker_sources",
     srcs: [
         "dlfcn.cpp",
         "linker.cpp",
@@ -89,49 +89,74 @@
         "linker_utils.cpp",
         "rt.cpp",
     ],
+}
 
+filegroup {
+    name: "linker_sources_arm",
+    srcs: [
+        "arch/arm/begin.S",
+        "linker_exidx_static.c",
+    ],
+}
+
+filegroup {
+    name: "linker_sources_arm64",
+    srcs: [
+        "arch/arm64/begin.S",
+    ],
+}
+
+filegroup {
+    name: "linker_sources_x86",
+    srcs: [
+        "arch/x86/begin.S",
+    ],
+}
+
+filegroup {
+    name: "linker_sources_x86_64",
+    srcs: [
+        "arch/x86_64/begin.S",
+    ],
+}
+
+filegroup {
+    name: "linker_sources_mips",
+    srcs: [
+        "arch/mips/begin.S",
+        "linker_mips.cpp",
+    ],
+}
+
+filegroup {
+    name: "linker_sources_mips64",
+    srcs: [
+        "arch/mips64/begin.S",
+        "linker_mips.cpp",
+    ],
+}
+
+filegroup {
+    name: "linker_version_script",
+    srcs: ["linker.generic.map"],
+}
+
+filegroup {
+    name: "linker_version_script_arm",
+    srcs: ["linker.arm.map"],
+}
+
+cc_defaults {
+    name: "linker_defaults",
     arch: {
         arm: {
-            srcs: [
-                "arch/arm/begin.S",
-                "linker_exidx_static.c",
-            ],
-
             cflags: ["-D__work_around_b_24465209__"],
-            version_script: "linker.arm.map",
-        },
-        arm64: {
-            srcs: ["arch/arm64/begin.S"],
-            version_script: "linker.generic.map",
         },
         x86: {
-            srcs: ["arch/x86/begin.S"],
             cflags: ["-D__work_around_b_24465209__"],
-            version_script: "linker.generic.map",
-        },
-        x86_64: {
-            srcs: ["arch/x86_64/begin.S"],
-            version_script: "linker.generic.map",
-        },
-        mips: {
-            srcs: [
-                "arch/mips/begin.S",
-                "linker_mips.cpp",
-            ],
-            version_script: "linker.generic.map",
-        },
-        mips64: {
-            srcs: [
-                "arch/mips64/begin.S",
-                "linker_mips.cpp",
-            ],
-            version_script: "linker.generic.map",
         },
     },
 
-    // We need to access Bionic private headers in the linker.
-    include_dirs: ["bionic/libc"],
-
     // -shared is used to overwrite the -Bstatic and -static
     // flags triggered by LOCAL_FORCE_STATIC_EXECUTABLE.
     // This dynamic linker is actually a shared object linked with static libraries.
@@ -185,6 +210,57 @@
     // just for this module
     nocrt: true,
 
+    static_executable: true,
+
+    // Leave the symbols in the shared library so that stack unwinders can produce
+    // meaningful name resolution.
+    strip: {
+        keep_symbols: true,
+    },
+
+    // Insert an extra objcopy step to add prefix to symbols. This is needed to prevent gdb
+    // looking up symbols in the linker by mistake.
+    prefix_symbols: "__dl_",
+
+    sanitize: {
+        hwaddress: false,
+    },
+}
+
+cc_binary {
+    defaults: ["linux_bionic_supported", "linker_defaults"],
+    srcs: [ ":linker_sources" ],
+
+    arch: {
+        arm: {
+            srcs: [ ":linker_sources_arm" ],
+            version_script: ":linker_version_script_arm",
+        },
+        arm64: {
+            srcs: [":linker_sources_arm64"],
+            version_script: ":linker_version_script",
+        },
+        x86: {
+            srcs: [":linker_sources_x86"],
+            version_script: ":linker_version_script",
+        },
+        x86_64: {
+            srcs: [":linker_sources_x86_64"],
+            version_script: ":linker_version_script",
+        },
+        mips: {
+            srcs: [":linker_sources_mips"],
+            version_script: ":linker_version_script",
+        },
+        mips64: {
+            srcs: [":linker_sources_mips64"],
+            version_script: ":linker_version_script",
+        },
+    },
+
+    // We need to access Bionic private headers in the linker.
+    include_dirs: ["bionic/libc"],
+
     static_libs: [
         "libc_nomalloc",
         "libm",
@@ -202,7 +278,6 @@
         // to overwrite any other malloc implementations by other static libraries.
         "liblinker_malloc",
     ],
-    static_executable: true,
 
     name: "linker",
     symlinks: ["linker_asan"],
@@ -218,20 +293,6 @@
         },
     },
     compile_multilib: "both",
-
-    // Leave the symbols in the shared library so that stack unwinders can produce
-    // meaningful name resolution.
-    strip: {
-        keep_symbols: true,
-    },
-
-    // Insert an extra objcopy step to add prefix to symbols. This is needed to prevent gdb
-    // looking up symbols in the linker by mistake.
-    prefix_symbols: "__dl_",
-
-    sanitize: {
-        hwaddress: false,
-    },
 }
 
 cc_library {