Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 1 month ago.
Custom Targets
Hi,
I'm trying to add custom targets to my mbed program. I followed the documentation on this page: https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/mbed_targets/
I added a "custom_targets.json" file to the root of my mbed project and defined the custom targets I needed. I then tried to statically compile the mbed-os library by calling:
mbed compile -t GCC_ARM -m CUSTOM_MCU library source=mbed-os build=./BUILD
I get an error saying that my CUSTOM_MCU is not a supported target... even though it's in my custom_targets.json file.
How does one add custom targets?
Additionally, if I have a program that must support various targets and features can I name a directory in my program TARGET_CUSTOM_MCU and it will only be built if the build target is CUSTOM_MCU? Similarly, can I preface other directories with FEATURE_CUSTOM to only build when the build target has the CUSTOM feature?
The documentation on the Testing page (https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/testing/#building-process) hints that this functionality exists:
"Test discovery also obeys the same rules that are used when building your project. This means that tests that are placed under a directory with a prefix such as TARGET_, TOOLCHAIN_ or FEATURE_ will only be discovered, built and run if your current configuration matches this prefix."
1 Answer
7 years, 1 month ago.
So I've just tested this against Mbed OS 5.6 and creating a custom target through custom_targets.json
works fine for me. I've put the file in the root of my project. Are you on an older version of Mbed OS?
Regarding FEATURE, yes this is included based on the name on file system and the list of features the board supports. You can set this either through the target configuration or by setting target.features_add
in mbed_app.json.
Regarding TARGET... I think this is based on the extra_labels
configuration.
I just synced my mbed-os fork with the official github so I'm up to date... I fixed the issue by moving the custom_targets.json file to the root directory of my mbed-os folder...
My project is structured like:
Project Directory | - custom_targets.json <------ BAD!!! - mbed-os --- custom_targets.json <----- MOVE HERE!!! - mbed-dsp - other libs - families --- device_1 --- device_2
For future reference to anyone who stumbles on this question:
mbed CLI will take into consideration your build configuration (targets, features, etc) when discovering files to build. For example, you can make reusable APIs for sensors/features and then have a HAL/device-specific driver by putting that code in TARGET_KL26 or whatever platform you're using.
This works with features as well ie: any code in a FEATURE_CUSTOM folder will only be built if the build target has the "custom" feature. There is one caveat - mbed CLI only allows a certain keywords to be in the features list. You can add your own by looking at init.py in mbed-os/tools/config/
I added a custom_config.py script in that directory and just appended my custom features list to the allowed_features global in init.py and then mbed CLI won't complain about your custom feature attributes.
posted by 06 Oct 2017
It seems that for 5.9.2 you can and should put the custom_targets.json file in the root directory of the project just as stated on the documentation page..
posted by Tomasz CEDRO 09 Jul 2018