mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-14 15:56:32 +00:00
[BOLT] Only link and initialize supported targets (#127509)
Bolt currently links and initializes all LLVM targets. This substantially increases the binary size, and link time if LTO is used. Instead, only link the targets specified by BOLT_TARGETS_TO_BUILD. We also have to only initialize those targets, so generate a TargetConfig.def file with the necessary information. The way the initialization is done mirrors what llvm-exegesis does. This reduces llvm-bolt size from 137MB to 78MB for me.
This commit is contained in:
parent
13de15c9c4
commit
e235fcb582
@ -202,3 +202,11 @@ endif()
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/bolt/RuntimeLibs/RuntimeLibraryVariables.inc @ONLY)
|
||||
|
||||
set(BOLT_ENUM_TARGETS "")
|
||||
foreach(t ${BOLT_TARGETS_TO_BUILD})
|
||||
set(BOLT_ENUM_TARGETS "${BOLT_ENUM_TARGETS}BOLT_TARGET(${t})\n")
|
||||
endforeach(t)
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/bolt/Core/TargetConfig.def.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/bolt/Core/TargetConfig.def @ONLY)
|
||||
|
23
bolt/include/bolt/Core/TargetConfig.def.in
Normal file
23
bolt/include/bolt/Core/TargetConfig.def.in
Normal file
@ -0,0 +1,23 @@
|
||||
//===-- TargetConfig.def.in - Information about available targets ---------===//
|
||||
//
|
||||
// Part of the LLVM Project, 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file is configured by the build system to define the available bolt
|
||||
// targets.
|
||||
//
|
||||
// The variant of this file not ending with .in has been autogenerated by the
|
||||
// LLVM build. Do not edit!
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef BOLT_TARGET
|
||||
# error Please define the macro BOLT_TARGET(TargetName)
|
||||
#endif
|
||||
|
||||
@BOLT_ENUM_TARGETS@
|
||||
|
||||
#undef BOLT_TARGET
|
@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
@ -88,13 +88,15 @@ int main(int argc, char **argv) {
|
||||
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ParseCommandLine(argc, argv);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
@ -183,13 +183,15 @@ int main(int argc, char **argv) {
|
||||
std::string ToolPath = llvm::sys::fs::getMainExecutable(argv[0], nullptr);
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ToolName = argv[0];
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
@ -76,13 +76,15 @@ int main(int argc, char **argv) {
|
||||
opts::OutputFilename = "-";
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ToolName = argv[0];
|
||||
std::string ToolPath = GetExecutablePath(argv[0]);
|
||||
|
@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
)
|
||||
|
||||
add_llvm_fuzzer(llvm-bolt-fuzzer
|
||||
|
@ -58,13 +58,16 @@ extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) {
|
||||
|
||||
extern "C" LLVM_ATTRIBUTE_USED int LLVMFuzzerInitialize(int *argc,
|
||||
char ***argv) {
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -27,12 +27,15 @@ struct BinaryContextTester : public testing::TestWithParam<Triple::ArchType> {
|
||||
|
||||
protected:
|
||||
void initalizeLLVM() {
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
}
|
||||
|
||||
void prepareElf() {
|
||||
|
@ -2,7 +2,7 @@ set(LLVM_LINK_COMPONENTS
|
||||
DebugInfoDWARF
|
||||
Object
|
||||
MC
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
)
|
||||
|
||||
add_bolt_unittest(CoreTests
|
||||
|
@ -37,12 +37,15 @@ struct MCPlusBuilderTester : public testing::TestWithParam<Triple::ArchType> {
|
||||
|
||||
protected:
|
||||
void initalizeLLVM() {
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
}
|
||||
|
||||
void prepareElf() {
|
||||
|
@ -38,12 +38,15 @@ struct MemoryMapsTester : public testing::TestWithParam<Triple::ArchType> {
|
||||
|
||||
protected:
|
||||
void initalizeLLVM() {
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
}
|
||||
|
||||
void prepareElf() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user