
Build out the necessary infrastructure for the main entry point into ClangIR generation -- CIRGenModule. A set of boilerplate classes exist to facilitate this -- CIRGenerator, CIRGenAction, EmitCIRAction and CIRGenConsumer. These all mirror the corresponding types from LLVM generation by Clang's CodeGen. The main entry point to CIR generation is `CIRGenModule::buildTopLevelDecl`. It is currently just an empty function. We've added a test to ensure that the pipeline reaches this point and doesn't fail, but does nothing else. This will be removed in one of the subsequent patches that'll add basic `cir.func` emission. This patch also re-adds `-emit-cir` to the driver. lib/Driver/Driver.cpp requires that a driver flag exists to facilirate the selection of the right actions for the driver to create. Without a driver flag you get the standard behaviors of `-S`, `-c`, etc. If we want to emit CIR IR and, eventually, bytecode we'll need a driver flag to force this. This is why `-emit-llvm` is a driver flag. Notably, `-emit-llvm-bc` as a cc1 flag doesn't ever do the right thing. Without a driver flag it is incorrectly ignored and an executable is emitted. With `-S` a file named `something.s` is emitted which actually contains bitcode. Reviewers: AaronBallman, MaskRay, bcardosolopes Reviewed By: bcardosolopes, AaronBallman Pull Request: https://github.com/llvm/llvm-project/pull/91007
51 lines
822 B
CMake
51 lines
822 B
CMake
set(LLVM_LINK_COMPONENTS
|
|
Option
|
|
Support
|
|
)
|
|
|
|
set(link_libs
|
|
clangBasic
|
|
clangCodeGen
|
|
clangDriver
|
|
clangExtractAPI
|
|
clangFrontend
|
|
clangRewriteFrontend
|
|
)
|
|
|
|
set(deps)
|
|
|
|
if(CLANG_ENABLE_CIR)
|
|
list(APPEND link_libs
|
|
clangCIRFrontendAction
|
|
MLIRIR
|
|
)
|
|
endif()
|
|
|
|
if(CLANG_ENABLE_ARCMT)
|
|
list(APPEND link_libs
|
|
clangARCMigrate
|
|
)
|
|
endif()
|
|
|
|
if(CLANG_ENABLE_STATIC_ANALYZER)
|
|
list(APPEND link_libs
|
|
clangStaticAnalyzerFrontend
|
|
)
|
|
endif()
|
|
|
|
add_clang_library(clangFrontendTool
|
|
ExecuteCompilerInvocation.cpp
|
|
|
|
DEPENDS
|
|
ClangDriverOptions
|
|
${deps}
|
|
|
|
LINK_LIBS
|
|
${link_libs}
|
|
)
|
|
|
|
if(CLANG_ENABLE_CIR)
|
|
target_include_directories(clangFrontendTool PRIVATE ${LLVM_MAIN_SRC_DIR}/../mlir/include)
|
|
target_include_directories(clangFrontendTool PRIVATE ${CMAKE_BINARY_DIR}/tools/mlir/include)
|
|
endif()
|