Building a library for use with RTEMS via CMake

Robin Müller robin.mueller.m at gmail.com
Tue Jul 20 09:45:46 UTC 2021


I managed to compile our project with CMake, using this repository:
https://github.com/spacefisch/rtems-cmake
It uses the pkg-config files to set up the cross compiler given the BSP and
RTEMS prefix information.

Maybe this can help you

Kind Regards
Robin

On Tue, 20 Jul 2021 at 00:50, Michael Davidsaver <mdavidsaver at gmail.com>
wrote:

> On 7/19/21 6:17 AM, Andre.Nahrwold at dlr.de wrote:
> > Hello,
> >
> > 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.
> > The tools are added to the PATH variable and RTEMS_BSPS is also
> available in the environment.
> >
> > Now we need to build a library for the use with RTEMS via CMake.
> > For this we wanted to use the toolchain files.
> > Does anybody know how to correctly setup such a toolchain file using the
> RTEMS compiler?
> >
> > We managed to get a toolchain file working which at least built the
> library.
> > 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.
> > Does anybody has a clue where this might origin from?
>
> As it happens, I went through this exercise recently with libevent.
> The main obstacle for me was that the CMake try_compile() command
> actually tries to link an executable.  With RTEMS 5 this can't be
> done generically without also adding '-lrtemsdefaultconfig'.
>
> eg.
>
> > string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " -lrtemsdefaultconfig")
>
> Also, if you use networking you might want to add.
>
> > set(CMAKE_REQUIRED_LIBRARIES "-lbsd")
>
> for eg. CheckFunctionExists.cmake to work correctly.
>
>
> The (fairly complex) result of this all can be found here:
>
> https://github.com/mdavidsaver/pvxs/tree/master/bundle
>
> The essential parts are:
>
> - cmake/RTEMS.cmake@
>
> Template toolchain file.  (expand using definitions from RTEMS makefiles)
>
> - cmake/Platform/
>
> Hooks into the CMake startup process.  The exact interplay between
> Platform/ and toolchain file is... quite involved.  Also not well
> documented.  The best I've found is:
>
>
> https://github.com/Kitware/CMake/blob/f86d8009c6a4482c81221114a2b04b375564cc94/Source/cmGlobalGenerator.cxx#L461-L504
>
>
>
> > Building a RTEMS application which does not use the own library works
> fine.
> >
> > Our toolchain file looks like this:
> >
> > # CMake toolchain file for ARM
> > # The compiler is based on
> > # The RTEMS_BSPS environment variable is expected to be set.
> > set(ARCH arm)
> > set(CMAKE_SYSTEM_NAME RTEMS5)
> >
> > set(CMAKE_CXX_FLAGS "" CACHE STRING "ARM RTEMS5 gcc additional compiler
> flags" FORCE)
> >
> > set(RTEMS_TOOLS_PATH $ENV{RTEMS_BSPS}/../../tools/bin)
> >
> > set(CMAKE_C_COMPILER ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc CACHE PATH "ARM
> RTEMS5 gcc" FORCE)
> > set(CMAKE_CXX_COMPILER ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc CACHE PATH
> "ARM RTEMS5 gcc" FORCE)
> > set(CMAKE_CXX_COMPILER_AR ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc-ar CACHE
> PATH "ARM RTEMS5 ar" FORCE)
> > set(CMAKE_CXX_COMPILER_RANLIB ${RTEMS_TOOLS_PATH}/arm-rtems5-gcc-ranlib
> CACHE PATH "ARM RTEMS5 gcc ranlib" FORCE)
> > set(CMAKE_RANLIB ${RTEMS_TOOLS_PATH}/arm-rtems5-ranlib CACHE PATH "ARM
> RTEMS5 ranlib" FORCE)
> > set(CMAKE_READELF ${RTEMS_TOOLS_PATH}/arm-rtems5-readelf CACHE PATH "ARM
> RTEMS5 readelf" FORCE)
> > set(CMAKE_STRIP ${RTEMS_TOOLS_PATH}/arm-rtems5-strip CACHE PATH "ARM
> RTEMS5 strip" FORCE)
> > set(CMAKE_ADDR2LINE ${RTEMS_TOOLS_PATH}/arm-rtems5-addr2line CACHE PATH
> "ARM RTEMS5 addr2line" FORCE)
> > set(CMAKE_LINKER ${RTEMS_TOOLS_PATH}/arm-rtems5-ld CACHE PATH "ARM
> RTEMS5 ld" FORCE)
> > set(CMAKE_NM ${RTEMS_TOOLS_PATH}/arm-rtems5-nm CACHE PATH "ARM RTEMS5
> nm" FORCE)
> > set(CMAKE_OBJCOPY ${RTEMS_TOOLS_PATH}/arm-rtems5-objcopy CACHE PATH "ARM
> RTEMS5 objcopy" FORCE)
> > set(CMAKE_OBJDUMP ${RTEMS_TOOLS_PATH}/arm-rtems5-objdump CACHE PATH "ARM
> RTEMS5 objdump" FORCE)
> >
> > set(CMAKE_TARGET_CONFIG_POSTFIX .rtems5_gcc_arm)
> >
> > Best regards
> > Andre Nahrwold
> > --------------------------
> > Deutsches Zentrum für Luft- und Raumfahrt e. V. (DLR)
> > German Aerospace Center
> > Institute for Software Technolog | SRV-OSS BS | Lilienthalpl. 7 | 38108
> Braunschweig | Geb. 112C Raum 001
> > M.Sc. Andre Nahrwold | Telephone +49 531 295-3834 |
> andre.nahrwold at dlr.de
> > DLR.de
> >
> > _______________________________________________
> > users mailing list
> > users at rtems.org
> > http://lists.rtems.org/mailman/listinfo/users
> >
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210720/197be1d8/attachment.html>


More information about the devel mailing list