Re: multiple board support


CHRISTIAN TOMAS TENLLADO VAN DER REIJDEN
 

Thank you very much Jason, it was indeed very helpful. Just for
reference, the piece of "code" in the CMakeLists.txt file can be:

if (${CONFIG_BOARD_QEMU_X86})
set(EXTRA_CFLAGS <flags for this board>)
elseif (${CONFIG_BOARD_DISCO_L475_IOT1})
set(EXTRA_CFLAGS <flags for this board>)
endif()

There is however something that was not clear in my OP. I do not need
the extra flags for the zephyr part, but for a library I am trying to
add to my project. For instance some boards may not support floating
point instructions and you have to compile with the -msoft-float flag
and others may have other flags needed.

The problem is that the flags selected by zephyr are not used by
default for my own code. That is why my first attempt was to get and
use the compiler flags selected by zephyr, but it turns out that using
the zephyr_get_compile_options_for_lang(C options) includes the name
of a .h file in the flags list and that breaks the compilation of the
library.

I am probably doing something wrong here, but I cannot find the
"correct way to do it". Something that could also be very useful for
me is an example project that includes support for several boards with
different architectures, but I could not find one.

Again, thank you very much, I am struggling with the compilation
system of zephyr and your answer was of great help.

Regards,

Christian.

On Tue, Jun 14, 2022 at 9:29 AM Jason Bens <Jason.Bens@...> wrote:

Hi Christian,

You may be able to simplify your conditional statement by instead testing for the presence of CONFIG_BOARD_QEMU_X86 or CONFIG_BOARD_DISCO_L475_IOT1. These should be set somewhere in a *_defconfig file in each SoC's board subdirectory, and so will only be set for the currently compiling board.

Unfortunately, I haven't had the need to set board-specific compilation flags, yet. Were I to try that, as a first attempt I would probably copy the relevant board subdirectories into my project and add these extra flags to the new boards' CMakeLists files. That way, the modified flags are tracked in my project while also being logically contained by the specific board they're relevant to. I rationalize this apparent duplication by figuring that my board is similar to the provided boards in the boards directory, but, as I need custom flags or configurations, it clearly isn't identical. Thus, we require a new board to be defined. Take this advice with a grain of salt, however, as I still consider myself an amateur when it comes to Zephyr's build system.

Hopefully, that helps get you started,

- Jason


-----Original Message-----
From: users@... <users@...> On Behalf Of CHRISTIAN TOMAS TENLLADO VAN DER REIJDEN
Sent: June 13, 2022 6:02 PM
To: users@...
Subject: [Zephyr-users] multiple board support

External Email:

Hello:

I am having some troubles compiling my project. I want to support several boards and therefore I have a boards directory with a .conf file for each board in which I can punt the CONFIG* entries specific for that board. But then I also need to select specific compilation flags that depend on the architecture of the SoC in each board.

I have tried using the flags from zephyr with zephyr_get_compile_options_for_lang(C options), but it turns out that the name of a file is included in the options variable and then I get compiling errors from cmake.

I am thinking in using something like this:

if ( <check_board> EQUAL "qemu_x86")
set(EXTRA_CFLAGS <flags specific to qemu_x86>) elseif (<check_board> EQUAL "disco_l475_iot1")
set(EXTRA_CFLAGS <flags specific to qemu_x86>)
endif()

<check_board> should be replaced by some variable check that contains the name of the board selected in the west build command line. What is that variable?

Is there a better way to approach this? I mean, having a project that you want to be able to compile for several boards with different SoC architectures for which you have to use specific compiler flags.

Thank you all in advance.

Regards,

Christian Tenllado




Join users@lists.zephyrproject.org to automatically receive all group messages.