-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[llvm-(min-)tblgen] Avoid redundant source compilation #114494
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
94dd647
a35bd89
3234b52
4d31243
d79ea2f
69092f8
db0cafc
640a872
52c41a6
a1849e6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
//===- TableGen.h ---------------------------------------------------------===// | ||
// | ||
// 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 | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Shared entry point for llvm-tblgen and llvm-min-tblgen. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
int tblgen_main(int argc, char **argv); |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,20 +5,17 @@ add_subdirectory(Basic) | |
# code needed by the backends. | ||
add_subdirectory(Common) | ||
|
||
set(LLVM_LINK_COMPONENTS Support) | ||
|
||
# llvm-min-tablegen only contains a subset of backends necessary to | ||
# build llvm/include. It must not depend on TableGenCommon, as | ||
# TableGenCommon depends on this already to generate things such as | ||
# ValueType definitions. | ||
# Sources included in both, llvm-min-tblgen and llvm-tblgen, must be included | ||
# into LLVMTableGenBasic to avoid redundant compilation and problems with build | ||
# caches. | ||
# At least one source file must be included directly to avoid CMake problems. | ||
# E.g. CMake derives which linker to use from the types of sources added. | ||
add_tablegen(llvm-min-tblgen LLVM_HEADERS | ||
TableGen.cpp | ||
ARMTargetDefEmitter.cpp | ||
Attributes.cpp | ||
DirectiveEmitter.cpp | ||
IntrinsicEmitter.cpp | ||
RISCVTargetDefEmitter.cpp | ||
VTEmitter.cpp | ||
llvm-min-tblgen.cpp | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Meant, one
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please read #114494 (comment) for why not. The duplicate is the exactly the problem this PR intends to solve, even if |
||
$<TARGET_OBJECTS:obj.LLVMTableGenBasic> | ||
|
||
PARTIAL_SOURCES_INTENDED | ||
|
@@ -32,10 +29,8 @@ set(LLVM_LINK_COMPONENTS | |
add_tablegen(llvm-tblgen LLVM | ||
DESTINATION "${LLVM_TOOLS_INSTALL_DIR}" | ||
EXPORT LLVM | ||
ARMTargetDefEmitter.cpp | ||
AsmMatcherEmitter.cpp | ||
AsmWriterEmitter.cpp | ||
Attributes.cpp | ||
CallingConvEmitter.cpp | ||
CodeEmitterGen.cpp | ||
CodeGenMapTable.cpp | ||
|
@@ -48,7 +43,6 @@ add_tablegen(llvm-tblgen LLVM | |
DecoderEmitter.cpp | ||
DFAEmitter.cpp | ||
DFAPacketizerEmitter.cpp | ||
DirectiveEmitter.cpp | ||
DisassemblerEmitter.cpp | ||
DXILEmitter.cpp | ||
ExegesisEmitter.cpp | ||
|
@@ -57,18 +51,15 @@ add_tablegen(llvm-tblgen LLVM | |
GlobalISelEmitter.cpp | ||
InstrDocsEmitter.cpp | ||
InstrInfoEmitter.cpp | ||
IntrinsicEmitter.cpp | ||
llvm-tblgen.cpp | ||
MacroFusionPredicatorEmitter.cpp | ||
OptionParserEmitter.cpp | ||
OptionRSTEmitter.cpp | ||
PseudoLoweringEmitter.cpp | ||
RegisterBankEmitter.cpp | ||
RegisterInfoEmitter.cpp | ||
RISCVTargetDefEmitter.cpp | ||
SearchableTableEmitter.cpp | ||
SubtargetEmitter.cpp | ||
TableGen.cpp | ||
VTEmitter.cpp | ||
WebAssemblyDisassemblerEmitter.cpp | ||
X86InstrMappingEmitter.cpp | ||
X86DisassemblerTables.cpp | ||
|
@@ -79,6 +70,8 @@ add_tablegen(llvm-tblgen LLVM | |
$<TARGET_OBJECTS:obj.LLVMTableGenBasic> | ||
$<TARGET_OBJECTS:obj.LLVMTableGenCommon> | ||
|
||
PARTIAL_SOURCES_INTENDED | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It may be pruned. |
||
|
||
DEPENDS | ||
intrinsics_gen # via llvm-min-tablegen | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
//===- llvm-min-tblgen.cpp ------------------------------------------------===// | ||
// | ||
// 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 contains the main function for LLVM's TableGen. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "Basic/TableGen.h" | ||
|
||
/// Command line parameters are shared between llvm-tblgen and llvm-min-tblgen. | ||
/// The indirection to tblgen_main exists to ensure that the static variables | ||
/// for the llvm::cl:: mechanism are linked into both executables. | ||
int main(int argc, char **argv) { return tblgen_main(argc, argv); } |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
//===- llvm-tblgen.cpp ----------------------------------------------------===// | ||
// | ||
// 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 contains the main function for LLVM's TableGen. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "Basic/TableGen.h" | ||
|
||
/// Command line parameters are shared between llvm-tblgen and llvm-min-tblgen. | ||
/// The indirection to tblgen_main exists to ensure that the static variables | ||
/// for the llvm::cl:: mechanism are linked into both executables. | ||
int main(int argc, char **argv) { return tblgen_main(argc, argv); } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suggest
TableGen.cpp
may be individual. IIRC, some cmake generators don't likeadd_executable
w/o any source files.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CMake has a problem to identify which linker to use (C or C++) when there is no .c/.cpp file in the list. A strategy used elsewhere also in LLVM adds an empty
dummy.cpp
into the list.Keeping
TableGen.cpp
(or using the samedummy.cpp
) in both executables would defeat the entire purpose of this patch: The same timestamp issue still occurs with even just a single file which causes all .td files to be processed again in a no-change build (see summary).I instead applied the usual source structure of an executable: One file per executable which named after the executable name containing the (in this case trivial)
main
function, which just calls thetblgen_main
inTableGen.cpp
. This should also clear up any confusion (including mine) of where each executable's main function is.