# This file is licensed under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception load("@bazel_skylib//rules:expand_template.bzl", "expand_template") load(":targets.bzl", "bolt_targets") package( default_visibility = ["//visibility:public"], ) licenses(["notice"]) genrule( name = "generate_vcs_revision", outs = ["include/VCSVersion.inc"], cmd = "echo '#undef BOLT_REVISION' >> $@\n", ) expand_template( name = "target_config_def_gen", out = "include/bolt/Core/TargetConfig.def", substitutions = {"@BOLT_ENUM_TARGETS@": "\n".join( ["BOLT_TARGET({})".format(target) for target in bolt_targets], )}, template = "include/bolt/Core/TargetConfig.def.in", ) cc_library( name = "TargetConfig", textual_hdrs = [":target_config_def_gen"], ) cc_binary( name = "llvm-bolt-heatmap", srcs = glob([ "tools/heatmap/*.cpp", ]), deps = [ ":Profile", ":Rewrite", ":TargetConfig", ":Utils", "//llvm:AllTargetsAsmParsers", "//llvm:AllTargetsDisassemblers", "//llvm:MC", "//llvm:Object", "//llvm:Support", ], ) cc_binary( name = "merge-fdata", srcs = glob([ "tools/merge-fdata/*.cpp", ]), deps = [ ":Profile", "//llvm:Support", ], ) cc_binary( name = "llvm-bolt", srcs = glob([ "tools/driver/*.cpp", ]), includes = ["include"], deps = [ ":Profile", ":Rewrite", ":RuntimeLibs", ":TargetConfig", ":TargetAArch64", ":TargetX86", ":Utils", "//llvm:AllTargetsAsmParsers", "//llvm:AllTargetsCodeGens", "//llvm:AllTargetsDisassemblers", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:Object", "//llvm:Support", ], ) cc_library( name = "Rewrite", srcs = glob([ "lib/Rewrite/*.cpp", ]), hdrs = glob([ "include/bolt/Rewrite/*.h", ]), includes = ["include"], deps = [ ":Core", ":Passes", ":Profile", ":RuntimeLibs", ":TargetX86", ":Utils", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DWARFLinker", "//llvm:DWP", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:JITLink", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:OrcShared", "//llvm:Support", "//llvm:ir_headers", ], ) expand_template( name = "RuntimeLibraryVariables_inc", out = "include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc", substitutions = { # FIXME this is a total guess "@LLVM_LIBDIR_SUFFIX@": "lib", }, template = "include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc.in", ) cc_library( name = "RuntimeLibs", srcs = glob([ "lib/RuntimeLibs/*.cpp", ]), defines = ["CMAKE_INSTALL_FULL_LIBDIR=\\\"\\\""], includes = ["include"], textual_hdrs = glob([ "include/bolt/RuntimeLibs/*.h", ]) + ["include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc"], deps = [ ":Core", ":Passes", ":Utils", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DWP", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", ], ) cc_library( name = "ProfileHeaders", hdrs = glob(["include/bolt/Profile/*.h"]), includes = ["include"], visibility = ["//visibility:private"], ) cc_library( name = "Profile", srcs = glob([ "lib/Profile/*.cpp", ]), hdrs = glob([ "include/bolt/Profile/*.h", ]), includes = ["include"], deps = [ ":Core", ":Passes", ":Utils", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", "//llvm:TransformUtils", ], ) cc_library( name = "Passes", srcs = glob([ "lib/Passes/*.cpp", ]), hdrs = glob([ "include/bolt/Passes/*.h", ]) + [ # To avoid circular dependency on "Profile". "include/bolt/Profile/BoltAddressTranslation.h", ], includes = ["include"], deps = [ ":Core", ":Utils", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", "//llvm:Target", "//llvm:TransformUtils", ], ) cc_library( name = "TargetX86", srcs = glob([ "lib/Target/X86/*.cpp", ]), hdrs = glob([ "lib/Target/X86/*.h", ]), includes = ["include"], deps = [ ":Core", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DWP", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", "//llvm:X86CommonTableGen", "//llvm:X86UtilsAndDesc", ], ) cc_library( name = "TargetAArch64", srcs = glob([ "lib/Target/AArch64/*.cpp", ]), includes = ["include"], deps = [ ":Core", ":Utils", "//llvm:AArch64CommonTableGen", "//llvm:AArch64UtilsAndDesc", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DWP", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", ], ) cc_library( name = "Core", srcs = glob([ "lib/Core/*.cpp", ]), hdrs = glob([ "include/bolt/Core/*.h", "include/bolt/RuntimeLibs/*.h", "include/bolt/Passes/*.h", "include/bolt/Rewrite/*.h", ]), includes = ["include"], deps = [ ":ProfileHeaders", ":Utils", "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:ObjectYAML", "//llvm:OrcShared", "//llvm:Support", "//llvm:TargetParser", "//llvm:config", "//llvm:ir_headers", ], ) cc_library( name = "Utils", srcs = glob([ "lib/Utils/*.cpp", ]), hdrs = [ "include/VCSVersion.inc", ] + glob([ "include/bolt/Utils/*.h", ]), includes = ["include"], deps = [ "//llvm:Analysis", "//llvm:BinaryFormat", "//llvm:CodeGen", "//llvm:DWP", "//llvm:DebugInfoDWARF", "//llvm:Demangle", "//llvm:ExecutionEngine", "//llvm:MC", "//llvm:MCDisassembler", "//llvm:MCParser", "//llvm:Object", "//llvm:Support", ], )