Message ID | 20210115221247.1418-1-Reimar.Doeffinger@gmx.de |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] configure: Set MSVC as_default later. | expand |
Context | Check | Description |
---|---|---|
andriy/x86_make | success | Make finished |
andriy/x86_make_fate | success | Make fate finished |
andriy/PPC64_make | success | Make finished |
andriy/PPC64_make_fate | success | Make fate finished |
On Fri, 15 Jan 2021, Reimar.Doeffinger@gmx.de wrote: > From: Reimar Döffinger <Reimar.Doeffinger@gmx.de> > > It would get immediately overridden to $cc, which in case > of gas-preprocessor missing would result in it trying > to use cl.exe for asm files instead of erroring out. > This is because cl.exe does not fail but just print a warning > when it is given a file it does not know what to do with it... As this setup seems to work fine in the setups I've tried, can you think of why it's overwritten with $cc in your cases? With the line : ${as_default:=$cc} it only sets as_default to $cc if $as_default is empty. > --- > configure | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/configure b/configure > index 12b41cde1c..d3b665f6f9 100755 > --- a/configure > +++ b/configure > @@ -4271,14 +4271,6 @@ case "$toolchain" in > ld_default="$source_path/compat/windows/mslink" > nm_default="dumpbin.exe -symbols" > ar_default="lib.exe" > - case "$arch" in > - aarch64|arm64) > - as_default="armasm64.exe" > - ;; > - arm*) > - as_default="armasm.exe" > - ;; > - esac > target_os_default="win32" > # Use a relative path for TMPDIR. This makes sure all the > # ffconf temp files are written with a relative path, avoiding > @@ -4720,6 +4712,14 @@ probe_cc(){ > _ld_path='-libpath:' > elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then > _type=msvc > + case "$arch" in > + aarch64|arm64) > + as_default="armasm64.exe" > + ;; > + arm*) > + as_default="armasm.exe" > + ;; > + esac > if $_cc -nologo- 2>&1 | grep -q Microsoft; then You can't really do that here. Probe_cc only should set the existing set of _type/_ident/_ldflags/_cflags* etc variables, which are picked up by the caller of probe_cc. probe_cc is called separately for both host and target compilers, so if e.g. cross compiling, with MSVC as host compiler, with a different compiler for the target, this wouldn't do the right thing. // Martin
> On 15 Jan 2021, at 23:25, Martin Storsjö <martin@martin.st> wrote: > > On Fri, 15 Jan 2021, Reimar.Doeffinger@gmx.de wrote: > >> From: Reimar Döffinger <Reimar.Doeffinger@gmx.de> >> >> It would get immediately overridden to $cc, which in case >> of gas-preprocessor missing would result in it trying >> to use cl.exe for asm files instead of erroring out. >> This is because cl.exe does not fail but just print a warning >> when it is given a file it does not know what to do with it... > > As this setup seems to work fine in the setups I've tried, can you think of why it's overwritten with $cc in your cases? > > With the line > : ${as_default:=$cc} > it only sets as_default to $cc if $as_default is empty. Actually after a few debug prints it’s clear what actually happens: $arch is not set at that point unless specified on command-line. Not sure if it’s reasonable to just check arch_default as fallback or such? > You can't really do that here. Probe_cc only should set the existing set of _type/_ident/_ldflags/_cflags* etc variables, which are picked up by the caller of probe_cc. probe_cc is called separately for both host and target compilers, so if e.g. cross compiling, with MSVC as host compiler, with a different compiler for the target, this wouldn't do the right thing. Then the armcc logic in there is broken I guess?
On Sat, 16 Jan 2021, Reimar Döffinger wrote: > > >> On 15 Jan 2021, at 23:25, Martin Storsjö <martin@martin.st> wrote: >> >> On Fri, 15 Jan 2021, Reimar.Doeffinger@gmx.de wrote: >> >>> From: Reimar Döffinger <Reimar.Doeffinger@gmx.de> >>> >>> It would get immediately overridden to $cc, which in case >>> of gas-preprocessor missing would result in it trying >>> to use cl.exe for asm files instead of erroring out. >>> This is because cl.exe does not fail but just print a warning >>> when it is given a file it does not know what to do with it... >> >> As this setup seems to work fine in the setups I've tried, can you think of why it's overwritten with $cc in your cases? >> >> With the line >> : ${as_default:=$cc} >> it only sets as_default to $cc if $as_default is empty. > > Actually after a few debug prints it’s clear what actually happens: > $arch is not set at that point unless specified on command-line. > Not sure if it’s reasonable to just check arch_default as fallback or such? Yeah that sounds sensible - maybe just "case ${arch-${arch_default}}" would work? >> You can't really do that here. Probe_cc only should set the existing set of _type/_ident/_ldflags/_cflags* etc variables, which are picked up by the caller of probe_cc. probe_cc is called separately for both host and target compilers, so if e.g. cross compiling, with MSVC as host compiler, with a different compiler for the target, this wouldn't do the right thing. > > Then the armcc logic in there is broken I guess? I would say so, yes - ideally that should be changed behave like the other vars like _cflags_* and picked up by caller, only for the target compiler case. // Martin
diff --git a/configure b/configure index 12b41cde1c..d3b665f6f9 100755 --- a/configure +++ b/configure @@ -4271,14 +4271,6 @@ case "$toolchain" in ld_default="$source_path/compat/windows/mslink" nm_default="dumpbin.exe -symbols" ar_default="lib.exe" - case "$arch" in - aarch64|arm64) - as_default="armasm64.exe" - ;; - arm*) - as_default="armasm.exe" - ;; - esac target_os_default="win32" # Use a relative path for TMPDIR. This makes sure all the # ffconf temp files are written with a relative path, avoiding @@ -4720,6 +4712,14 @@ probe_cc(){ _ld_path='-libpath:' elif $_cc -nologo- 2>&1 | grep -q Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then _type=msvc + case "$arch" in + aarch64|arm64) + as_default="armasm64.exe" + ;; + arm*) + as_default="armasm.exe" + ;; + esac if $_cc -nologo- 2>&1 | grep -q Microsoft; then _ident=$($_cc 2>&1 | head -n1 | tr -d '\r') else
From: Reimar Döffinger <Reimar.Doeffinger@gmx.de> It would get immediately overridden to $cc, which in case of gas-preprocessor missing would result in it trying to use cl.exe for asm files instead of erroring out. This is because cl.exe does not fail but just print a warning when it is given a file it does not know what to do with it... --- configure | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)