cosmopolitan
cosmopolitan copied to clipboard
Bug: unsupported -v option by cosmocc
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.
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?
What information does your configure script try to parse out?
Thread model: ...
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