1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
Commit Graph

83 Commits

Author SHA1 Message Date
Leandro Lanzieri
81cb769cad
makefiles: avoid building archives when compiling 2020-09-04 15:01:10 +02:00
Cenk Gündoğan
132b7328e3
make: kconfig: use fixdep to enable incremental compilation 2020-08-11 09:47:32 +02:00
Cenk Gündoğan
f49eb4305c
dist: tools: import fixdep from linux 2020-08-10 12:17:59 +02:00
Marian Buschsieweke
c1ad435668
Makefile.base: Error for C++ code w/w cpp feature
If external modules use C++ code and forget to require the `cpp` feature,
linking will still take places using $(CC). This commit adds a check if C++ code
was detected without the feature `cpp` being used, now the build is aborted
with a helpful error message rather than a linker error.
2020-07-23 20:18:33 +02:00
Francisco Molina
2331448644
Makefile: remove usage of SUBMODULES_NOFORCE
With #10970 only existing *.c files will be added to SRC when using
the SUBMODULES mechanism, so SUBMODULES_NOFORCE (used to filter out
non existing source files) is now redundant so remove the usage.
2020-04-15 12:11:44 +02:00
Francisco
623381f9d3
Merge pull request #10970 from miri64/make/fix/pseudo-submodules
make: Allow for true pseudo-submodules
2020-04-15 09:42:30 +02:00
Martine Lenders
744fbc5cad
make: Allow for true pseudo-submodules
When providing a pseudo-submodule for a module already using the
`SUBMODULES` mechanism to provide submodules, it is not possible to
create a true pseudo-module as submodule (i.e. one without any code on
its own), since the build system currently always expects there to be a
C file `module_submodule.c`.

This removes this requirement.
2020-04-14 18:34:50 +02:00
Leandro Lanzieri
d1fcc17c09 Makefile.base: Assign module name with simple expansion 2020-02-04 13:14:17 +01:00
Leandro Lanzieri
9c8b7a064b makefiles/kconfig: Only run Kconfig if could generate configurations
This adds a check to decide if Kconfig should run on a build. It will
run if any of the following conditions is true:
- A file with '.config' extension is present in the application folder
- A 'Kconfig' file is present in the application folder
- A previous configuration file is present (e.g. from a previous call to
  menuconfig)
- menuconfig is being called

This assumes that Kconfig will not generate any default configurations
just from the Kconfig files outside the application folder (i.e. module
configuration via Kconfig is disabled by default). Should this change,
the check would not longer be valid, and Kconfig would have to run on
every build.
2019-12-18 09:46:43 +01:00
72bed868db
Makefile.base: add variable to exclude cpp files from build 2019-12-04 20:10:55 +01:00
44974ac106
Makefile.base: make cpp file extension configurable 2019-12-04 20:10:55 +01:00
Leandro Lanzieri
1655001d85 makefiles: Add Kconfig related targets and dependencies
- The autoconf.h header file, generated with the current Kconfig
  configurations, is added as a build dependency.

- autoconf.h depends on the proper tool (genconfig) and a Kconfig.dep
  which contains the dependencies for the given application and board,
  this is generated from $(USEMODULE).

- The menuconfig target is added, to allow the configuration of modules
  using the Kconfig system.
2019-12-04 15:23:51 +01:00
Leandro Lanzieri
dc845841f0 Makefile.base: Set targets of *.d files to absolute object path
By passing the -MT flag with the absolute path to the object we make
sure that the compiler generates dependency files with rules that match
our building rules.
2019-11-29 18:52:48 +01:00
a100c1c0ea makefiles/blob.inc.mk: introduce blob -> hdr utility makefile 2019-11-18 17:53:47 +01:00
1ca277d914 make: enable SECONDEXPANSION for module/application builds 2019-11-14 12:12:18 +01:00
cd18dad5ca pkg: introduce nanoPb Protocol Buffers library 2019-10-18 22:34:28 +02:00
4c3d473e4e make: add GENSRC (generated source files) support 2019-10-18 22:34:28 +02:00
Gaëtan Harter
a581c2c8ce
Makefile.base: implement relative path linking without 'realpath'
This fixes the following issues:

* Use of 'realpath' not supported on mac
* Call of 'realpath' once for each file instead of one per archive
* Do not trigger 'llvm-ar' bug when invoked in the object directory.
    llvm-ar rcTs ../m.a obj.o  # Bugged
    llvm-ar rcTs m.a m/obj.o   # working

Using relative path linking is required to have a valid thin archive
path in the host when build in docker.
2019-09-16 15:52:36 +02:00
Juan Carrano
24ddf285d2 Makefile.base: use thin static archives.
Normal, or thick archives contain a copy of the object code. Thin
archives, on the contrary, are just an index to the .o files.

This patch does two things:

1. Change ARFLAGS to enable the "T" options.
2. Call AR with all relative paths.

The second step is necessary because the build system handles all
absolute paths. If the index in the thin archive contains absolute
paths, archives created in docker are no usable outside, and moving
the objects breaks the archive.

If all arguments to AR are relative, the resulting archive contains
filenames *relative to the .a file* and nothing should break as long
as the relative location of the .a and .o remains unchanged.

Compilation time is unchanged, but disc usage is reduced by approximately
50%. These are the result of a full RIOT build:

| Thin Archive   |  no     |  yes  | Savings (%) |
| -------------- | ------: | ----: | ----------- |
| pkg (10e6 KiB) | 1 790   | 905   | 49%         |
| Non pkg        |    71   |  71   | 1%          |
| Total          | 1 812   | 976   | 46 %        |
2019-09-10 11:21:42 +02:00
cladmi
238e37bdee
Makefile.base: define 'clean' as .PHONY 2018-08-22 16:25:37 +02:00
61f1b941ce make: replace curly braces with parenthesis 2018-03-22 20:43:15 +01:00
Gaëtan Harter
7c85e6e0e9 Makefile.base: fix AR keeping removed source files objects
AR incrementally adds file without removing files.
If a c file is deleted or disabled(submodule removal) it is not removed from
archive and still ends up in the final elf file.

This fix removes the need to do 'make clean' for this case.

However it will break cases where an APPLICATION and a MODULE or two modules
have the same name and only worked because source files names where different.
2018-03-14 12:29:10 +01:00
Joakim Nohlgård
7e3482eea0
Merge pull request #7933 from cladmi/pr/asssmobj_depends_to_header
Makefile.base: Add missing dep to RIOTBUILD_CONFIG_HEADER_C
2017-11-04 23:20:21 +01:00
Gaëtan Harter
1a6b492438 Makefile.base: Fix indentation to two spaces 2017-11-03 13:51:51 +01:00
Gaëtan Harter
3d2ed681e3 Makefile.base: Add missing dep to RIOTBUILD_CONFIG_HEADER_C
Assembly files '.S' are compiled with a subset of CFLAGS.
This means also `-include '$(RIOTBUILD_CONFIG_HEADER_C)'` so they should be
recompiled when it updates.
2017-11-03 13:46:49 +01:00
3711a6d406 Merge pull request #6780 from kaspar030/add_submodules
make: add submodule support
2017-03-29 07:27:20 +02:00
933a7a3efe make: add submodule support 2017-03-28 20:50:47 +02:00
c442cbcc23 make: Makefile.base: don't collect wildcard sources if NO_AUTO_SRC is nonempty 2017-03-22 22:22:06 +01:00
Joakim Nohlgård
d90f33e654 make: Add support for specifying a different compiler for assembler 2017-03-01 14:46:59 +01:00
47f6ff3056 Merge pull request #6237 from kaspar030/rename_AD_to_Q
make: rename AD to Q
2017-01-17 16:16:02 +01:00
fd07b5fd27 make: introduce QQ, use when doing CI build 2016-12-22 23:53:51 +01:00
f44763f346 make: adapt Makefiles to AD -> Q rename 2016-12-22 12:12:38 +01:00
Joakim Nohlgård
e2dc99f464 make: Place C++ includes before C includes when compiling C++
Fixes some errors when specifying system C++ include directories where
the C++ headers need to #include_next related C headers.
2016-12-21 13:05:15 +01:00
560a509036 make: remove trailing slash from BINDIR variable 2016-10-18 23:27:59 +02:00
1f9a87972b make: allow per-file conditional LTO compile 2016-08-29 13:30:17 +02:00
Joakim Nohlgård
77a15e7886 make: Place most configuration macros in a separate file instead of on the command line 2016-07-05 11:22:58 +02:00
Joakim Nohlgård
275b366825 Makefile.base: Add separate CXXINCLUDES for C++ specific header directories 2016-05-31 22:03:04 +02:00
3c56b49df6 make: use ccache if environment variable is set 2015-05-29 09:45:40 +02:00
aed4be332e make: introduce RIOT_FILE_NOPATH and RIOT_FILE_RELATIVE 2015-05-26 19:40:27 +02:00
Joakim Gebart
8d68afa6e6 Makefile: Add ARFLAGS for overriding command line options to ar
- Makefile.base: Respect ARFLAGS when building static archives.
 - Makefile.cflags: Add default ARFLAGS.
 - Makefile.vars: Add description for ARFLAGS.
