mirror of https://github.com/llvm/circt.git
[ExportVerilog][SV] C API (#481)
Co-authored-by: George <989903+GeorgeLyon@users.noreply.github.com>
This commit is contained in:
parent
66aa20d291
commit
eb092323e6
|
@ -0,0 +1,26 @@
|
|||
//===-- circt-c/SVDialect.h - C API for emitting Verilog ----------*- C -*-===//
|
||||
//
|
||||
// This header declares the C interface for emitting Verilog from a CIRCT MLIR
|
||||
// module.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef CIRCT_C_EXPORTVERILOG_H
|
||||
#define CIRCT_C_EXPORTVERILOG_H
|
||||
|
||||
#include "mlir-c/IR.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/// Emits verilog for the specified module using the provided callback and user
|
||||
/// data
|
||||
MlirLogicalResult mlirExportVerilog(MlirModule, MlirStringCallback,
|
||||
void *userData);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CIRCT_C_EXPORTVERILOG_H
|
|
@ -0,0 +1,35 @@
|
|||
//===-- circt-c/SVDialect.h - C API for SV dialect ----------------*- C -*-===//
|
||||
//
|
||||
// This header declares the C interface for registering and accessing the
|
||||
// SV dialect. A dialect should be registered with a context to make it
|
||||
// available to users of the context. These users must load the dialect
|
||||
// before using any of its attributes, operations or types. Parser and pass
|
||||
// manager can load registered dialects automatically.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef CIRCT_C_SVDIALECT_H
|
||||
#define CIRCT_C_SVDIALECT_H
|
||||
|
||||
#include "mlir-c/IR.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/// Registers the SV dialect with the given context. This allows the dialect to
|
||||
/// be loaded dynamically if needed when parsing.
|
||||
void mlirContextRegisterSVDialect(MlirContext context);
|
||||
|
||||
/// Loads the SV dialect into the given context. The dialect does _not_ have to
|
||||
/// be registered in advance.
|
||||
MlirDialect mlirContextLoadSVDialect(MlirContext context);
|
||||
|
||||
/// Returns the namespace of the SV dialect, suitable for loading it.
|
||||
MlirStringRef mlirSVDialectGetNamespace();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CIRCT_C_SVDIALECT_H
|
|
@ -1 +1,3 @@
|
|||
add_subdirectory(ExportVerilog)
|
||||
add_subdirectory(RTL)
|
||||
add_subdirectory(SV)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
add_circt_library(CIRCTCAPIExportVerilog
|
||||
|
||||
ExportVerilog.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
${MLIR_MAIN_INCLUDE_DIR}/mlir-c
|
||||
|
||||
LINK_LIBS PUBLIC
|
||||
MLIRCAPIIR
|
||||
CIRCTExportVerilog
|
||||
)
|
|
@ -0,0 +1,23 @@
|
|||
//===- RTLDialect.cpp - C Interface EmitVerilog ---------------------------===//
|
||||
//
|
||||
// Implements a C Interface for emitVerilog
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "circt-c/ExportVerilog.h"
|
||||
|
||||
#include "circt/Translation/ExportVerilog.h"
|
||||
#include "mlir/CAPI/IR.h"
|
||||
#include "mlir/CAPI/Support.h"
|
||||
#include "mlir/CAPI/Utils.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
using namespace mlir;
|
||||
using namespace circt;
|
||||
|
||||
MlirLogicalResult mlirExportVerilog(MlirModule module,
|
||||
MlirStringCallback callback,
|
||||
void *userData) {
|
||||
detail::CallbackOstream stream(callback, userData);
|
||||
return wrap(exportVerilog(unwrap(module), stream));
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
add_circt_library(CIRCTCAPISV
|
||||
|
||||
SVDialect.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
${MLIR_MAIN_INCLUDE_DIR}/mlir-c
|
||||
|
||||
LINK_LIBS PUBLIC
|
||||
MLIRCAPIIR
|
||||
CIRCTSV
|
||||
)
|
|
@ -0,0 +1,23 @@
|
|||
//===- SVDialect.cpp - C Interface for the SV Dialect -------------------===//
|
||||
//
|
||||
// Implements a C Interface for the SV Dialect
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "circt-c/SVDialect.h"
|
||||
#include "circt/Dialect/SV/SVDialect.h"
|
||||
#include "mlir-c/IR.h"
|
||||
#include "mlir/CAPI/IR.h"
|
||||
#include "mlir/CAPI/Support.h"
|
||||
|
||||
void mlirContextRegisterSVDialect(MlirContext context) {
|
||||
unwrap(context)->getDialectRegistry().insert<circt::sv::SVDialect>();
|
||||
}
|
||||
|
||||
MlirDialect mlirContextLoadSVDialect(MlirContext context) {
|
||||
return wrap(unwrap(context)->getOrLoadDialect<circt::sv::SVDialect>());
|
||||
}
|
||||
|
||||
MlirStringRef mlirSVDialectGetNamespace() {
|
||||
return wrap(circt::sv::SVDialect::getDialectNamespace());
|
||||
}
|
|
@ -11,4 +11,6 @@ target_link_libraries(circt-capi-ir-test
|
|||
|
||||
MLIRCAPIRegistration
|
||||
MLIRPublicAPI
|
||||
CIRCTCAPISV
|
||||
CIRCTCAPIExportVerilog
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue