Amar Takhar commented: https://gitlab.rtems.org/rtems/programs/gsoc/-/issues/56#note_123076 # Contents of old wiki page for reference This page is intended to capture notes and information about using [Clang](http://clang.llvm.org/) to compile RTEMS. All supporting files, patches, replacement files, etc. needed should be in https://ftp.rtems.org/pub/rtems/people/joel/clang/. If something is missing, let Joel know. # Development Log # Open Issues These are issues in clang for them to address: - newlib uses pragma warning which clang does not know - [PR10300](http://llvm.org/bugs/show_bug.cgi?id=10300). - Reported 2011-07-07 to http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-July/date.html - clang does not know registers used in RTEMS i386 FP context macros - [PR10299](http://llvm.org/bugs/show_bug.cgi?id=10299). - Reported 2011-07-07 to http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-July/016022.html - clang does not preprocess score/cpu/i386/cpu_asm.S the same as gcc. Generates incorrect code. - [PR10298](http://llvm.org/bugs/show_bug.cgi?id=10298). - Initially reported 2011-07-07 to http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-July/016019.html These are issues in clang for us to address: - clang does not know the RTEMS include paths. No immediate solution. - clang when targeting i386-rtems needs to define **USER_LABEL_PREFIX**. Other ports probably have something similar and something like a register prefix macro. - clang has problem to handle the "-B" option which does not search the header files under the directory include specified by option "-B". These are issues in newlib: - newlib has warnings for PTHREAD_MUTEX_xxx being redefined - need to submit patch. - newlib has warnings in rtems specific crt0.c - need to submit patch. There are the issues identified so far in RTEMS: - Remove dependency on -specs or change the format of -specs option from "-specs specs_file" by default to "-specs=specs_file". # Commit History **2011-07-07**: Small patch to make sure **rtems** was defined was committed. **2011-07-01**: The initial patches which add RTEMS support to clang and llvm (clang-rtems-20110629.diff and llvm-rtems-20110629.diff) were merged. This was reported in http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-July/015913.html # Base Tools For now, you need the regular RTEMS toolchain installed. We are using the normal RTEMS binutils and gdb. In addition, the way I have been building requires using the CPU-rtems4.11-gcc as a helper wrapper. # Building Clang Check out LLVM and Clang using the instructions at http://clang.llvm.org/get_started.html#build. In my case, I started in a working directory (_/users/joel/llvm_) and checked out into _/users/joel/llvm/llvm_. After the checkout completed, I performed the following commands: ``` cd /users/joel/llvm mkdir b-llvm cd b-llvm ../llvm/configure --prefix=/users/joel/llvm/install make make install ``` **UPDATE (7/30/19):** _configure_ is no longer supported. cmake is used instead. Try the following command instead of the configure line above: ``` cmake -DCMAKE_INSTALL_PREFIX=/users/joel/llvm/install -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm ``` And then you can `make && make install`. (You should also pass -j option to make for a faster build.) After this completed, I ensured that my PATH included /opt/rtems-4.11/bin and /users/joel/llvm/install/bin for subsequent builds. # Building Newlib With Clang I created a script file named _/users/joel/llvm/j-newlib_ with the following contents. ``` CPU=i386 ../newlib-1.19.0/configure --host=${CPU}-rtems4.11 \ --prefix=/users/joel/llvm/install \ --with-newlib \ CC="clang -ccc-host-triple ${CPU}-rtems4.11 -ccc-gcc-name ${CPU}-rtems4.11-gcc" \ CC_FOR_TARGET="clang -ccc-host-triple ${CPU}-rtems4.11 -ccc-gcc-name ${CPU}-rtems4.11-gcc" \ CC_FOR_BUILD="clang " \ PONIES=true \ AR=${CPU}-rtems4.11-ar \ AS=${CPU}-rtems4.11-as >c.log 2>&1 && \ make -j4 >b.log 2>&1 && \ make install >i.log 2>&1 echo $? ``` **UPDATE (7/30/19):** _-ccc-host-triple_ is no longer supported. Replace with _-target_ instead. newlib must be patched as appropriate for the version of RTEMS being built. I used the _j-newlib_ script to build newlib as follows: ``` cd /users/joel/llvm mkdir b-newlib cd b-newlib sh -x ../j-newlib ``` clang cannot build the file newlib/libc/sys/rtems/crt0.c. There is a replacement of that file on the ftp site. I am not sure if this is a clang bug, questionable code in crt0.c or a combination of the two. **UPDATE (7/30/19):** clang can now build crt0.c from newlib. # Building RTEMS I have successfully built RTEMS follow the command below from a build directory parallel to your RTEMS source tree (e.g., /users/joel/b-rtems) ``` CPU=i386 ../rtems/configure --target=${CPU}-rtems4.11 \ --prefix=/users/joel/llvm/install \ AR=${CPU}-rtems4.11-ar \ AS=${CPU}-rtems4.11-as \ CC_FOR_BUILD="clang " \ CC_FOR_TARGET="clang -ccc-host-triple ${CPU}-rtems4.11 -ccc-gcc-name ${CPU}-rtems4.11-gcc " \ CC_FOR_HOST="clang -ccc-host-triple ${CPU}-rtems4.11 -ccc-gcc-name ${CPU}-rtems4.11-gcc " >c.log 2>&1 make RTEMS_BSP="pc386" >b.log 2>&1 ``` _UPDATE (7/30/19):_ I had to provide the path to the installed newlib header files. I did this by providing a CPATH environment variable, for example ``` export CPATH=/users/joel/llvm/install/i386-rtems5/include ``` There are maybe some bugs in the rtems configure system. when attach the CC_FOR_TARGET,CC_FOR_BUILD flags to the cofigure command, it will generate some config.status inside which will add CC="cross compiler" to every subdir,but some subdir do not expect this CC, like in dir i386-rtems4.11/c/pc386/lib/libbsp/i386/pc386/tools. It contains some host code compiled by host compiler which should be auto detected, if you add CC="cross compiler" it will failed, So if you encounter this error you need delete the CC="cross compiler" command in the file i386-rtems4.11/c/pc386/lib/libbsp/i386/pc386/config.status for tools. # References - [Clang Page](http://clang.llvm.org/) - [TIC6x+Newlib Toolchain Build Instructions](https://www.studentrobotics.org/trac/wiki/Beagleboard_DSP/Building) -- View it on GitLab: https://gitlab.rtems.org/rtems/programs/gsoc/-/issues/56#note_123076 You're receiving this email because of your account on gitlab.rtems.org.
_______________________________________________ bugs mailing list bugs@rtems.org http://lists.rtems.org/mailman/listinfo/bugs