Skip to content

Cygwin Build Broken #1672

@patacongo

Description

@patacongo

PR #1450 broke the Cygwin build and it is still broken in the current master. Consider this:

$ tools/configure.sh -c nucleo-l476rg:nsh
$ make -j V=1

Results in:

arm-none-eabi-ld --entry=__start -nostartfiles -nodefaultlibs -g -T "D:\Spuda\Documents\projects\nuttx\master\nuttx_fork\boards\arm\stm32l4\nucleo-l476rg\scripts\l476rg.ld"  -L"D:\Spuda\Documents\projects\nuttx\master\nuttx_fork\staging" -L"D:\Spuda\Documents\projects\nuttx\master\nuttx_fork\arch\arm\src\board" -L "c:/ ./ (x86)/ ./ ./ embedded/ 2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/thumb/v7e-m/nofp/" -L "c:/ ./ (x86)/ ./ ./ embedded/ 2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/" \
        -o "D:\Spuda\Documents\projects\nuttx\master\nuttx_fork\nuttx.exe"   \
        --start-group -lsched -ldrivers -lboards -lc -lmm -larch -lxx -lapps -lfs -lbinfmt -lboard -lgcc -lm --end-group
C:\Program Files (x86)\GNU Tools ARM Embedded\9 2019-q4-major\bin\arm-none-eabi-ld.exe: cannot find -lgcc
C:\Program Files (x86)\GNU Tools ARM Embedded\9 2019-q4-major\bin\arm-none-eabi-ld.exe: cannot find -lm
make[1]: *** [Makefile:172: nuttx.exe] Error 1

Trying again with a different configuration, no -j and no V=1 gives me the same error:

$ make distclean
$ tools/configure.sh -c stm32f4discovery:nsh
...
LD: nuttx
C:\Program Files (x86)\GNU Tools ARM Embedded\9 2019-q4-major\bin\arm-none-eabi-ld.exe: cannot find -lgcc
C:\Program Files (x86)\GNU Tools ARM Embedded\9 2019-q4-major\bin\arm-none-eabi-ld.exe: cannot find -lm
make[1]: *** [Makefile:172: nuttx.exe] Error 1

The problem is due to this commit:

commit 4910d43ab0fc360dbddb1f8a31db2a3ee383b46d
Author: Xiang Xiao <xiaoxiang@xiaomi.com>
Date:   Wed Jul 15 20:51:26 2020 +0800

    build: Move the toolchain library setting to the common place

    so all boards support C++ automatically

Commit 4910d43 adds logic like the following to all Toolchain.defs files:

+
+# Add the builtin library
+
+EXTRA_LIBS += -lgcc
+EXTRA_LIBPATHS += -L "${dir ${shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcc.a}}"
+
+ifneq ($(CONFIG_LIBM),y)
+  EXTRA_LIBS += -lm
+  EXTRA_LIBPATHS += -L "${dir ${shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a}}"
+endif
+
+ifeq ($(CONFIG_CXX_LIBSUPCXX),y)
+  EXTRA_LIBS += -lsupc++
+  EXTRA_LIBPATHS += -L "${dir ${shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a}}"
+endif

But look what happens under Cygwin:

$ arm-none-eabi-gcc --print-file-name=libgcc.a
c:/program files (x86)/gnu tools arm embedded/9 2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/libgcc.a

$ dir `arm-none-eabi-gcc --print-file-name=libgcc.a`
dir: cannot access 'c:/program': No such file or directory
dir: cannot access 'files': No such file or directory
dir: cannot access '(x86)/gnu': No such file or directory
dir: cannot access 'arm': No such file or directory
dir: cannot access 'embedded/9': No such file or directory
dir: cannot access '2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/libgcc.a'$'\r': No such file or directory
...

Broken!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: BugSomething isn't workingblockerRelease Blocker

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions