1""" Generate CcToolchainConfigInfo for LLVM """ 2 3load( 4 "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", 5 "artifact_name_pattern", 6 "feature", 7) 8load("//bazel/toolchain_rules/cc_tools:clang.bzl", clang_compile_action_configs = "compile_action_configs") 9load("//bazel/toolchain_rules/cc_tools:ld.lld.bzl", ld_lld_link_action_configs = "link_action_configs") 10load("//bazel/toolchain_rules/cc_tools:ld64.lld.bzl", ld64_lld_link_action_configs = "link_action_configs") 11load("//bazel/toolchain_rules/cc_tools:lld_link.bzl", lld_link_link_action_configs = "link_action_configs") 12load("//bazel/toolchain_rules/cc_tools:llvm_ar.bzl", llvm_ar_archive_action_configs = "archive_action_configs") 13load("//bazel/toolchain_rules/cc_tools:llvm_strip.bzl", llvm_strip_strip_action_configs = "strip_action_configs") 14load("//bazel/toolchain_rules/cc_tools:wasm_ld.bzl", wasm_ld_link_action_configs = "link_action_configs") 15 16APPLE_ARTIFACT_NAME_PATTERNS = [ 17 # Artifact name patterns differ from the defaults only for dynamic libraries. 18 artifact_name_pattern( 19 category_name = "dynamic_library", 20 prefix = "lib", 21 extension = ".dylib", 22 ), 23] 24 25LINUX_ARTIFACT_NAME_PATTERNS = [ 26 # Artifact name patterns are the default. 27] 28 29WASM_ARTIFACT_NAME_PATTERNS = [ 30 # Artifact name patterns differ from the defaults only for executables. 31 artifact_name_pattern( 32 category_name = "executable", 33 prefix = "", 34 extension = ".wasm", 35 ), 36] 37 38WINDOWS_ARTIFACT_NAME_PATTERNS = [ 39 artifact_name_pattern( 40 category_name = "object_file", 41 prefix = "", 42 extension = ".obj", 43 ), 44 artifact_name_pattern( 45 category_name = "static_library", 46 prefix = "", 47 extension = ".lib", 48 ), 49 artifact_name_pattern( 50 category_name = "alwayslink_static_library", 51 prefix = "", 52 extension = ".lo.lib", 53 ), 54 artifact_name_pattern( 55 category_name = "executable", 56 prefix = "", 57 extension = ".exe", 58 ), 59 artifact_name_pattern( 60 category_name = "dynamic_library", 61 prefix = "", 62 extension = ".dll", 63 ), 64 artifact_name_pattern( 65 category_name = "interface_library", 66 prefix = "", 67 extension = ".if.lib", 68 ), 69] 70 71TARGET_CONFIG = { 72 "aarch64-apple-darwin": struct( 73 artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS, 74 compile_action_configs = clang_compile_action_configs, 75 archive_action_configs = llvm_ar_archive_action_configs, 76 link_action_configs = ld64_lld_link_action_configs, 77 strip_action_configs = llvm_strip_strip_action_configs, 78 ), 79 "aarch64-apple-ios": struct( 80 artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS, 81 compile_action_configs = clang_compile_action_configs, 82 archive_action_configs = llvm_ar_archive_action_configs, 83 link_action_configs = ld64_lld_link_action_configs, 84 strip_action_configs = llvm_strip_strip_action_configs, 85 ), 86 "aarch64-linux-android": struct( 87 artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS, 88 compile_action_configs = clang_compile_action_configs, 89 archive_action_configs = llvm_ar_archive_action_configs, 90 link_action_configs = ld_lld_link_action_configs, 91 strip_action_configs = llvm_strip_strip_action_configs, 92 ), 93 "aarch64-unknown-linux-gnu": struct( 94 artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS, 95 compile_action_configs = clang_compile_action_configs, 96 archive_action_configs = llvm_ar_archive_action_configs, 97 link_action_configs = ld_lld_link_action_configs, 98 strip_action_configs = llvm_strip_strip_action_configs, 99 ), 100 "wasm32-unknown-unknown": struct( 101 artifact_name_patterns = WASM_ARTIFACT_NAME_PATTERNS, 102 compile_action_configs = clang_compile_action_configs, 103 archive_action_configs = llvm_ar_archive_action_configs, 104 link_action_configs = wasm_ld_link_action_configs, 105 strip_action_configs = llvm_strip_strip_action_configs, 106 ), 107 "wasm32-wasi": struct( 108 artifact_name_patterns = WASM_ARTIFACT_NAME_PATTERNS, 109 compile_action_configs = clang_compile_action_configs, 110 archive_action_configs = llvm_ar_archive_action_configs, 111 link_action_configs = wasm_ld_link_action_configs, 112 strip_action_configs = llvm_strip_strip_action_configs, 113 ), 114 "x86_64-apple-darwin": struct( 115 artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS, 116 compile_action_configs = clang_compile_action_configs, 117 archive_action_configs = llvm_ar_archive_action_configs, 118 link_action_configs = ld64_lld_link_action_configs, 119 strip_action_configs = llvm_strip_strip_action_configs, 120 ), 121 "x86_64-pc-windows-msvc": struct( 122 artifact_name_patterns = WINDOWS_ARTIFACT_NAME_PATTERNS, 123 compile_action_configs = clang_compile_action_configs, 124 archive_action_configs = llvm_ar_archive_action_configs, 125 link_action_configs = lld_link_link_action_configs, 126 strip_action_configs = llvm_strip_strip_action_configs, 127 ), 128 "x86_64-unknown-linux-gnu": struct( 129 artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS, 130 compile_action_configs = clang_compile_action_configs, 131 archive_action_configs = llvm_ar_archive_action_configs, 132 link_action_configs = ld_lld_link_action_configs, 133 strip_action_configs = llvm_strip_strip_action_configs, 134 ), 135} 136 137def _llvm_cc_toolchain_config_impl(ctx): 138 target_config = TARGET_CONFIG[ctx.attr.target] 139 140 compile_action_configs = target_config.compile_action_configs( 141 clang = ctx.attr.clang, 142 target = ctx.attr.target, 143 builtin_include_directories = ctx.attr.builtin_include_directories, 144 builtin_framework_directories = ctx.attr.builtin_framework_directories, 145 compile_flags = ctx.attr.compile_flags, 146 dbg_compile_flags = ctx.attr.dbg_compile_flags, 147 fastbuild_compile_flags = ctx.attr.fastbuild_compile_flags, 148 opt_compile_flags = ctx.attr.opt_compile_flags, 149 remap_path_prefix = ctx.attr.remap_path_prefix, 150 ) 151 152 archive_action_configs = target_config.archive_action_configs( 153 llvm = ctx.attr.llvm, 154 archive_flags = ctx.attr.archive_flags, 155 ) 156 157 link_action_configs = target_config.link_action_configs( 158 llvm = ctx.attr.llvm, 159 builtin_library_directories = ctx.attr.builtin_library_directories, 160 builtin_libraries = ctx.attr.builtin_libraries, 161 builtin_framework_directories = ctx.attr.builtin_framework_directories, 162 builtin_frameworks = ctx.attr.builtin_frameworks, 163 builtin_executable_objects = ctx.attr.builtin_executable_objects, 164 link_flags = ctx.attr.link_flags, 165 dbg_link_flags = ctx.attr.dbg_link_flags, 166 fastbuild_link_flags = ctx.attr.fastbuild_link_flags, 167 opt_link_flags = ctx.attr.opt_link_flags, 168 ) 169 170 strip_action_configs = target_config.strip_action_configs( 171 llvm = ctx.attr.llvm, 172 ) 173 174 return cc_common.create_cc_toolchain_config_info( 175 ctx = ctx, 176 features = [ 177 feature(name = "no_legacy_features", enabled = True), 178 feature(name = "supports_start_end_lib", enabled = ctx.attr.supports_start_end_lib), 179 feature(name = "supports_interface_shared_libraries", enabled = False), 180 feature(name = "supports_dynamic_linker", enabled = True), 181 feature(name = "has_configured_linker_path", enabled = True), 182 feature(name = "static_link_cpp_runtimes", enabled = False), 183 feature(name = "supports_pic", enabled = True), 184 ], 185 action_configs = compile_action_configs + 186 archive_action_configs + 187 link_action_configs + 188 strip_action_configs, 189 artifact_name_patterns = target_config.artifact_name_patterns, 190 cxx_builtin_include_directories = ctx.attr.builtin_include_directories, 191 toolchain_identifier = ctx.attr.name, 192 host_system_name = None, 193 target_system_name = ctx.attr.target, 194 target_cpu = "unused", 195 target_libc = "unused", 196 compiler = "unused", 197 abi_version = None, 198 abi_libc_version = None, 199 tool_paths = [], 200 make_variables = [], 201 builtin_sysroot = None, 202 cc_target_os = None, 203 ) 204 205llvm_cc_toolchain_config = rule( 206 implementation = _llvm_cc_toolchain_config_impl, 207 attrs = { 208 "archive_flags": attr.string_list(), 209 "builtin_executable_objects": attr.string_list(), 210 "builtin_framework_directories": attr.string_list(), 211 "builtin_frameworks": attr.string_list(), 212 "builtin_include_directories": attr.string_list(), 213 "builtin_libraries": attr.string_list(), 214 "builtin_library_directories": attr.string_list(), 215 "clang": attr.string(mandatory = True), 216 "compile_flags": attr.string_list(), 217 "dbg_compile_flags": attr.string_list(), 218 "dbg_link_flags": attr.string_list(), 219 "fastbuild_compile_flags": attr.string_list(), 220 "fastbuild_link_flags": attr.string_list(), 221 "link_flags": attr.string_list(), 222 "llvm": attr.string(mandatory = True), 223 "opt_compile_flags": attr.string_list(), 224 "opt_link_flags": attr.string_list(), 225 "remap_path_prefix": attr.string(), 226 "supports_start_end_lib": attr.bool(default = True), 227 "target": attr.string(mandatory = True), 228 }, 229 provides = [CcToolchainConfigInfo], 230) 231