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:
TONG CHEN 2019-09-30 10:29:15 -04:00 committed by Doru Bercea
parent 85bf198681
commit f3207be963
4 changed files with 186 additions and 0 deletions

View File

@ -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})

View File

@ -0,0 +1,5 @@
#include "sgir.hpp"
//empty module for MLIR is generated to test the compile/link of MLIR code
onnf::SGIRTest();

69
src/builder/sgir.cpp Normal file
View File

@ -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

26
src/builder/sgir.hpp Normal file
View File

@ -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