= CLANG = [[TOC(Projects/CLANG, depth=2)]] This page is intended to capture notes and information about using [http://clang.llvm.org/ Clang] to compile RTEMS. All supporting files, patches, replacement files, etc. needed should be in http://www.rtems.org/ftp/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 * [http://llvm.org/bugs/show_bug.cgi?id=10300 PR10300]. * 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 * [http://llvm.org/bugs/show_bug.cgi?id=10299 PR10299]. * 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. * [http://llvm.org/bugs/show_bug.cgi?id=10298 PR10298]. * 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 }}} 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 $? }}} 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. = Building RTEMS = I have not successfully built RTEMS yet. I assume the problem is that I must pass in some combination of CC, CC_FOR_TARGET, and CC_FOR_BUILD in a way that makes the RTEMS build happy. = References = * [http://clang.llvm.org/ Clang Page] * [https://www.studentrobotics.org/trac/wiki/Beagleboard_DSP/Building TIC6x+Newlib Toolchain Build Instructions]