<div dir="ltr"><div>I managed to compile our project with CMake, using this repository: <a href="https://github.com/spacefisch/rtems-cmake">https://github.com/spacefisch/rtems-cmake</a> <br></div><div>It uses the pkg-config files to set up the cross compiler given the BSP and RTEMS prefix information.<br></div><div><br></div><div>Maybe this can help you</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 00:50, Michael Davidsaver <<a href="mailto:mdavidsaver@gmail.com">mdavidsaver@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">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" rel="noreferrer" target="_blank">https://github.com/mdavidsaver/pvxs/tree/master/bundle</a><br>
<br>
The essential parts are:<br>
<br>
- cmake/RTEMS.cmake@<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" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a></blockquote></div>