add MLIR: compile/link/run (#342)
* add MLIR: compile/link/run * change LLVMPROJECT to LLVM_PROJECT and do not allow linking with system LLVM libraries
This commit is contained in:
parent
85bf198681
commit
f3207be963
|
@ -0,0 +1,86 @@
|
|||
add_definitions(-DBOOST_LOG_DYN_LINK)
|
||||
|
||||
add_library(builder
|
||||
sgir.cpp
|
||||
)
|
||||
|
||||
#Flags to link with LLVM/MLIR libraries
|
||||
if(DEFINED ENV{LLVM_PROJECT_ROOT})
|
||||
set(LLVM_PROJECT_ROOT $ENV{LLVM_PROJECT_ROOT})
|
||||
if (EXISTS ${LLVM_PROJECT_ROOT})
|
||||
message(STATUS "LLVM_PROJECT_ROOT " ${LLVM_PROJECT_ROOT})
|
||||
else()
|
||||
message(FATAL_ERROR "The path specified by LLVM_PROJECT_ROOT does not exist: " ${LLVM_PROJECT_ROOT})
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "env variable LLVM_PROJECT_ROOT not set")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{LLVM_PROJECT_LIB})
|
||||
set(LLVM_PROJECT_LIB $ENV{LLVM_PROJECT_LIB})
|
||||
else()
|
||||
set(LLVM_PROJECT_LIB $ENV{LLVM_PROJECT_ROOT}/build/lib)
|
||||
endif()
|
||||
if (EXISTS ${LLVM_PROJECT_LIB})
|
||||
message(STATUS "LLVM_PROJECT_LIB " ${LLVM_PROJECT_LIB})
|
||||
else()
|
||||
message(FATAL_ERROR "The path specified by LLVM_PROJECT_LIB does not exist: " ${LLVM_PROJECT_LIB})
|
||||
endif()
|
||||
|
||||
#include path
|
||||
include_directories(${LLVM_PROJECT_ROOT}/llvm/projects/mlir/include)
|
||||
include_directories(${LLVM_PROJECT_ROOT}/llvm/include)
|
||||
include_directories(${LLVM_PROJECT_ROOT}/build/include)
|
||||
include_directories(${LLVM_PROJECT_ROOT}/build/projects/mlir/include)
|
||||
|
||||
find_library(MLIRLIBANALYSIS
|
||||
NAMES MLIRAnalysis
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBIR
|
||||
NAMES MLIRIR
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBPARSER
|
||||
NAMES MLIRParser
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBTRANSFORMS
|
||||
NAMES MLIRTransforms
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBVECTOROPS
|
||||
NAMES MLIRVectorOps
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBSUPPORT
|
||||
NAMES MLIRSupport
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(MLIRLIBSTANDARDOPS
|
||||
NAMES MLIRStandardOps
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
find_library(LLVMLIBSUPPORT
|
||||
NAMES LLVMSupport
|
||||
PATHS ${LLVM_PROJECT_LIB}
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
#libraries are set according to toy/Ch2
|
||||
set(MLIRLIBS ${MLIRLIBANALYSIS} ${MLIRLIBIR} ${MLIRLIBPARSER} ${MLIRLIBTRANSFORMS}
|
||||
${MLIRLIBANALYSIS} ${MLIRLIBVECTOROPS} ${MLIRLIBIR} ${MLIRLIBSUPPORT} ${MLIRLIBSTANDARDOPS}
|
||||
${LLVMLIBSUPPORT})
|
||||
|
||||
|
||||
target_link_libraries(builder compiler op onnx ${MLIRLIBS} curses)
|
||||
target_include_directories(builder
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/third_party/onnx
|
||||
${CMAKE_SOURCE_DIR})
|
|
@ -0,0 +1,5 @@
|
|||
#include "sgir.hpp"
|
||||
|
||||
//empty module for MLIR is generated to test the compile/link of MLIR code
|
||||
onnf::SGIRTest();
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Copyright 2019 The IBM Research Authors.
|
||||
//
|
||||
// =============================================================================
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <numeric>
|
||||
|
||||
#include "mlir/Analysis/Verifier.h"
|
||||
#include "mlir/Dialect/StandardOps/Ops.h"
|
||||
#include "mlir/IR/Attributes.h"
|
||||
#include "mlir/IR/Builders.h"
|
||||
#include "mlir/IR/Function.h"
|
||||
#include "mlir/IR/Location.h"
|
||||
#include "mlir/IR/MLIRContext.h"
|
||||
#include "mlir/IR/Module.h"
|
||||
#include "mlir/IR/StandardTypes.h"
|
||||
#include "mlir/IR/Types.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/ScopedHashTable.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#include "sgir.hpp"
|
||||
|
||||
using llvm::cast;
|
||||
using llvm::dyn_cast;
|
||||
using llvm::isa;
|
||||
using llvm::ScopedHashTableScope;
|
||||
using llvm::SmallVector;
|
||||
using llvm::StringRef;
|
||||
using llvm::Twine;
|
||||
|
||||
namespace {
|
||||
|
||||
class SGIRGenImpl {
|
||||
public :
|
||||
SGIRGenImpl(mlir::MLIRContext &context)
|
||||
: context(context), builder(&context) {}
|
||||
|
||||
mlir::ModuleOp mlirGen() {
|
||||
theModule = mlir::ModuleOp::create(mlir::UnknownLoc::get(&context));
|
||||
return theModule;
|
||||
}
|
||||
|
||||
private:
|
||||
mlir::MLIRContext &context;
|
||||
mlir::ModuleOp theModule;
|
||||
mlir::OpBuilder builder;
|
||||
|
||||
} ;
|
||||
|
||||
} //namespace
|
||||
|
||||
namespace onnf {
|
||||
|
||||
int SGIRTest() {
|
||||
mlir::MLIRContext context;
|
||||
|
||||
mlir::OwningModuleRef module = SGIRGenImpl(context).mlirGen();
|
||||
if (!module)
|
||||
return 1;
|
||||
module->dump();
|
||||
return 0;
|
||||
}
|
||||
|
||||
} //namespace onnf
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Copyright 2019 The IBM Research Authors.
|
||||
//
|
||||
// =============================================================================
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace mlir {
|
||||
class MLIRContext;
|
||||
class OwningModuleRef;
|
||||
} // namespace mlir
|
||||
|
||||
namespace onnf {
|
||||
/*!
|
||||
* Test dummy
|
||||
* @return status, 0 for success, otherwise failure
|
||||
**/
|
||||
int SGIRTest();
|
||||
|
||||
} //namespace onnf
|
||||
|
Loading…
Reference in New Issue