2015-02-08 20:08:19 +01:00
René Kijewski
9a15a6def5 make: easify {sys,drivers}/Makefile
Currently you need to add every new sys and driver module into the
respective Makefile. This requires rebasing if another module was merged
in the meantime.

This PR allows you to omit the entry to {sys,drivers}/Makefile, if the
subfolder has the same name as the module name, which should be sensible
in most cases.
2014-11-11 09:26:37 +01:00
Ludwig Ortmann
7e123c797d make: optimize archive creation/modification
Only add/replace changed members to the archive.
2014-09-28 11:28:42 +02:00
Ludwig Ortmann
182b603a01 make: 1571 fixup: dont create existing directories
This fixes an error which was introduced by commit
346313bf07

The timestamp of directories is updated when a file inside a directory
is changed.
Therefore, make decides a target needs to be rebuilt, whenever that
target depends on its parent directory, because the directory is
always newer than the file inside.

http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html

    Occasionally, however, you have a situation where you want to
    impose a specific ordering on the rules to be invoked without
    forcing the target to be updated if one of those rules is
    executed. In that case, you want to define order-only
    prerequisites. Order-only prerequisites can be specified by
    placing a pipe symbol (|) in the prerequisites list: any
    prerequisites to the left of the pipe symbol are normal; any
    prerequisites to the right are order-only:

         targets : normal-prerequisites | order-only-prerequisites
2014-09-28 11:26:51 +02:00
René Kijewski
2d336ed8c8 make: easier to read object targets 2014-08-13 20:52:41 +02:00
René Kijewski
9b408fda9c make: don't invoke wildcard repeatedly 2014-08-13 20:51:50 +02:00
René Kijewski
01f6bdf789 make: call ranlib 2014-08-13 20:51:50 +02:00
René Kijewski
aa2ee4084d make: use $@ and $< 2014-08-13 20:51:29 +02:00
René Kijewski
346313bf07 make: don't call mkdir -p a lot 2014-08-13 20:23:08 +02:00
Pham Huu Dang Nhat
f7398f61ff Changed RIOT/Makefile.include, Makefile.base, Makefile.cflags, and native/Makefile.include to compile C and C++ files. 2014-06-25 22:26:10 +07:00
René Kijewski
2ae0c1b149 make: use abspath for better error messages 2014-06-23 15:50:10 +02:00