brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 5c58903 Raw
236 lines · plain
1import("//clang/lib/StaticAnalyzer/Frontend/enable.gni")2import("//llvm/include/llvm/Config/config.gni")3import("//llvm/lib/Target/targets.gni")4import("//llvm/triples.gni")5import("//llvm/utils/gn/build/libs/pthread/enable.gni")6import("//llvm/utils/gn/build/libs/zlib/enable.gni")7import("//llvm/utils/gn/build/libs/zstd/enable.gni")8import("//llvm/utils/gn/build/write_cmake_config.gni")9import("//llvm/utils/llvm-lit/lit_path_function.gni")10import("//llvm/version.gni")11import("clang_lit_site_cfg_files.gni")12 13template("write_lit_config") {14  write_cmake_config(target_name) {15    input = invoker.input16    output = invoker.output17    dir = get_path_info(output, "dir")18    values = [19      "LIT_SITE_CFG_IN_HEADER=" +20          "## Autogenerated from $input, do not edit\n\n" + lit_path_function,21      "CLANG_BINARY_DIR=" +22          rebase_path(get_label_info("//clang", "target_out_dir"), dir),23      "CLANG_SOURCE_DIR=" + rebase_path("//clang", dir),24      "LLVM_BINARY_DIR=" +25          rebase_path(get_label_info("//llvm", "target_out_dir"), dir),26      "LLVM_LIBS_DIR=",  # needed only for shared builds27      "LLVM_SOURCE_DIR=" + rebase_path("//llvm", dir),28      "LLVM_TOOLS_DIR=" + rebase_path("$root_out_dir/bin", dir),29      "LLVM_TARGET_TRIPLE=$llvm_target_triple",30    ]31    if (host_os == "win") {32      # See comment for Windows solink in llvm/utils/gn/build/toolchain/BUILD.gn33      values += [ "SHLIBDIR=" + rebase_path("$root_out_dir/bin", dir) ]34    } else {35      values += [ "SHLIBDIR=" + rebase_path("$root_out_dir/lib", dir) ]36    }37    values += invoker.extra_values38  }39}40 41write_lit_config("lit_site_cfg") {42  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.43  input = "//clang/test/lit.site.cfg.py.in"44  output = clang_lit_site_cfg_file45  dir = get_path_info(output, "dir")46  extra_values = [47    "BUILD_SHARED_LIBS=0",48    "LLVM_LINK_LLVM_DYLIB=0",49    "CLANG_LINK_CLANG_DYLIB=0",50    "LLVM_WITH_Z3=0",51    "TEST_WITH_Z3_MOCK=0",52    "CLANG_BUILD_EXAMPLES=0",53    "CLANG_BUILT_STANDALONE=0",54    "CLANG_DEFAULT_CXX_STDLIB=",  # Empty string means "default value" here.55    "CLANG_DEFAULT_PIE_ON_LINUX=0",56    "CLANG_ENABLE_CIR=0",57    "CLANG_ENABLE_OBJC_REWRITER=0",58    "CLANG_PLUGIN_SUPPORT=0",  # FIXME: Analysis/plugins need global -fPIC59    "CURRENT_TOOLS_DIR=" + rebase_path("$root_out_dir/bin", dir),60    "CLANG_VENDOR_UTI=org.llvm.clang",61    "ENABLE_BACKTRACES=1",62    "ENABLE_SHARED=0",63    "LLVM_EXTERNAL_LIT=",64    "LLVM_HOST_TRIPLE=$llvm_current_triple",65    "LLVM_INCLUDE_SPIRV_TOOLS_TESTS=0",66    "LLVM_LIT_TOOLS_DIR=",  # Intentionally empty, matches cmake build.67    "LLVM_TOOL_LLVM_DRIVER_BUILD=0",  # FIXME: Add actual support for this.68    "LLVM_USE_SANITIZER=",69    "LLVM_VERSION_MAJOR=$llvm_version_major",70    "Python3_EXECUTABLE=$python_path",71    "PPC_LINUX_DEFAULT_IEEELONGDOUBLE=0",72  ]73 74  if (clang_enable_static_analyzer) {75    extra_values += [ "CLANG_ENABLE_STATIC_ANALYZER=1" ]76  } else {77    extra_values += [ "CLANG_ENABLE_STATIC_ANALYZER=0" ]78  }79 80  if (llvm_enable_zlib) {81    extra_values += [ "LLVM_ENABLE_ZLIB=1" ]82  } else {83    extra_values += [ "LLVM_ENABLE_ZLIB=0" ]  # Must be 0.84  }85 86  if (llvm_enable_zstd) {87    extra_values += [ "LLVM_ENABLE_ZSTD=1" ]88  } else {89    extra_values += [ "LLVM_ENABLE_ZSTD=0" ]  # Must be 0.90  }91 92  if (host_cpu == "x64") {93    extra_values += [ "HOST_ARCH=x86_64" ]94  } else if (host_cpu == "arm64") {95    extra_values += [ "HOST_ARCH=arm64" ]96  } else if (host_cpu == "ppc64") {97    extra_values += [ "HOST_ARCH=powerpc64le" ]98  } else {99    assert(false, "unimplemented host_cpu " + host_cpu)100  }101 102  if (host_os == "mac") {103    extra_values += [ "LLVM_PLUGIN_EXT=.dylib" ]104  } else if (host_os == "win") {105    extra_values += [ "LLVM_PLUGIN_EXT=.dll" ]106  } else {107    extra_values += [ "LLVM_PLUGIN_EXT=.so" ]108  }109 110  if (host_os == "win") {111    extra_values += [112      # See comment for Windows solink in llvm/utils/gn/build/toolchain/BUILD.gn113      "CMAKE_LIBRARY_OUTPUT_DIRECTORY=" + rebase_path("$root_out_dir/bin", dir),114      "LLVM_LIT_ERRC_MESSAGES=no such file or directory;is a directory;" +115          "invalid argument;permission denied",116      "PERL_EXECUTABLE=",117    ]118  } else {119    extra_values += [120      "CMAKE_LIBRARY_OUTPUT_DIRECTORY=" + rebase_path("$root_out_dir/lib", dir),121      "LLVM_LIT_ERRC_MESSAGES=",122      "PERL_EXECUTABLE=/usr/bin/perl",123    ]124  }125 126  if (llvm_enable_reverse_iteration) {127    extra_values += [ "LLVM_ENABLE_REVERSE_ITERATION=1" ]128  } else {129    extra_values += [ "LLVM_ENABLE_REVERSE_ITERATION=0" ]  # Must be 0.130  }131 132  if (llvm_enable_threads) {133    extra_values += [ "LLVM_ENABLE_THREADS=1" ]134  } else {135    extra_values += [ "LLVM_ENABLE_THREADS=0" ]  # Must be 0.136  }137}138 139write_lit_config("lit_unit_site_cfg") {140  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.141  input = "//clang/test/Unit/lit.site.cfg.py.in"142  output = clang_lit_unit_site_cfg_file143  extra_values = [ "LLVM_BUILD_MODE=." ]144}145 146# This target should contain all dependencies of check-clang.147# //:default depends on it, so that ninja's default target builds all148# prerequisites for check-clang but doesn't run check-clang itself.149group("test") {150  deps = [151    ":lit_site_cfg",152    ":lit_unit_site_cfg",153    "//clang/lib/Headers",154    "//clang/tools/apinotes-test",155    "//clang/tools/c-index-test",156    "//clang/tools/clang-diff",157    "//clang/tools/clang-format",158    "//clang/tools/clang-fuzzer/dictionary:clang-fuzzer-dictionary",159    "//clang/tools/clang-import-test",160    "//clang/tools/clang-installapi",161    "//clang/tools/clang-offload-bundler",162    "//clang/tools/clang-refactor",163    "//clang/tools/clang-repl",164    "//clang/tools/clang-scan-deps",165    "//clang/tools/clang-sycl-linker",166    "//clang/tools/diagtool",167    "//clang/tools/driver:symlinks",168    "//clang/unittests",169    "//clang/utils/TableGen:clang-tblgen",170    "//clang/utils/hmaptool",171    "//llvm/tools/llc",172    "//llvm/tools/llvm-ar:symlinks",173    "//llvm/tools/llvm-as",174    "//llvm/tools/llvm-bcanalyzer",175    "//llvm/tools/llvm-cat",176    "//llvm/tools/llvm-config",177    "//llvm/tools/llvm-cxxfilt",178    "//llvm/tools/llvm-dis",179    "//llvm/tools/llvm-dwarfdump",180    "//llvm/tools/llvm-ifs",181    "//llvm/tools/llvm-link",182    "//llvm/tools/llvm-lto",183    "//llvm/tools/llvm-lto2",184    "//llvm/tools/llvm-modextract",185    "//llvm/tools/llvm-nm:symlinks",186    "//llvm/tools/llvm-objcopy:symlinks",187    "//llvm/tools/llvm-objdump:symlinks",188    "//llvm/tools/llvm-offload-binary",189    "//llvm/tools/llvm-pdbutil",190    "//llvm/tools/llvm-profdata",191    "//llvm/tools/llvm-rc:symlinks",192    "//llvm/tools/llvm-readobj:symlinks",193    "//llvm/tools/llvm-readtapi:symlinks",194    "//llvm/tools/llvm-symbolizer:symlinks",195    "//llvm/tools/obj2yaml",196    "//llvm/tools/opt",197    "//llvm/tools/yaml2obj",198    "//llvm/utils/FileCheck",199    "//llvm/utils/count",200    "//llvm/utils/llvm-lit",201    "//llvm/utils/not",202    "//llvm/utils/split-file",203  ]204  if (clang_enable_static_analyzer) {205    deps += [206      "//clang/tools/clang-check",207      "//clang/tools/clang-extdef-mapping",208    ]209  }210 211  # FIXME: clang_build_examples212  testonly = true213}214 215action("check-clang") {216  script = "$root_out_dir/bin/llvm-lit"217  if (host_os == "win") {218    script += ".py"219  }220  args = [221    "-sv",222    rebase_path(".", root_out_dir),223  ]224  outputs = [ "$target_gen_dir/run-lit" ]  # Non-existing, so that ninja runs it225                                           # each time.226 227  # Since check-clang is always dirty, //:default doesn't depend on it so that228  # it's not part of the default ninja target.  Hence, check-clang shouldn't229  # have any deps except :test. so that the default target is sure to build230  # all the deps.231  deps = [ ":test" ]232  testonly = true233 234  pool = "//:console"235}236