EPFL-LAP / dynamatic

DHLS (Dynamic High-Level Synthesis) compiler based on MLIR
Other
49 stars 14 forks source link

Unable to complete build. -- Build Failed -- #74

Closed Technorico closed 5 months ago

Technorico commented 5 months ago

Hi everyone, I am unable to get the project compiled. After following the passes of your guide, and launching "./build.sh --release", I get # ===--- Build failed! ---=== The reason of the error reported by build script is: ninja: build stopped: subcommand failed. Scrolling up in the output I found this error, I don't know if it is useful:


[51/150] Building CXX object lib/Suppo...les/obj.DynamaticSupport.dir/RTL.cpp.o
FAILED: lib/Support/CMakeFiles/obj.DynamaticSupport.dir/RTL.cpp.o 
/usr/bin/clang++ -DDYNAMATIC_GUROBI_NOT_INSTALLED -DGTEST_HAS_RTTI=0 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ipath-to-dynamatic-dir/dynamatic/polygeist/llvm-project/llvm/include -Ipath-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/include -Ipath-to-dynamatic-dir/dynamatic/polygeist/llvm-project/mlir/include -Ipath-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/tools/mlir/include -Ipath-to-dynamatic-dir/dynamatic/include -Ipath-to-dynamatic-dir/dynamatic/build/include -Ipath-to-dynamatic-dir/dynamatic/experimental/include -Ipath-to-dynamatic-dir/dynamatic/build/experimental/include -fno-exceptions -fno-rtti -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -std=gnu++17   -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS  -fno-exceptions -funwind-tables -fno-rtti -MD -MT lib/Support/CMakeFiles/obj.DynamaticSupport.dir/RTL.cpp.o -MF lib/Support/CMakeFiles/obj.DynamaticSupport.dir/RTL.cpp.o.d -o lib/Support/CMakeFiles/obj.DynamaticSupport.dir/RTL.cpp.o -c path-to-dynamatic-dir/dynamatic/lib/Support/RTL.cpp
In file included from path-to-dynamatic-dir/dynamatic/lib/Support/RTL.cpp:13:
path-to-dynamatic-dir/dynamatic/include/dynamatic/Support/RTL.h:57:11: error: return type 'dynamatic::RTLType' is an abstract class
  RTLType operator=(const RTLType &) = delete;
  ~~~~~~~ ^

I am using Ubuntu Ubuntu 20.04.6 LTS x64 If you need more information feel free to ask. Thank you in advance for the help.

Jiahui17 commented 5 months ago

maybe try to git checkout a release version and create your own branch from that?

git checkout dynamatic-v2.0.0

Technorico commented 5 months ago

Yep, now I get: # ===--- Build successful! ---=== But I noticed this warning: CMake Warning at CMakeLists.txt:119 (message): Gurobi wasn't found, the buffer placement algorithms that requires solving MILPs will not be built with the project.

And then, when running ninja check-dynamatic, it fails the test:


ninja check-dynamatic
[0/1] Running the Dynamatic regression tests
FAIL: Dynamatic :: Conversion/CfToHandshake/memory.mlir (21 of 21)
******************** TEST 'Dynamatic :: Conversion/CfToHandshake/memory.mlir' FAILED ********************
Exit Code: 2

Command Output (stderr):
--
RUN: at line 2: path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt --lower-cf-to-handshake --remove-operation-names path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir --split-input-file | path-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/bin/FileCheck path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir
+ path-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/bin/FileCheck path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir
+ path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt --lower-cf-to-handshake --remove-operation-names path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir --split-input-file
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.  Program arguments: path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt --lower-cf-to-handshake --remove-operation-names path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir --split-input-file
 #0 0x0000000000419dd7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x419dd7)
 #1 0x0000000000417bbe llvm::sys::RunSignalHandlers() (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x417bbe)
 #2 0x000000000041a73f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fa162478420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00000000005c312b mlir::OperationName::getDialectNamespace() const (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x5c312b)
 #5 0x0000000000b07402 mlir::ConversionTarget::getOpInfo(mlir::OperationName) const (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xb07402)
 #6 0x0000000000b0768f mlir::ConversionTarget::isLegal(mlir::Operation*) const (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xb0768f)
 #7 0x0000000000b12173 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) DialectConversion.cpp:0:0
 #8 0x0000000000b09397 (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef, llvm::function_ref) DialectConversion.cpp:0:0
 #9 0x0000000000b0c8f0 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet>*) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xb0c8f0)
