- Add `-Wl,--gc-sections` to LDFLAGS
- Add `-fdata-sections` and `-ffunction-sections` to CFLAGS
- Update lpc2387 linker script to keep the isr vector and init
sections when garbage collecting.
- Keep .ctors and .dtors sections (similar to what binutils default
linker script does when building for Linux targets)
Signed-off-by: Joakim Gebart <joakim.gebart@eistec.se>
For the MSB-A2 the DTR and RTS pins have to be pulled down over the
serial interface in the beginning. (This is required because the Linux
usbserial driver pulls them up when initializing the device which set
the node into reset mode.) Since this is not necessary on most other
platforms and might even cause problems, it's better to make this an
optional behavior of pyterm.
Sometimes boards/*/Makefile.include (e. g. in case of the msba2) gets included
twice somehow, leading the TERMFLAG to be set twice and faulty. This
fixes that.
We have sane defaults for `ELFFILE` and `HEXFILE` in the root
`Makefile.include`. The local definition for `ELFFILE` of mbed_lpc1768's
`Makefile.include` was wrong, which caused e.g. `make buildsize` to
fail.
Creating all object files in one directory is bound to produce name
clashes. RIOT developers may take care to use unique file names, but
external packages surely don't.
With this change all the objects of a module (e.g. `shell`) will be
created in `bin/$(BOARD)/$(MODULE)`.
I compared the final linker command before and after the change. The
`.o` files (e.g. `startup.o`, `syscall.o` ...) are included in the same
order. Neglecting the changed path name where the `.o` files reside, the
linker command stays exactly the same.
A major problem could be third party boards, because the location of the
`startup.o` needs to the specified now in
`boards/$(BOARD)/Makefile.include`, e.g.
```Makefile
export UNDEF += $(BINDIR)msp430_common/startup.o
```
An application might want to use C11 features. The user would assume
that setting `CFLAGS=-std=gnu11` in the Makefile would work. It does not
since the board's Makefile.include shadows the `-std` flag.
This patch removes the `-std=gnu99` from the various Makefile.includes,
and sets the flag in the common Makefile.include of RIOT instead.
If an `-std` flag was provided by an earlier Makefile (the application,
the board, or the CPU [whilst only the former one should]), then no
additional flag is set. It is first tested if the supplied compiler
understands `-std=gnu99`, then `-std=c99`.