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