cc_toolchain_config.bzl 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
  2. load(
  3. "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
  4. "feature",
  5. "flag_group",
  6. "flag_set",
  7. "tool",
  8. "tool_path",
  9. )
  10. all_link_actions = [
  11. ACTION_NAMES.cpp_link_executable,
  12. ACTION_NAMES.cpp_link_dynamic_library,
  13. ACTION_NAMES.cpp_link_nodeps_dynamic_library,
  14. ]
  15. all_compile_actions = [
  16. ACTION_NAMES.assemble,
  17. ACTION_NAMES.preprocess_assemble,
  18. ACTION_NAMES.linkstamp_compile,
  19. ACTION_NAMES.c_compile,
  20. ACTION_NAMES.cpp_compile,
  21. ACTION_NAMES.cpp_header_parsing,
  22. ACTION_NAMES.cpp_module_codegen,
  23. ACTION_NAMES.cpp_module_compile,
  24. ACTION_NAMES.clif_match,
  25. ACTION_NAMES.lto_backend,
  26. ]
  27. def _impl(ctx):
  28. tool_paths = [
  29. tool_path(
  30. name = "gcc",
  31. path = "/usr/local/bin/clang",
  32. ),
  33. tool_path(
  34. name = "ld",
  35. path = "/usr/bin/ld",
  36. ),
  37. tool_path(
  38. name = "ar",
  39. path = "/usr/bin/ar",
  40. ),
  41. tool_path(
  42. name = "compat-ld",
  43. path = "/usr/bin/ld",
  44. ),
  45. tool_path(
  46. name = "cpp",
  47. path = "/bin/false",
  48. ),
  49. tool_path(
  50. name = "dwp",
  51. path = "/bin/false",
  52. ),
  53. tool_path(
  54. name = "gcov",
  55. path = "/bin/false",
  56. ),
  57. tool_path(
  58. name = "nm",
  59. path = "/bin/false",
  60. ),
  61. tool_path(
  62. name = "objcopy",
  63. path = "/bin/false",
  64. ),
  65. tool_path(
  66. name = "objdump",
  67. path = "/bin/false",
  68. ),
  69. tool_path(
  70. name = "strip",
  71. path = "/bin/false",
  72. ),
  73. ]
  74. linker_flags = feature(
  75. name = "default_linker_flags",
  76. enabled = True,
  77. flag_sets = [
  78. flag_set(
  79. actions = all_link_actions,
  80. flag_groups = [
  81. flag_group(
  82. flags = [
  83. "-lstdc++",
  84. "--target=" + ctx.attr.target_full_name,
  85. ],
  86. ),
  87. ],
  88. ),
  89. ],
  90. )
  91. compiler_flags = feature(
  92. name = "default_compile_flags",
  93. enabled = True,
  94. flag_sets = [
  95. flag_set(
  96. actions = all_compile_actions,
  97. flag_groups = [
  98. flag_group(
  99. flags = [
  100. ctx.attr.bit_flag,
  101. "-Wall",
  102. "-no-canonical-prefixes",
  103. "--target=" + ctx.attr.target_full_name,
  104. "-isystem",
  105. ctx.attr.toolchain_dir,
  106. ctx.attr.include_flag,
  107. ],
  108. ),
  109. ],
  110. ),
  111. ],
  112. )
  113. return cc_common.create_cc_toolchain_config_info(
  114. abi_libc_version = ctx.attr.target_cpu,
  115. abi_version = ctx.attr.target_cpu,
  116. ctx = ctx,
  117. compiler = "clang",
  118. cxx_builtin_include_directories = [
  119. ctx.attr.toolchain_dir,
  120. "/usr/include",
  121. "/usr/local/lib/clang",
  122. ],
  123. features = [linker_flags, compiler_flags],
  124. host_system_name = "local",
  125. target_cpu = ctx.attr.target_cpu,
  126. target_libc = ctx.attr.target_cpu,
  127. target_system_name = ctx.attr.target_full_name,
  128. toolchain_identifier = ctx.attr.toolchain_name,
  129. tool_paths = tool_paths,
  130. )
  131. cc_toolchain_config = rule(
  132. implementation = _impl,
  133. attrs = {
  134. "bit_flag": attr.string(mandatory = True, values = ["-m32", "-m64"]),
  135. "include_flag": attr.string(mandatory = False),
  136. "target_cpu": attr.string(mandatory = True, values = ["aarch64", "ppc64", "systemz", "x86_32", "x86_64"]),
  137. "target_full_name": attr.string(mandatory = True),
  138. "toolchain_dir": attr.string(mandatory = True),
  139. "toolchain_name": attr.string(mandatory = True),
  140. },
  141. provides = [CcToolchainConfigInfo],
  142. )