intel / systemc-compiler

This tool translates synthesizable SystemC code to synthesizable SystemVerilog.
Other
244 stars 35 forks source link

Header cassert not found #52

Closed isv75 closed 1 year ago

isv75 commented 1 year ago

Steps to reproduce:

export $ICSC_HOME=/tmp/icsc
git clone https://github.com/intel/systemc-compiler $ICSC_HOME
cd $ICSC_HOME
git checkout 59d79d7
./install.sh

The compilation will run until "Generating SystemC precompiled header...." is output. It then terminates by "fatal error: 'cassert' file not found".

Running make VERBOSE=1from $ICSC_HOME/build_icsc_rel`, it reveals the compilation command to be:

../bin/clang++ -Xclang -emit-pch -x c++-header /mnt/data/projects/intel-systemc/icsc/systemc/src/systemc.h -o /mnt/data projects/intel-systemc/icsc/build_icsc_rel/systemc/systemc.h.pch -D__SC_TOOL -DSC_TOOL_ANALYZE__ -DNDEBUG -std=c++17 -I/mnt/data/projects/intel-systemc/icsc/systemc/src

Adding -v to this compile command:

clang version 12.0.1 (https://github.com/intel/systemc-compiler 59d79d73890d321aec6c9b25cf9c0e0e2039c70c)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /mnt/data/projects/intel-systemc/icsc/build_icsc_rel/../bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
 (in-process)
 "/mnt/data/projects/intel-systemc/icsc/bin/clang-12" -cc1 -triple x86_64-unknown-linux-gnu -emit-pch -disable-free -main-file-name systemc.h -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -v -resource-dir /mnt/data/projects/intel-systemc/icsc/lib/clang/12.0.1 -D __SC_TOOL__ -D __SC_TOOL_ANALYZE__ -D NDEBUG -I /mnt/data/projects/intel-systemc/icsc/systemc/src -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++ -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/x86_64-linux-gnu -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/backward -internal-isystem /usr/local/include -internal-isystem /mnt/data/projects/intel-systemc/icsc/lib/clang/12.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++17 -fdeprecated-macro -fdebug-compilation-dir /mnt/data/projects/intel-systemc/icsc/build_icsc_rel -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -emit-pch -faddrsig -o /mnt/data/projects/intel-systemc/icsc/build_icsc_rel/systemc/systemc.h.pch -x c++-header /mnt/data/projects/intel-systemc/icsc/systemc/src/systemc.h
clang -cc1 version 12.0.1 based upon LLVM 12.0.1 default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/backward"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /mnt/data/projects/intel-systemc/icsc/systemc/src
 /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++
 /usr/local/include
 /mnt/data/projects/intel-systemc/icsc/lib/clang/12.0.1/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
isv75 commented 1 year ago

This is not really an issue with ICSC, but it would be nice if the documentation/README could say something about this:

I am using GCC version 11 and have installed proper headers to that version. However, some other package (probably NVIDIA) have installed GCC 12 without headers. LLVM/Clang will always select the newest gcc version.

As shown in the verbose compile output, clang will try to find version 12 headers. The search path is shown running clang -v:

Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12 ... /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++

The correct search should have been:

/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12

To resolve, install the headers, for example libstdc++-12-dev.

mikhailmoiseev commented 1 year ago

Looks like no opens here, so close it.