[gn build] Add build files for clang, clang-offload-bundler, and clang/lib/Headers
authorNico Weber <nicolasweber@gmx.de>
Sat, 22 Dec 2018 03:49:44 +0000 (03:49 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sat, 22 Dec 2018 03:49:44 +0000 (03:49 +0000)
With this, the GN build can build clang!

Differential Revision: https://reviews.llvm.org/D55981

llvm-svn: 349991

llvm/utils/gn/secondary/BUILD.gn
llvm/utils/gn/secondary/clang/lib/Headers/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/clang/tools/clang-offload-bundler/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn [new file with mode: 0644]

index 408c6a4..9aff838 100644 (file)
@@ -1,20 +1,6 @@
 group("default") {
   deps = [
-    "//clang/lib/ARCMigrate",
-    "//clang/lib/AST",
-    "//clang/lib/ASTMatchers",
-    "//clang/lib/CodeGen",
-    "//clang/lib/CrossTU",
-    "//clang/lib/Driver",
-    "//clang/lib/Frontend",
-    "//clang/lib/Frontend/Rewrite",
-    "//clang/lib/FrontendTool",
-    "//clang/lib/Index",
-    "//clang/lib/Parse",
-    "//clang/lib/Serialization",
-    "//clang/lib/StaticAnalyzer/Checkers",
-    "//clang/lib/StaticAnalyzer/Core",
-    "//clang/lib/StaticAnalyzer/Frontend",
+    ":clang",
     "//clang/tools/clang-format",
     "//lld/test",
     "//llvm/tools/llvm-cat",
@@ -50,6 +36,11 @@ group("default") {
 # update symlinks (in particular, on Windows it doesn't copy the new lld to its
 # new locations).
 # That seems simpler, more explicit, and good enough.
+group("clang") {
+  deps = [
+    "//clang/tools/driver:symlinks",
+  ]
+}
 group("lld") {
   deps = [
     "//lld/tools/lld:symlinks",
diff --git a/llvm/utils/gn/secondary/clang/lib/Headers/BUILD.gn b/llvm/utils/gn/secondary/clang/lib/Headers/BUILD.gn
new file mode 100644 (file)
index 0000000..6e9be8a
--- /dev/null
@@ -0,0 +1,163 @@
+import("//clang/utils/TableGen/clang_tablegen.gni")
+import("//llvm/version.gni")
+
+# Generate arm_neon.h
+clang_tablegen("arm_neon") {
+  args = [ "-gen-arm-neon" ]
+  td_file = "//clang/include/clang/Basic/arm_neon.td"
+  output_name = "arm_neon.h"
+}
+
+# Generate arm_fp16.h
+clang_tablegen("arm_fp16") {
+  args = [ "-gen-arm-fp16" ]
+  td_file = "//clang/include/clang/Basic/arm_fp16.td"
+  output_name = "arm_fp16.h"
+}
+
+output_dir = "$root_out_dir/lib/clang/$llvm_version/include"
+
+copy("arm_headers") {
+  visibility = [ ":Headers" ]
+  deps = [
+    ":arm_fp16",
+    ":arm_neon",
+  ]
+  sources = get_target_outputs(":arm_neon") + get_target_outputs(":arm_fp16")
+  outputs = [
+    "$output_dir/{{source_file_part}}",
+  ]
+}
+
+copy("Headers") {
+  deps = [
+    ":arm_headers",
+  ]
+
+  # Tell `gn format` to not reorder the sources list: Its order matches CMake,
+  # and the ordering is alphabetical but ignores leading underscores.
+  # NOSORT
+  sources = [
+    "adxintrin.h",
+    "altivec.h",
+    "ammintrin.h",
+    "arm_acle.h",
+    "armintr.h",
+    "arm64intr.h",
+    "avx2intrin.h",
+    "avx512bwintrin.h",
+    "avx512bitalgintrin.h",
+    "avx512vlbitalgintrin.h",
+    "avx512cdintrin.h",
+    "avx512vpopcntdqintrin.h",
+    "avx512dqintrin.h",
+    "avx512erintrin.h",
+    "avx512fintrin.h",
+    "avx512ifmaintrin.h",
+    "avx512ifmavlintrin.h",
+    "avx512pfintrin.h",
+    "avx512vbmiintrin.h",
+    "avx512vbmivlintrin.h",
+    "avx512vbmi2intrin.h",
+    "avx512vlvbmi2intrin.h",
+    "avx512vlbwintrin.h",
+    "avx512vlcdintrin.h",
+    "avx512vldqintrin.h",
+    "avx512vlintrin.h",
+    "avx512vpopcntdqvlintrin.h",
+    "avx512vnniintrin.h",
+    "avx512vlvnniintrin.h",
+    "avxintrin.h",
+    "bmi2intrin.h",
+    "bmiintrin.h",
+    "__clang_cuda_builtin_vars.h",
+    "__clang_cuda_cmath.h",
+    "__clang_cuda_complex_builtins.h",
+    "__clang_cuda_device_functions.h",
+    "__clang_cuda_intrinsics.h",
+    "__clang_cuda_libdevice_declares.h",
+    "__clang_cuda_math_forward_declares.h",
+    "__clang_cuda_runtime_wrapper.h",
+    "cetintrin.h",
+    "cldemoteintrin.h",
+    "clzerointrin.h",
+    "cpuid.h",
+    "clflushoptintrin.h",
+    "clwbintrin.h",
+    "emmintrin.h",
+    "f16cintrin.h",
+    "float.h",
+    "fma4intrin.h",
+    "fmaintrin.h",
+    "fxsrintrin.h",
+    "gfniintrin.h",
+    "htmintrin.h",
+    "htmxlintrin.h",
+    "ia32intrin.h",
+    "immintrin.h",
+    "intrin.h",
+    "inttypes.h",
+    "invpcidintrin.h",
+    "iso646.h",
+    "limits.h",
+    "lwpintrin.h",
+    "lzcntintrin.h",
+    "mm3dnow.h",
+    "mmintrin.h",
+    "mm_malloc.h",
+    "module.modulemap",
+    "movdirintrin.h",
+    "msa.h",
+    "mwaitxintrin.h",
+    "nmmintrin.h",
+    "opencl-c.h",
+    "pconfigintrin.h",
+    "pkuintrin.h",
+    "pmmintrin.h",
+    "popcntintrin.h",
+    "prfchwintrin.h",
+    "ptwriteintrin.h",
+    "rdseedintrin.h",
+    "rtmintrin.h",
+    "s390intrin.h",
+    "sgxintrin.h",
+    "shaintrin.h",
+    "smmintrin.h",
+    "stdalign.h",
+    "stdarg.h",
+    "stdatomic.h",
+    "stdbool.h",
+    "stddef.h",
+    "__stddef_max_align_t.h",
+    "stdint.h",
+    "stdnoreturn.h",
+    "tbmintrin.h",
+    "tgmath.h",
+    "tmmintrin.h",
+    "unwind.h",
+    "vadefs.h",
+    "vaesintrin.h",
+    "varargs.h",
+    "vecintrin.h",
+    "vpclmulqdqintrin.h",
+    "waitpkgintrin.h",
+    "wbnoinvdintrin.h",
+    "wmmintrin.h",
+    "__wmmintrin_aes.h",
+    "__wmmintrin_pclmul.h",
+    "x86intrin.h",
+    "xmmintrin.h",
+    "xopintrin.h",
+    "xsavecintrin.h",
+    "xsaveintrin.h",
+    "xsaveoptintrin.h",
+    "xsavesintrin.h",
+    "xtestintrin.h",
+    "cuda_wrappers/algorithm",
+    "cuda_wrappers/complex",
+    "cuda_wrappers/new",
+  ]
+  outputs = [
+    "$output_dir/{{source_target_relative}}",
+  ]
+}
diff --git a/llvm/utils/gn/secondary/clang/tools/clang-offload-bundler/BUILD.gn b/llvm/utils/gn/secondary/clang/tools/clang-offload-bundler/BUILD.gn
new file mode 100644 (file)
index 0000000..4335087
--- /dev/null
@@ -0,0 +1,13 @@
+executable("clang-offload-bundler") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+    "//clang/lib/Basic",
+    "//llvm/lib/Bitcode/Writer",
+    "//llvm/lib/IR",
+    "//llvm/lib/Object",
+    "//llvm/lib/Support",
+  ]
+  sources = [
+    "ClangOffloadBundler.cpp",
+  ]
+}
diff --git a/llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn b/llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn
new file mode 100644 (file)
index 0000000..88ac993
--- /dev/null
@@ -0,0 +1,72 @@
+import("//llvm/utils/gn/build/symlink_or_copy.gni")
+
+symlinks = [
+  # target_name, symlink_target pairs: GN doesn't support '+' in rule names.
+  [
+    "clangxx",
+    "clang++",
+  ],
+  [
+    "clang-cl",
+    "clang-cl",
+  ],
+  [
+    "clang-cpp",
+    "clang-cpp",
+  ],
+]
+foreach(target, symlinks) {
+  symlink_or_copy(target[0]) {
+    deps = [
+      ":clang",
+    ]
+    source = "clang"
+    output = "$root_out_dir/bin/${target[1]}"
+  }
+}
+
+# //:clang depends on this symlink target, see comment in //BUILD.gn.
+group("symlinks") {
+  deps = []
+  foreach(target, symlinks) {
+    deps += [ ":${target[0]}" ]
+  }
+}
+
+executable("clang") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+    "//clang/include/clang/Config",
+    "//clang/lib/Basic",
+    "//clang/lib/CodeGen",
+    "//clang/lib/Driver",
+    "//clang/lib/Frontend",
+    "//clang/lib/FrontendTool",
+    "//clang/lib/Headers",
+    "//clang/tools/clang-offload-bundler",
+    "//llvm/include/llvm/Config:llvm-config",
+    "//llvm/lib/Analysis",
+    "//llvm/lib/CodeGen",
+    "//llvm/lib/IR",
+    "//llvm/lib/MC",
+    "//llvm/lib/MC/MCParser",
+    "//llvm/lib/Option",
+    "//llvm/lib/Support",
+    "//llvm/lib/Target:TargetsToBuild",
+    "//llvm/lib/Transforms/IPO",
+    "//llvm/lib/Transforms/InstCombine",
+    "//llvm/lib/Transforms/Instrumentation",
+    "//llvm/lib/Transforms/ObjCARC",
+    "//llvm/lib/Transforms/Scalar",
+    "//llvm/lib/Transforms/Utils",
+    "//llvm/lib/Transforms/Vectorize",
+  ]
+  sources = [
+    "cc1_main.cpp",
+    "cc1as_main.cpp",
+    "cc1gen_reproducer_main.cpp",
+    "driver.cpp",
+  ]
+
+  # FIXME: Info.plist embedding for mac builds.
+}