Convert libLLVM to Android.bp

Test: m -j checkbuild
Test: external/llvm/android_test.sh
Test: compare symbols for out/host/linux-x86/lib64/libLLVM.so and
      prebuilts/sdk/tools/linux/lib64/libLLVM.so, only difference is removed
      RTTI symbols
Change-Id: Iead18820cf19c678365978ee3b13e1fd9336e305
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..e7c7691
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,249 @@
+llvm_defaults {
+    name: "llvm-defaults",
+
+    host_supported: true,
+    clang: true,
+
+    cflags: [
+        "-D_GNU_SOURCE",
+        "-D__STDC_LIMIT_MACROS",
+        "-D__STDC_CONSTANT_MACROS",
+        "-D__STDC_FORMAT_MACROS",
+        "-fomit-frame-pointer",
+        "-Wall",
+        "-W",
+        "-Wno-sign-compare",
+        "-Wno-unused-parameter",
+        "-Wno-maybe-uninitialized",
+        "-Wno-missing-field-initializers",
+        "-Wwrite-strings",
+        "-Werror",
+        "-Dsprintf=sprintf",
+    ],
+
+    cppflags: [
+        "-Wno-sign-promo",
+        "-std=c++11",
+    ],
+
+    include_dirs: ["external/llvm/include"],
+
+    target: {
+        android: {
+            cflags: [
+                "-finline-functions",
+            ],
+            cppflags: [
+                "-Woverloaded-virtual",
+            ],
+            include_dirs: ["external/llvm/device/include"],
+        },
+        host: {
+            include_dirs: ["external/llvm/host/include"],
+            cppflags: [
+                "-fno-rtti",
+                "-fno-exceptions",
+            ],
+        },
+        windows: {
+            enabled: true,
+            // Disable certain warnings for use with mingw.
+            // We also must undefine WIN32_LEAN_AND_MEAN, since it is being passed globally
+            // on the command line, and LLVM defines this internally itself.
+            cflags: [
+                "-Wno-array-bounds",
+                "-Wno-comment",
+                "-UWIN32_LEAN_AND_MEAN",
+            ],
+
+            host_ldlibs: ["-luuid"],
+        },
+        linux: {
+            cppflags: ["-Woverloaded-virtual"],
+
+            // Add on ncurses to have support for terminfo
+            host_ldlibs: [
+                "-lncurses",
+                "-lgcc_s",
+            ],
+        },
+        darwin: {
+            cppflags: [
+                "-Wno-deprecated-declarations",
+                "-Woverloaded-virtual",
+            ],
+
+            // Add on ncurses to have support for terminfo
+            host_ldlibs: ["-lncurses"],
+        },
+    },
+}
+
+cc_defaults {
+    name: "llvm-generated-headers",
+    generated_headers: [
+        "llvm-gen-attributes",
+        "llvm-gen-intrinsics",
+    ],
+}
+
+llvm_tblgen {
+    name: "llvm-gen-attributes",
+    in: "include/llvm/IR/Attributes.td",
+    outs: ["llvm/IR/Attributes.inc"],
+}
+
+llvm_tblgen {
+    name: "llvm-gen-intrinsics",
+    in: "include/llvm/IR/Intrinsics.td",
+    outs: ["llvm/IR/Intrinsics.gen"],
+}
+
+// LLVM shared library build
+
+llvm_arm_static_libraries = [
+    "libLLVMARMCodeGen",
+    "libLLVMARMAsmParser",
+    "libLLVMARMAsmPrinter",
+    "libLLVMARMInfo",
+    "libLLVMARMDesc",
+    "libLLVMARMDisassembler",
+]
+
+llvm_x86_static_libraries = [
+    "libLLVMX86CodeGen",
+    "libLLVMX86Info",
+    "libLLVMX86Desc",
+    "libLLVMX86AsmParser",
+    "libLLVMX86AsmPrinter",
+    "libLLVMX86Utils",
+    "libLLVMX86Disassembler",
+]
+
+llvm_mips_static_libraries = [
+    "libLLVMMipsCodeGen",
+    "libLLVMMipsInfo",
+    "libLLVMMipsDesc",
+    "libLLVMMipsAsmParser",
+    "libLLVMMipsAsmPrinter",
+    "libLLVMMipsDisassembler",
+]
+
+llvm_aarch64_static_libraries = [
+    "libLLVMAArch64CodeGen",
+    "libLLVMAArch64Info",
+    "libLLVMAArch64Desc",
+    "libLLVMAArch64AsmParser",
+    "libLLVMAArch64AsmPrinter",
+    "libLLVMAArch64Utils",
+    "libLLVMAArch64Disassembler",
+]
+
+llvm_cc_shared_library {
+    host_supported: true,
+    name: "libLLVM",
+    defaults: ["llvm-defaults"],
+
+    whole_static_libs: [
+        // pre static libraries
+        "libLLVMLinker",
+        "libLLVMipo",
+        "libLLVMDebugInfoDWARF",
+        "libLLVMDebugInfoPDB",
+        "libLLVMSymbolize",
+        "libLLVMIRReader",
+        "libLLVMBitWriter",
+        "libLLVMBitReader",
+
+        // post static libraries
+        "libLLVMLTO",
+        "libLLVMAsmPrinter",
+        "libLLVMSelectionDAG",
+        "libLLVMCodeGen",
+        "libLLVMDebugInfoCodeView",
+        "libLLVMObject",
+        "libLLVMScalarOpts",
+        "libLLVMInstCombine",
+        "libLLVMInstrumentation",
+        "libLLVMTransformObjCARC",
+        "libLLVMTransformUtils",
+        "libLLVMAnalysis",
+        "libLLVMTarget",
+        "libLLVMGlobalISel",
+        "libLLVMMCDisassembler",
+        "libLLVMMC",
+        "libLLVMMCParser",
+        "libLLVMCore",
+        "libLLVMAsmParser",
+        "libLLVMOption",
+        "libLLVMSupport",
+        "libLLVMVectorize",
+        "libLLVMProfileData",
+        "libLLVMProfileDataCoverage",
+        "libLLVMLibDriver",
+    ],
+
+    target: {
+        host: {
+            // Host build pulls in all ARM, Mips, X86 components.
+           whole_static_libs: [
+                "libLLVMExecutionEngine",
+                "libLLVMRuntimeDyld",
+                "libLLVMMCJIT",
+                "libLLVMOrcJIT",
+            ] + llvm_arm_static_libraries +
+                llvm_aarch64_static_libraries +
+                llvm_mips_static_libraries +
+                llvm_x86_static_libraries,
+        },
+        windows: {
+            host_ldlibs: [
+                "-limagehlp",
+                "-lpsapi",
+                "-lole32",
+                "-lversion",
+            ],
+        },
+        darwin: {
+            host_ldlibs: [
+                "-ldl",
+                "-lpthread",
+            ],
+        },
+        linux: {
+            host_ldlibs: [
+                "-ldl",
+                "-lpthread",
+            ],
+        },
+        android_arm: {
+            whole_static_libs: llvm_arm_static_libraries,
+        },
+        android_x86: {
+            whole_static_libs: llvm_x86_static_libraries +
+                llvm_arm_static_libraries +
+                llvm_aarch64_static_libraries,
+        },
+        android_x86_64: {
+            whole_static_libs: llvm_x86_static_libraries +
+                llvm_arm_static_libraries +
+                llvm_aarch64_static_libraries,
+        },
+        android_mips: {
+            whole_static_libs: llvm_mips_static_libraries,
+        },
+        android_mips64: {
+            whole_static_libs: llvm_mips_static_libraries,
+        },
+        android_arm64: {
+            whole_static_libs: llvm_aarch64_static_libraries +
+                llvm_arm_static_libraries,
+        },
+    },
+}
+
+subdirs = [
+    "soong",
+    "lib/*",
+    "utils/*",
+]