Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGw6cBuOmZEnc2ZeDZ8XPwGtuMAQcBs+FWWWqtkr3v_hxkuKFQ@mail.gmail.com>
Date: Fri, 8 May 2020 17:27:11 -0700
From: Michael Forney <mforney@...rney.org>
To: musl@...ts.openwall.com
Subject: Re: [musl-cross-make] [PATCH v2] litecross: Fix system header dir
 when building native toolchains

On 2020-03-22, Michael Forney <mforney@...rney.org> wrote:
> Hi,
>
> Resending this patch because this is still an issue, and I realized
> that the usr -> . symlink could also be removed in the build sysroot.
> Anyone who has built a native toolchain with musl-cross-make has
> probably run into this and worked around it by creating a usr -> .
> symlink in the install directory manually.
>
> To demonstrate that this only currently works by accident with
> cross-compilers, I'll start with current musl-cross-make master,
> and override the sysroot to something else:
>
> $ make TARGET=aarch64-linux-musl SYSROOT=/something-else install
> <snip>
> $ echo '#include <stdlib.h>' | ./output/bin/aarch64-linux-musl-gcc -v -x c
> -
> <snip>
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output/bin/../something-else/usr/local/include"
> ignoring duplicate directory
> "/tmp/musl-cross-make/output/bin/../lib/gcc/../../lib/gcc/aarch64-linux-musl/9.2.0/../../../../aarch64-linux-musl/include"
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output/bin/../something-else/usr/include"
> ignoring duplicate directory
> "/tmp/musl-cross-make/output/bin/../lib/gcc/../../lib/gcc/aarch64-linux-musl/9.2.0/include"
> #include "..." search starts here:
> #include <...> search starts here:
> /tmp/musl-cross-make/output/bin/../lib/gcc/aarch64-linux-musl/9.2.0/../../../../aarch64-linux-musl/include
> /tmp/musl-cross-make/output/bin/../lib/gcc/aarch64-linux-musl/9.2.0/include
> End of search list.
> GNU C17 (GCC) version 9.2.0 (aarch64-linux-musl)
>         compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version
> 4.0.2, MPC version 1.1.0, isl version none
> GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
> Compiler executable checksum: 32e14193b549d09fa3807c50f194d659
> <stdin>:1:10: fatal error: stdlib.h: No such file or directory
> compilation terminated.
> $
>
> As you can see, gcc *is* searching for headers in the /something-else
> sysroot, but under the incorrect system header directory. It still
> searches for headers in /aarch64-linux-musl/include since that is
> the gcc tool directory.
>
> To demonstrate the problem with native toolchains, let's build a
> native toolchain and try to use it:
>
> $ make TARGET=x86_64-linux-musl NATIVE=1 install
> <snip>
> $ echo '#include <stdlib.h>' | ./output-x86_64-linux-musl/bin/gcc -v -x c -
> <snip>
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output-x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/include"
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output-x86_64-linux-musl/bin/../usr/local/include"
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output-x86_64-linux-musl/bin/../lib/gcc/../../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/include"
> ignoring nonexistent directory
> "/tmp/musl-cross-make/output-x86_64-linux-musl/bin/../usr/include"
> ignoring duplicate directory
> "/tmp/musl-cross-make/output-x86_64-linux-musl/bin/../lib/gcc/../../lib/gcc/x86_64-linux-musl/9.2.0/include"
> #include "..." search starts here:
> #include <...> search starts here:
> /tmp/musl-cross-make/output-x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/9.2.0/include
> End of search list.
> GNU C17 (GCC) version 9.2.0 (x86_64-linux-musl)
>         compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version
> 4.0.2, MPC version 1.1.0, isl version none
> GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
> Compiler executable checksum: 60320f85342923d8a86b40331aa7a54b
> <stdin>:1:10: fatal error: stdlib.h: No such file or directory
> compilation terminated.
> $
>
> With the proposed patch, both of these cases are fixed. Hopefully
> this makes the problem clear.

Hi Rich,

When I mentioned this patch on IRC, you expressed some concern that
you didn't think --with-native-system-header-dir was relevant for
cross compilers. However, I think I have made a pretty good case here
showing that it is, and that the default value of /usr/include is not
correct.

If you still have concerns, could you please let me know so I can try
to address them?

Thanks,

Michael

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.