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

Reply via email to