# Copyright 2024 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("//cc:action_names.bzl", "ACTION_NAMES")
load("//cc/toolchains:actions.bzl", "cc_action_type", "cc_action_type_set")

package(default_visibility = ["//visibility:public"])

# Keep in sync with //cc:action_names.bzl.

cc_action_type(
    name = "c_compile",
    action_name = ACTION_NAMES.c_compile,
)

cc_action_type(
    name = "cpp_compile",
    action_name = ACTION_NAMES.cpp_compile,
)

cc_action_type(
    name = "linkstamp_compile",
    action_name = ACTION_NAMES.linkstamp_compile,
)

cc_action_type(
    name = "cc_flags_make_variable",
    action_name = ACTION_NAMES.cc_flags_make_variable,
)

cc_action_type(
    name = "cpp_module_codegen",
    action_name = ACTION_NAMES.cpp_module_codegen,
)

cc_action_type(
    name = "cpp_header_analysis",
    action_name = "c++-header-analysis",
)

cc_action_type(
    name = "cpp_header_parsing",
    action_name = ACTION_NAMES.cpp_header_parsing,
)

cc_action_type(
    name = "cpp_module_compile",
    action_name = ACTION_NAMES.cpp_module_compile,
)

cc_action_type(
    name = "assemble",
    action_name = ACTION_NAMES.assemble,
)

cc_action_type(
    name = "preprocess_assemble",
    action_name = ACTION_NAMES.preprocess_assemble,
)

cc_action_type(
    name = "lto_indexing",
    action_name = ACTION_NAMES.lto_indexing,
)

cc_action_type(
    name = "lto_backend",
    action_name = ACTION_NAMES.lto_backend,
)

cc_action_type(
    name = "lto_index_for_executable",
    action_name = ACTION_NAMES.lto_index_for_executable,
)

cc_action_type(
    name = "lto_index_for_dynamic_library",
    action_name = ACTION_NAMES.lto_index_for_dynamic_library,
)

cc_action_type(
    name = "lto_index_for_nodeps_dynamic_library",
    action_name = ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
)

cc_action_type(
    name = "cpp_link_executable",
    action_name = ACTION_NAMES.cpp_link_executable,
)

cc_action_type(
    name = "cpp_link_dynamic_library",
    action_name = ACTION_NAMES.cpp_link_dynamic_library,
)

cc_action_type(
    name = "cpp_link_nodeps_dynamic_library",
    action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
)

cc_action_type(
    name = "cpp_link_static_library",
    action_name = ACTION_NAMES.cpp_link_static_library,
)

cc_action_type(
    name = "strip",
    action_name = ACTION_NAMES.strip,
)

cc_action_type(
    name = "objcopy_embed_data",
    action_name = "objcopy_embed_data",
)

# ld_embed_data is only available within google.
cc_action_type(
    # # copybara-comment-this-out-please
    name = "ld_embed_data_action",  # # copybara-comment-this-out-please
    action_name = "ld_embed_data",  # # copybara-comment-this-out-please
)  # # copybara-comment-this-out-please

# To make things simple, both internal and external rules will refer to
# ld_embed_data, but externally it will evaluate to the empty set.
cc_action_type_set(
    name = "ld_embed_data",
    actions = [
        ":ld_embed_data_action",  # # copybara-comment-this-out-please
    ],
    allow_empty = True,
    visibility = ["//cc/toolchains:__subpackages__"],
)

cc_action_type(
    name = "objc_compile",
    action_name = ACTION_NAMES.objc_compile,
)

cc_action_type(
    name = "objc_executable",
    action_name = ACTION_NAMES.objc_executable,
)

cc_action_type(
    name = "objc_fully_link",
    action_name = ACTION_NAMES.objc_fully_link,
)

cc_action_type(
    name = "objcpp_compile",
    action_name = ACTION_NAMES.objcpp_compile,
)

cc_action_type(
    name = "objcpp_executable",
    action_name = "objc++-executable",
)

cc_action_type(
    name = "clif_match",
    action_name = ACTION_NAMES.clif_match,
)

cc_action_type_set(
    name = "ar_actions",
    actions = [":cpp_link_static_library"],
)

cc_action_type_set(
    name = "assembly_actions",
    actions = [
        ":preprocess_assemble",
        ":assemble",
    ],
)

cc_action_type_set(
    name = "c_compile_actions",
    actions = [
        ":c_compile",
    ],
)

cc_action_type_set(
    name = "cpp_compile_actions",
    actions = [
        ":linkstamp_compile",
        ":cpp_compile",
        ":cpp_header_parsing",
        ":cpp_module_compile",
        ":cpp_module_codegen",
        ":lto_backend",
        ":clif_match",
    ],
)

cc_action_type_set(
    name = "compile_actions",
    actions = [
        ":cpp_compile_actions",
        ":c_compile_actions",
        ":assembly_actions",
        ":objc_compile",
        ":objcpp_compile",
    ],
)

cc_action_type_set(
    name = "link_actions",
    actions = [
        ":link_executable_actions",
        ":dynamic_library_link_actions",
    ],
)

cc_action_type_set(
    name = "link_executable_actions",
    actions = [
        ":cpp_link_executable",
        ":lto_index_for_executable",
    ],
)

cc_action_type_set(
    name = "dynamic_library_link_actions",
    actions = [
        ":cpp_link_dynamic_library",
        ":lto_index_for_dynamic_library",
        ":nodeps_dynamic_library_link_actions",
    ],
)

cc_action_type_set(
    name = "nodeps_dynamic_library_link_actions",
    actions = [
        ":cpp_link_nodeps_dynamic_library",
        ":lto_index_for_nodeps_dynamic_library",
    ],
)

cc_action_type_set(
    name = "transitive_link_actions",
    actions = [
        ":cpp_link_executable",
        ":cpp_link_dynamic_library",
        ":lto_index_for_executable",
        ":lto_index_for_dynamic_library",
    ],
)

cc_action_type_set(
    name = "all_actions",
    actions = [
        ":c_compile",
        ":cpp_compile",
        ":linkstamp_compile",
        ":cc_flags_make_variable",
        ":cpp_module_codegen",
        ":cpp_header_analysis",
        ":cpp_header_parsing",
        ":cpp_module_compile",
        ":assemble",
        ":preprocess_assemble",
        ":lto_indexing",
        ":lto_backend",
        ":lto_index_for_executable",
        ":lto_index_for_dynamic_library",
        ":lto_index_for_nodeps_dynamic_library",
        ":cpp_link_executable",
        ":cpp_link_dynamic_library",
        ":cpp_link_nodeps_dynamic_library",
        ":cpp_link_static_library",
        ":strip",
        ":objcopy_embed_data",
        ":ld_embed_data",
        ":objc_compile",
        ":objc_executable",
        ":objc_fully_link",
        ":objcpp_compile",
        ":objcpp_executable",
        ":clif_match",
    ],
)
