To solve the issue of carrying object files from previous builds,
Matias changed the archiving process to re-archive libapps.a on every compilation,
if libapps.a carries more object files, incremental compilation will waste too
many time in re-archiving, compared with the previous implement, this is a degradation
of the build system. Referring to mature engineering projects such as cmake, if there
is configuration or source file changed, the best solution should be to reconfigure
the environment.
Revert this PR to ensure the compilation speed during incremental compilation.
| commit 18137c0fec
| Author: Matias N <matias@protobits.dev>
| Date: Sat Sep 12 00:36:23 2020 -0300
|
| Fix: ensure archive files do not carry object files from prior builds
|
| This is the corresponding change to the one on main NuttX repo. In this
| case this involves splitting the build of libapps.a into: a) building
| all applications (which is safely parallelizable), b) adding each
| application's object files to the archive in turns (serial by nature).
|
| This removes the need for the flock used to protect the parallel build.
Testing:
sim:nsh
-------------------------------
| Patched | Current
-------------------------------
|$ time make | $ time make
|real 0m1.270s | real 0m1.728s
|user 0m0.971s | user 0m1.276s
|sys 0m0.363s | sys 0m0.530s
-------------------------------
Private project (20+ 3rd library needs archive to libapps.a)
-------------------------------
| Patched | Current
-------------------------------
|$ time make | $ time make
|real 0m21.181s | real 0m39.721s
|user 0m14.638s | user 0m24.837s
|sys 0m6.919s | sys 0m14.394s
-------------------------------
Signed-off-by: chao an <anchao@xiaomi.com>
so the user could generate the separate library through BIN.
Here is the similar code snippet copied from nuttx/tools/Unix.mk:
context: include/nuttx/config.h include/nuttx/version.h .dirlinks $(CONTEXTDIRS_DEPS) | staging
staging:
$(Q) mkdir -p $@
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Add rule to create libapps.a for CONFIG_BUILD_KERNEL=y, there is no
reason to disallow this.
The behavior of make import remains the same, so no regression is expected.
The condition:
[ -f "$${f}" ] && cp -f "$${f}" "${EXPORTDIR}"$(DELIM)registry ;
Fails if the first part of the condition returns empty / false, stopping
make for no reason due to the error.
The code generated by tools/mksymtab.sh uses
```
extern void *var;
```
for ~everything.
After the recent removal of -fno-builtin, [1]
it ends up with warnings:
* -Wbuiltin-requires-header for clang
* -Wbuiltin-declaration-mismatch for gcc
It also generates errors like the following for clang:
```
symtab_apps.c:125:14: error: redefinition of 'strdup' as different kind of symbol
extern void *strdup;
```
I couldn't find a way to disable it.
(it's err_redefinition_different_kind in clang source)
This commit works it around by restoring -fno-builtin
when building SYMTABOBJ.
[1] https://github.com/apache/incubator-nuttx/pull/5476
Summary:
- I noticed that applications made by 'make import' contain
undefined symbols such as printf for CONFIG_BUILD_KERNEL=y
- This commit fixes this issue by adding user libraries.
- Also, this commit generates libapps.a which is used for init
Impact:
- CONFIG_BUILD_KERNEL=y only
Testing:
- Build (mkimport, make import) with sama5d4-ek:knsh
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Summary:
- I noticed that 'make export' does not work with swama5d4-ek:knsh
- This commit fixes this issue by always creating the registry directory
but not copying pdat files for CONFIG_BUILD_KERNEL=y
- This commit also fixes the delimiter issue on Windows
- NOTE: nuttx needs to be updated as well
Impact:
- CONFIG_BUILD_KERNEL=y only
Testing:
- Build (make and make export) with sama5d-ek:knsh
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Gregory Nutt is has submitted the SGA
Uros Platise has submitted the ICLA
as a result we can migrate the licenses to Apache.
Signed-off-by: Alin Jerpelea <alin.jerpelea@sony.com>
This is the corresponding change to the one on main NuttX repo. In this
case this involves splitting the build of libapps.a into: a) building
all applications (which is safely parallelizable), b) adding each
application's object files to the archive in turns (serial by nature).
This removes the need for the flock used to protect the parallel build.
move the binary install to the main Makefile to support
link extra libraries
Change-Id: I6db8a244ec9975163ea0c21fec6468e215c5aedb
Signed-off-by: chao.an <anchao@xiaomi.com>
fix import build break caused by 'incdir' not found:
$ make import -j12
...
/bin/sh: 1: /home/archer/code/apps/import/tools/incdir: not found
/bin/sh: 1: /home/archer/code/apps/import/tools/incdir: not found
Signed-off-by: chao.an <anchao@xiaomi.com>
In nuttx pass1dep and pass2dep builds, context firstly would be built once.
It then call 'make -C apps depend' which would trigger the context built twice.
There is race condition between symtab.c generated by mksymtab.sh in second time
and compiling symtab.c in parallel build. So remove context dependency for apps
depend to make sure context build only one time for apps.
Parallel build break logs as below:
/home/jenkins/jenkins-slave/workspace/NuttX-Nightly-Build/apps/examples/elf/elf_main.c:357: undefined reference to `g_elf_nexports'
riscv64-unknown-elf-ld: /home/jenkins/jenkins-slave/workspace/NuttX-Nightly-Build/apps/examples/elf/elf_main.c:357: undefined reference to `g_elf_exports'
make[1]: *** [nuttx] Error 1
make: *** [pass2] Error 2
Change-Id: I2872f7036e7ec86615efc5ebd7c46cee51dc1094
Signed-off-by: liuhaitao <liuhaitao@xiaomi.com>
A recent change gets the APPSDIR root directory path from:
APPSDIR = $(CURDIR)
Where CURDIR is a special variable maintained by GNU make. In the native build, GNU make is provided by GNUWin32. The value of CURDIR provided by the GNUWin32 CURDIR is not POSIX, but not quite windows compatible either. It does return paths that start with C: or D:, but uses forward slashes for path segment delimiters, not backsalshes as required by Windows tools.
This fix here is to use $(CURDIR) to get the APPSDIR path for file inclusions, that part is fine. But then, if we find out we are doing a native build, the update the APPSDIR using shell %CD% environment variable which is the authoritative source of the current working directory under Windows.