cosmopolitan icon indicating copy to clipboard operation
cosmopolitan copied to clipboard

Bug: unsupported -v option by cosmocc

Open ivmai opened this issue 1 year ago • 3 comments

Contact Details

https://github.com/ivmai/bdwgc/issues/666

What happened?

Hello, cosmocc does not recognize "-v" option (extended version info). Such information could be used during configure of 3rd-party packages (e.g. bdwgc), e.g. to determine threads API, e.g. like this. Not a bug, but a kind of missing functionality compared to gcc/clang.

Both gcc and clang output such info at least: compiler version, target and thread model, e.g.:

clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix

Version

cosmocc (GCC) 14.1.0

What operating system are you seeing the problem on?

Linux

Relevant log output

cosmocc: fatal error: precompiled headers only supported with ARCH-unknown-cosmo-cc compilers compilation terminated.

ivmai avatar Oct 15 '24 10:10 ivmai

The issue is I don't know what to put in there.

$ cc -v
Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)

We can't supply a lot of that information in our frontend. What information does your configure script try to parse out?

jart avatar Dec 24 '24 07:12 jart

What information does your configure script try to parse out?

Thread model: ...

ivmai avatar Dec 24 '24 07:12 ivmai

I also stumbled upon this.

My project build system extracts compiler brand (GCC / Clang / possibly TCC etc) and version via cc -v, and falls back to cc -dumpfullversion -dumpversion (The latter one indeed works on cosmocc, so I get to know compiler version but not brand).

It then dumps target triplet via cc -print-multiarch or cc -dumpmachine (Whichever is available), and extracts architecture/os from it, which also doesn't work - it at least would help detecting that it's a cosmopolitan build.

Currently this is how it looks when trying to build RVVM with cosmocc without any supplementary info (It works fine this way for many other targets, i.e. mingw etc):

$ make bin CC="cosmocc"                                                                                                                                                             11:57:29 

[INFO] Assuming target OS=Linux, set explicitly if cross-compiling
[INFO] Assuming target ARCH=x86_64, set explicitly if cross-compiling
Detected OS: Linux
Detected CC: Unknown 14.1.0
Target arch: x86_64
Version:     RVVM 0.7-c0225c9-dirty

This is how it works when supplying all the info manually, but point is that I'd prefer my build system to figure it automatically at least for known targets:

$ make bin CC="cosmocc" ARCH=x86_64_arm64 OS=Cosmopolitan CC_BRAND=gcc                                                                                                             

Detected OS: Cosmopolitan
Detected CC: GCC 14.1.0
Target arch: x86_64_arm64
Version:     RVVM 0.7-c0225c9-dirty

LekKit avatar Mar 20 '25 10:03 LekKit