Commit Graph

5899 Commits (5e5e1568bebdad30fa695a42f45922ddb007dad0)

Author SHA1 Message Date
Bogdan Marinescu 5e5e1568be Fixed description on 'default_toolchain' in the documentation 2016-05-23 17:37:09 +03:00
Bogdan Marinescu cdfa46c790 Fixes to the new targets code
It is now possible to remove a macro using "_remove" for both macros
without vale (MACRO) and macros with value (MACRO=VALUE) simply by
specifying the macro name.
2016-05-20 17:27:43 +03:00
Bogdan Marinescu 96b03b92a3 Added documentation for JSON target descriptions 2016-05-17 17:26:49 +03:00
Bogdan Marinescu 7c57269dcf Moved target definitions to JSON format
(long commit message ahead. Sorry about that, it can't be helped.)

This commit changs targets definition from Python to JSON format, as
part of the configuration mechanism implementation. There is a new file
under tools/ called "targets.json" which contains the target
definitions. "targets.py" remains, but becomes a wrapper on top of
"targets.json", with the same interface as before. This has the
advantage of not requiring code changes outside "targets.py".

Most of the JSON definitions of targets were automatically generated by a
script (available upon request since it doesn't make a lot of sense to
include it here), only those targets that had more than one parent in
the Python implementation were converted by hand. The target definitions
should be pretty self-explanatory. A number of things are different in
the JSON implementation (this is just a summary, a separate commit that
documents how to write target definitions will follow later):

- "program_cycle_s" is now a value (as opposed to a function in the
Python implementation), since it only returned a number in all the
Python target implementations. The main definition that actually contains
some code (in class "Target") remains in target.py
- array values in "macros" and "extra_labels" can be modified
dynamically. Values can be added using "macros_add" and
"extra_labels_add" or removed using "macros_remove" and
"extra_labels_remove". This mechanism is available for all attributes
with a list type, but it's currently enabled only for "macros" and
"extra_labels" to keep things simple.
- "init_hooks"/"binary_hook" are now implemented in terms of a single
JSON key valled "post_binary_hook". The corresponding code is also in
"targets.py", under the various TargetCode classes (see for example
LPC4088Code in targets.py).

Just like in the Python implementation, a target can inherit from zero,
one or more targets. The resolution order for the target's attributes
follows the one used by the Python code (I used
http://makina-corpus.com/blog/metier/2014/python-tutorial-understanding-python-mro-class-search-path
as a reference for the implementation of resolution order).

This is obviously a very dangerous commit, since it affects all targets.
Unfortunately, since mbed-os only compiles for K64F, I didn't have many
chances to try to compile mbed-os with different targets. I did it for
K64F in different scenarios (pretending that it has hooks, for example),
but there's definitely a lot more to be done there. The threaded blinky
example for K64F compiles and works.

I tried to test in a different way: I wrote a script that imports the
old (Python) and the new (JSON) implementations and verifies that the
attributes in the old implementations exist and have the same values
in the new implementations (it also verifies that the attribute
resolution order is the same in the two implementations). If you're
interested, the script is here:

https://gist.github.com/bogdanm/4caf3a11613dcec834b05d5ab87c65dc

And the results of running the script are below (note that the script
outputs only the target names that were found to be problematic):

F51_MICROBIT_BOOT:
    Resolution order is different in old and new
        old: ['NRF51_MICROBIT_BOOT', 'MCU_NRF51_16K_BOOT_S110', 'MCU_NRF51_16K_BOOT_BASE', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target', 'MCU_NRF51_S110']
        new: ['NRF51_MICROBIT_BOOT', 'MCU_NRF51_16K_BOOT_S110', 'MCU_NRF51_S110', 'MCU_NRF51_16K_BOOT_BASE', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target']
    'extra_labels' has different values in old and new
        old: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NORDIC_16K', 'MCU_NRF51_16K', 'MCU_NRF51_16K_BOOT', 'MCU_NRF51_16K_S110', 'NRF51_MICROBIT']
        new: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NORDIC_16K', 'MCU_NRF51_16K', 'MCU_NRF51_16K_S110', 'MCU_NRF51_16K_BOOT', 'NRF51_MICROBIT']
    'macros' has different values in old and new
        old: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_MCU_NRF51_16K_BOOT', 'TARGET_OTA_ENABLED', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_NRF51_MICROBIT', 'TARGET_NRF_LFCLK_RC']
        new: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_MCU_NRF51_16K_BOOT', 'TARGET_OTA_ENABLED', 'TARGET_NRF51_MICROBIT', 'TARGET_NRF_LFCLK_RC']
NRF51_MICROBIT:
    Resolution order is different in old and new
        old: ['NRF51_MICROBIT', 'MCU_NRF51_16K_S110', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target', 'MCU_NRF51_S110']
        new: ['NRF51_MICROBIT', 'MCU_NRF51_16K_S110', 'MCU_NRF51_S110', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target']
    'extra_labels' has different values in old and new
        old: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NORDIC_16K', 'MCU_NRF51_16K', 'MCU_NRF51_16K_S110']
        new: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NRF51_16K_S110', 'MCU_NORDIC_16K', 'MCU_NRF51_16K']
    'macros' has different values in old and new
        old: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_NRF_LFCLK_RC']
        new: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_NRF_LFCLK_RC']
NRF51_MICROBIT_OTA:
    Resolution order is different in old and new
        old: ['NRF51_MICROBIT_OTA', 'MCU_NRF51_16K_OTA_S110', 'MCU_NRF51_16K_OTA_BASE', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target', 'MCU_NRF51_S110']
        new: ['NRF51_MICROBIT_OTA', 'MCU_NRF51_16K_OTA_S110', 'MCU_NRF51_S110', 'MCU_NRF51_16K_OTA_BASE', 'MCU_NRF51_16K_BASE', 'MCU_NRF51', 'Target']
    'extra_labels' has different values in old and new
        old: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NORDIC_16K', 'MCU_NRF51_16K', 'MCU_NRF51_16K_OTA', 'MCU_NRF51_16K_S110', 'NRF51_MICROBIT']
        new: ['NORDIC', 'MCU_NRF51', 'MCU_NRF51822', 'MCU_NORDIC_16K', 'MCU_NRF51_16K', 'MCU_NRF51_16K_S110', 'MCU_NRF51_16K_OTA', 'NRF51_MICROBIT']
    'macros' has different values in old and new
        old: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_MCU_NRF51_16K_OTA', 'TARGET_OTA_ENABLED', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_NRF51_MICROBIT', 'TARGET_NRF_LFCLK_RC']
        new: ['NRF51', 'TARGET_NRF51822', 'TARGET_MCU_NORDIC_16K', 'TARGET_MCU_NRF51_16K', 'TARGET_MCU_NRF51_16K_S110', 'TARGET_MCU_NRF51_16K_OTA', 'TARGET_OTA_ENABLED', 'TARGET_NRF51_MICROBIT', 'TARGET_NRF_LFCLK_RC']
NOT OK: ['NRF51_MICROBIT', 'NRF51_MICROBIT_BOOT', 'NRF51_MICROBIT_OTA']

The reasons for the above output are subtle and related to the
extremely weird way in which we defined target data in the old
implementation: we used both class attributes and instance attributes.
This can complicate resolution order quite a bit and those two levels
don't exist in JSON: there's only one attribute type (equivalent to
Python's instance attributes). To make that work, I had to change the
inheritance order of the above targets (that use multiple inheritance)
which in turn changed the order of some macros and extra_labels (and of
course the resolution order). No harm done: the values are the same,
only their ordering is different. I don't believe this causes any
problems for 'extra_labels' and 'macros'.

This method of testing has its limitations though; in particular, it
can't test the hooks. I'm opened to ideas about how to test this better,
but I think that we need to remember that this commit might break some
targets and keep an eye out for "weird errors" in the future.
2016-05-17 11:34:02 +03:00
Sam Grove 9c38f2aa63 Merge pull request #85 from bridadan/build-tests-fix
Fixing build issues for tests
2016-05-10 09:31:29 -05:00
Brian Daniels 4ae7d54830 Fixing build issues for tests.
Build artifacts from previous builds were polluting the current build. Now
shared sources are built as a library, then tests are built into their own
folder.
2016-05-10 14:53:35 +01:00
Bogdan Marinescu 904ea446eb Merge pull request #84 from screamerbg/compile-response-files
Response files for includes, de-duplicate includes and more
2016-05-10 12:05:16 +03:00
Mihail Stoyanov 7e3b69ec13 Add dot to include response file name, which follows the naming convention with .link_totals.txt and .link_files.txt 2016-05-09 19:08:56 +01:00
Mihail Stoyanov d33f890fdd Minor code cleanup 2016-05-09 19:08:56 +01:00
Mihail Stoyanov 7e11174a00 Calculate md5 of all include paths in compile_sources() and remove calculation from <toolchaon>get_compile_options(), thus significantly reduce repetitive md5 calculations
Unify handling of the include response file in mbedToolchain::get_inc_file()
Sanitize obsolete no-longer needed methods
2016-05-09 19:08:56 +01:00
Mihail Stoyanov f01e1363d1 De-duplicate the include paths. Without this all compiles are passed include paths twice 2016-05-09 19:08:56 +01:00
Mihail Stoyanov 868942a148 Build system response files for all macros and includes. This also allows developers to check the response file after/during compile for the list of all macros and includes being used. 2016-05-09 19:08:56 +01:00
Mihail Stoyanov ecb9651873 Unified command-line handling of defines and includes with response files for all toolchains (ARM, GCC, IAR)
Capture system/OS error during command execution and report the command
Report command before executing it in default_cmd()
2016-05-09 19:08:56 +01:00
Mihail Stoyanov 2be0385f73 Response files for includes during assemble() and compile()
Moved unified compile to toolchains to enable specific toolchain support for response files
2016-05-09 19:08:55 +01:00
Sam Grove 27c6721d23 Merge pull request #69 from c1728p9/update_rtos_init_sequence
Update rtos init sequence
2016-05-05 13:53:15 -05:00
Sam Grove fc4f1e2da3 Merge pull request #71 from bridadan/test-build
Building tests and test specs
2016-05-05 13:51:11 -05:00
Sam Grove 7aefc06dda Merge pull request #78 from screamerbg/master
Use parallel build by default
2016-05-05 13:11:15 -05:00
Mihail Stoyanov fb03e5a2c1 Fixed parameter to match documentation (allow multiple build) 2016-05-05 19:09:58 +01:00
Brian Daniels 1d28050686 Adding test compiling and test spec generation to test.py 2016-05-05 15:37:37 +01:00
Brian Daniels 65fae781a1 Toolchain should create artifact directory for link step 2016-05-05 09:39:01 +01:00
Martin Kojtal 1ae994fb62 Merge pull request #76 from bridadan/circle-script-adapt-latest-mbed-cli
Updating CircleCI script to latest changes in mbed-cli
2016-05-04 15:55:04 -05:00
Brian Daniels b0aea20317 Adapting test script to mbed-cli commit 4568e889f4 2016-05-04 21:53:24 +01:00
Sam Grove e869cbc954 Merge pull request #66 from 0xc0170/critical_section
Critical section
2016-05-04 15:28:13 -05:00
Sam Grove 4c7142bd84 Merge pull request #73 from bridadan/fix-circle-script
Fixing reference to "neo" in CI script
2016-05-04 08:55:44 -05:00
Bogdan Marinescu 9d33fe89d4 Merge pull request #70 from screamerbg/build-static-libs
Support for compiling static libraries via build.py
2016-05-04 15:39:56 +03:00
Mihail Stoyanov 34ec8297a4 Copy .o and .ar files for when building static library (needed for uVisor for example) 2016-05-04 12:06:57 +01:00
Brian Daniels e88f5ae884 Changing references to 'neo' to 'mbed' inside CircleCI script 2016-05-04 10:10:10 +01:00
Bogdan Marinescu f712259d6b Merge pull request #74 from 0xc0170/fix_utest_slash
utest - fix backslash in the utest paths
2016-05-03 19:31:09 +03:00
Bogdan Marinescu 962ae83b66 Merge pull request #27 from 0xc0170/utest
utest and unity
2016-05-03 13:28:50 +03:00
Mihail Stoyanov ba31ed0550 Support for response files for ARMCC, GCC and IAR archiving (static library)
Support for compiling static libraries via build.py
Support for build.py --no-archive flag which compiles static library as multiple objects
Change default number of jobs when compiling to 0 (auto)
Fix for relative path issue when compiling, which flattened the output whenever absolute path is passed to --build (make.py and build.py)
Fix for temporary files when pre-processing of assembler files with ARMCC
Fix issue with response files where one of the elements is empty string
2016-04-30 00:32:26 +01:00
Martin Kojtal e01bcdc95a ARMCC ulib - initalize RTOS before the standard library C++ init
Initialize the RTOS before initializing the standard library.  This
allows C++ constructors to be called in a well defined thread context.
2016-04-29 15:45:06 -05:00
Russ Butler 02ba7ea857 IAR - Initialize RTOS before standard library
Initialize the RTOS before initializing the standard library.  This
allows C++ constructors to be called in a well defined thread context.
2016-04-29 15:45:05 -05:00
Russ Butler fa8dc642ba GCC - Initialize RTOS before standard library
Initialize the RTOS before initializing the standard library.  This
allows C++ constructors to be called in a well defined thread context.
2016-04-29 15:45:04 -05:00
Russ Butler 307e2a897e ARMCC - Initialize RTOS before standard library
Initialize the RTOS before initializing the standard library.  This
allows C++ constructors to be called in a well defined thread context.
2016-04-29 15:45:03 -05:00
Russ Butler fcea510163 Remove dead CodeSourcery init code
The CodeSourcery compiler is not longer supported.  This patch removes
the CodeSourcery init code in RTX_CM_lib.h.
2016-04-29 15:45:01 -05:00
Anna Bridge 3a59a07dcc Add a c based re-entrant critical section API
This includes a generic critical section implementation, and nrf51
platforms specific implementation.

nrf51- this implementation will use sd_nvic_critical_region_enter if the
softdevice is enabled, otherwise it will use __disable_irq().
This implementation also allow a user to start a critical section while
interrupts are already disabled.
2016-04-29 09:40:52 -05:00
Martin Kojtal 2c3ad57a32 utest - fix us ticker header file name 2016-04-28 15:58:08 -05:00
Martin Kojtal 8c9ebde801 utest - add mbed shim layer 2016-04-28 15:24:27 -05:00
Martin Kojtal d19f51fbb9 Shim - mbed SDK uses us ticker by default
mbed SDK defines ``__MBED__`` macro (unique, not valid for yotta),
this should turn on us ticker by default, as that one is available
for mbed SDK targets.
2016-04-28 15:21:39 -05:00
Niklas Hauser 53b9fe2820 Include us_ticker.h in scheduler implementation. 2016-04-28 15:21:35 -05:00
Niklas Hauser 62dec8f6e0 Don't enable us_ticker scheduler if minar unavail. 2016-04-28 15:21:31 -05:00
Niklas Hauser 12a46551a5 Use functions instead of macros for porting. 2016-04-28 15:21:27 -05:00
Niklas Hauser 207660cc86 Use shim macros for critical sections in Harness. 2016-04-28 15:21:23 -05:00
Niklas Hauser d5cb178700 Use scheduler provided by shim layer in Harness. 2016-04-28 15:21:19 -05:00
Niklas Hauser 336bffaf05 Add shim definitions for mbed OS definitions.
This allows utest to be used without mbed OS dependencies.
2016-04-28 15:21:16 -05:00
Niklas Hauser 53377a1f4a Adapt Harness to call init and run functions. 2016-04-28 15:21:12 -05:00
Niklas Hauser df1d9f5529 Extend scheduler with init and run callbacks. 2016-04-28 15:21:08 -05:00
Niklas Hauser 6e85376d37 Allow case selection from teardown handler.
This can be used for arbitrary ordering of test cases.
2016-04-28 15:21:04 -05:00
Niklas Hauser 494c303da5 Remove C++11 member initializers. 2016-04-28 15:21:00 -05:00
Niklas Hauser 2fdf733292 Update documentation. 2016-04-28 15:20:56 -05:00