<div dir="ltr"><div><div>tems-cmake uses the toolchain file functionality which takes
care of finding the RTEMS compiler and add the required flags for RTEMS.</div></div><div>If
the CMakeLists.txt belongs to a library, I would guess you will compile
it as part of a (dummy) project and you can still edit the top
CMakeLists.txt?</div><div>If you still need a custom toolchain file you
can probably write your own toolchain file and then include the
rtems-cmake toolchain file but I have never</div><div>tested doing something like that.<br></div><div><br></div><div>As long as your library does not require setting another toolchain file as well, compiling it should not be an issue.</div><div><br></div><div>Kind Regards</div><font color="#888888"><div>Robin</div></font></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 21 Jul 2021 at 16:48, Robin Müller <<a href="mailto:robin.mueller.m@gmail.com">robin.mueller.m@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>rtems-cmake uses the toolchain file functionality which takes care of finding the RTEMS compiler and add the required flags for RTEMS.</div></div><div>If the CMakeLists.txt belongs to a library, I would guess you will compile it as part of a (dummy) project and you can still edit the top CMakeLists.txt?</div><div>If you still need a custom toolchain file you can probably write your own toolchain file and then include the rtems-cmake toolchain file but I have never</div><div>tested doing something like that.<br></div><div><br></div><div>As long as your library does not require setting another toolchain file as well, compiling it should not be an issue.</div><div><br></div><div>Kind Regards</div><div>Robin<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 20 Jul 2021 at 13:07, <<a href="mailto:Andre.Nahrwold@dlr.de" target="_blank">Andre.Nahrwold@dlr.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div lang="DE">
<div>
<p class="MsoNormal"><span>Hey guys,<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">that was so far very helpful in understanding the problem in more depth.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Putting in the right flags at least reduced the linker errors by nearly 99% or so, Thanks.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Maybe I am on the right path now and just need to tweak it a bit to make it work.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">The rtems-cmake repository looks also very promising to me, I surely have to dig deeper into the processes going on there.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Problem is that I should (ideally) not change the CMakeLists.txt from the library so it stays independent.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Do you have any thoughts on that Robin?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Do you think wrapping the library CMakeLists.txt in another one which then uses the repository might work?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">But I realized that I have missed some information while explaining this issue.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">The RTEMS application itself is built with SCons and therefore the desired build environment (flags and so forth) is already defined within a python dictionary.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Now we need to somehow build the library via CMake using the established environment, install and link against it via SCons.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Do you have worked with something like this before?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Best regards<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">André<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><b>Von:</b> devel <<a href="mailto:devel-bounces@rtems.org" target="_blank">devel-bounces@rtems.org</a>> <b>Im Auftrag von
</b>Robin Müller<br>
<b>Gesendet:</b> Dienstag, 20. Juli 2021 11:46<br>
<b>An:</b> Michael Davidsaver <<a href="mailto:mdavidsaver@gmail.com" target="_blank">mdavidsaver@gmail.com</a>>; <a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<b>Betreff:</b> Re: Building a library for use with RTEMS via CMake<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">I managed to compile our project with CMake, using this repository:
<a href="https://github.com/spacefisch/rtems-cmake" target="_blank">https://github.com/spacefisch/rtems-cmake</a>
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It uses the pkg-config files to set up the cross compiler given the BSP and RTEMS prefix information.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Maybe this can help you<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Kind Regards<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Robin<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, 20 Jul 2021 at 00:50, Michael Davidsaver <<a href="mailto:mdavidsaver@gmail.com" target="_blank">mdavidsaver@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">On 7/19/21 6:17 AM, <a href="mailto:Andre.Nahrwold@dlr.de" target="_blank">
Andre.Nahrwold@dlr.de</a> wrote:<br>
> Hello,<br>
> <br>
> I have built RTEMS 5 and its tools for the Xilinx Zynq Zedboard and installed the BSP and tools at a certain position on my machine.<br>
> The tools are added to the PATH variable and RTEMS_BSPS is also available in the environment.<br>
> <br>
> Now we need to build a library for the use with RTEMS via CMake.<br>
> For this we wanted to use the toolchain files.<br>
> Does anybody know how to correctly setup such a toolchain file using the RTEMS compiler?<br>
> <br>
> We managed to get a toolchain file working which at least built the library.<br>
> But when we wanted to link to this library during compilation of a RTEMS application we got a bunch of errors due to undefined references to standard library functions.<br>
> Does anybody has a clue where this might origin from?<br>
<br>
As it happens, I went through this exercise recently with libevent.<br>
The main obstacle for me was that the CMake try_compile() command<br>
actually tries to link an executable. With RTEMS 5 this can't be<br>
done generically without also adding '-lrtemsdefaultconfig'.<br>
<br>
eg.<br>
<br>
> string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " -lrtemsdefaultconfig")<br>
<br>
Also, if you use networking you might want to add.<br>
<br>
> set(CMAKE_REQUIRED_LIBRARIES "-lbsd")<br>
<br>
for eg. CheckFunctionExists.cmake to work correctly.<br>
<br>
<br>
The (fairly complex) result of this all can be found here:<br>
<br>
<a href="https://github.com/mdavidsaver/pvxs/tree/master/bundle" target="_blank">https://github.com/mdavidsaver/pvxs/tree/master/bundle</a><br>
<br>
The essential parts are:<br>
<br>
- <a href="mailto:cmake/RTEMS.cmake@" target="_blank">cmake/RTEMS.cmake@</a><br>
<br>
Template toolchain file. (expand using definitions from RTEMS makefiles)<br>
<br>
- cmake/Platform/<br>
<br>
Hooks into the CMake startup process. The exact interplay between<br>
Platform/ and toolchain file is... quite involved. Also not well<br>
documented. The best I've found is:<br>
<br>
<a href="https://github.com/Kitware/CMake/blob/f86d8009c6a4482c81221114a2b04b375564cc94/Source/cmGlobalGenerator.cxx#L461-L504" target="_blank">https://github.com/Kitware/CMake/blob/f86d8009c6a4482c81221114a2b04b375564cc94/Source/cmGlobalGenerator.cxx#L461-L504</a><br>
<br>
<br>
<br>
> Building a RTEMS application which does not use the own library works fine.<br>
> <br>
> Our toolchain file looks like this:<br>
> <br>
> # CMake toolchain file for ARM<br>
> # The compiler is based on<br>
> # The RTEMS_BSPS environment variable is expected to be set.<br>
> set(ARCH arm)<br>
> set(CMAKE_SYSTEM_NAME RTEMS5)<br>
> <br>
> set(CMAKE_CXX_FLAGS "" CACHE STRING "ARM RTEMS5 gcc additional compiler flags" FORCE)<br>
> <br>
> set(RTEMS_TOOLS_PATH $ENV{RTEMS_BSPS}/../../tools/bin)<br>
> <br>
> set(CMAKE_C_COMPILER ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc CACHE PATH "ARM RTEMS5 gcc" FORCE)<br>
> set(CMAKE_CXX_COMPILER ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc CACHE PATH "ARM RTEMS5 gcc" FORCE)<br>
> set(CMAKE_CXX_COMPILER_AR ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc-ar CACHE PATH "ARM RTEMS5 ar" FORCE)<br>
> set(CMAKE_CXX_COMPILER_RANLIB ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc-ranlib CACHE PATH "ARM RTEMS5 gcc ranlib" FORCE)<br>
> set(CMAKE_RANLIB ${RTEMS_TOOLS_PATH}/arm-rtems5-ranlib CACHE PATH "ARM RTEMS5 ranlib" FORCE)<br>
> set(CMAKE_READELF ${RTEMS_TOOLS_PATH}/arm-rtems5-readelf CACHE PATH "ARM RTEMS5 readelf" FORCE)<br>
> set(CMAKE_STRIP ${RTEMS_TOOLS_PATH}/arm-rtems5-strip CACHE PATH "ARM RTEMS5 strip" FORCE)<br>
> set(CMAKE_ADDR2LINE ${RTEMS_TOOLS_PATH}/arm-rtems5-addr2line CACHE PATH "ARM RTEMS5 addr2line" FORCE)<br>
> set(CMAKE_LINKER ${RTEMS_TOOLS_PATH}/arm-rtems5-ld CACHE PATH "ARM RTEMS5 ld" FORCE)<br>
> set(CMAKE_NM ${RTEMS_TOOLS_PATH}/arm-rtems5-nm CACHE PATH "ARM RTEMS5 nm" FORCE)<br>
> set(CMAKE_OBJCOPY ${RTEMS_TOOLS_PATH}/arm-rtems5-objcopy CACHE PATH "ARM RTEMS5 objcopy" FORCE)<br>
> set(CMAKE_OBJDUMP ${RTEMS_TOOLS_PATH}/arm-rtems5-objdump CACHE PATH "ARM RTEMS5 objdump" FORCE)<br>
> <br>
> set(CMAKE_TARGET_CONFIG_POSTFIX .rtems5_gcc_arm)<br>
> <br>
> Best regards<br>
> Andre Nahrwold<br>
> --------------------------<br>
> Deutsches Zentrum für Luft- und Raumfahrt e. V. (DLR)<br>
> German Aerospace Center<br>
> Institute for Software Technolog | SRV-OSS BS | Lilienthalpl. 7 | 38108 Braunschweig | Geb. 112C Raum 001<br>
> M.Sc. Andre Nahrwold | Telephone +49 531 295-3834 | <a href="mailto:andre.nahrwold@dlr.de" target="_blank">
andre.nahrwold@dlr.de</a><br>
> DLR.de<br>
> <br>
> _______________________________________________<br>
> users mailing list<br>
> <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
> <br>
<br>
_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</blockquote></div>
</blockquote></div>