#10 0x0000000000474125 dynamatic::partiallyLowerRegion(llvm::function_ref const&, mlir::Region&) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x474125)
#11 0x000000000047a7f6 (anonymous namespace)::CfToHandshakePass::runDynamaticPass() CfToHandshake.cpp:0:0
#12 0x0000000000458607 dynamatic::DynamaticPass::runOnOperation() (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x458607)
#13 0x0000000000c0c615 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xc0c615)
#14 0x0000000000c0cb98 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xc0cb98)
#15 0x0000000000c0f087 mlir::PassManager::run(mlir::Operation*) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0xc0f087)
#16 0x00000000008cc57f performActions(llvm::raw_ostream&, std::shared_ptr const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#17 0x00000000008cb71b mlir::LogicalResult llvm::function_ref>, llvm::raw_ostream&)>::callback_fn>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_1>(long, std::unique_ptr>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#18 0x00000000008e908e mlir::splitAndProcessBuffer(std::unique_ptr>, llvm::function_ref>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool)::$_0::operator()(llvm::StringRef) const ToolUtilities.cpp:0:0
#19 0x00000000008e8efe mlir::splitAndProcessBuffer(std::unique_ptr>, llvm::function_ref>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x8e8efe)
#20 0x00000000008c7d8a mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x8c7d8a)
#21 0x00000000008c8262 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x8c8262)
#22 0x0000000000409124 main (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x409124)
#23 0x00007fa161eec083 __libc_start_main /build/glibc-wuryBv/glibc-2.31/csu/../csu/libc-start.c:342:3
#24 0x0000000000408d1e _start (path-to-dynamatic-dir/dynamatic/build/bin/dynamatic-opt+0x408d1e)
FileCheck error: '' is empty.
FileCheck command line:  path-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/bin/FileCheck path-to-dynamatic-dir/dynamatic/test/Conversion/CfToHandshake/memory.mlir

--

********************
********************
Failed Tests (1):
  Dynamatic :: Conversion/CfToHandshake/memory.mlir

Testing Time: 0.51s
  Passed: 20
  Failed:  1
FAILED: test/CMakeFiles/check-dynamatic path-to-dynamatic-dir/dynamatic/build/test/CMakeFiles/check-dynamatic 
cd path-to-dynamatic-dir/dynamatic/build/test && /usr/bin/python3.8 path-to-dynamatic-dir/dynamatic/polygeist/llvm-project/build/./bin/llvm-lit -sv path-to-dynamatic-dir/dynamatic/build/test
ninja: build stopped: subcommand failed.

Thank you for the help

Edit: I removed personal information from error codes

Jiahui17 commented 5 months ago

Ok, there are two separate problems here:

First, you need to get and set up a Gurobi license and install Gurobi on your machine to use some of the advanced performance optimization features in this framework, you got that warning because Gurobi is missing; you could check out https://github.com/Jiahui17/dynamatic-scripts (only the Prerequisite: get your Gurobi license section). Gurobi is a commercial MILP solver that also offers a free academic license.

I think the bug in the test is not a huge problem if you want to try out synthesizing and simulating some C kernels (check out https://github.com/EPFL-LAP/dynamatic/blob/main/docs/Tutorials/Introduction/UsingDynamatic.md).

Technorico commented 5 months ago

You are right, the failed test is not a problem. Now the tool runs and for what I tried with tutorials behaves correctly. I suggest to add the git checkout info to Readme file. Thank you very much @Jiahui17 for the help. :thumbsup: