kubeswitch icon indicating copy to clipboard operation
kubeswitch copied to clipboard

Build C compiler errors when building from source on RHEL v8.9

Open hhue13 opened this issue 6 months ago • 1 comments

Due to issues running switcher 0.8.1 om REL8 (see issue 104 I tried to build it from source using the 0.8.1 source package. The OS I'm running is RedHat Enterprise Linux 8.9 on x86_64.

x@y: /dev/shm/kubeswitch-0.8.1$ uname -a
Linux x.a.b 4.18.0-513.9.1.el8_9.x86_64 #1 SMP Thu Nov 16 10:29:04 EST 2023 x86_64 x86_64 x86_64 GNU/Linux

x@y: /dev/shm/kubeswitch-0.8.1$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.9 (Ootpa)

However when running the make all of the downloaded source package I'm running into issues with the C compiler invocation. No matter if I try to compile using clang or gcc.

Compiler versions I've tested with are: gcc

x@y: /dev/shm/kubeswitch-0.8.1$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.5.0 20210514 (Red Hat 8.5.0-20) (GCC) 

clang:

c@y: /dev/shm/kubeswitch-0.8.1$ clang -v
clang version 16.0.6 (Red Hat 16.0.6-2.module+el8.9.0+19521+190d7aba)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13
Selected GCC installation: /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

go

x@y: /dev/shm/kubeswitch-0.8.1$ go version
go version go1.21.6 linux/amd64

Building using the default C compiler (clang) it fails using the following issues:

x@y: /dev/shm/kubeswitch-0.8.1$ make all
> Format
> Test
ok  	github.com/danielfoehrkn/kubeswitch/pkg/config/migration	(cached)
ok  	github.com/danielfoehrkn/kubeswitch/pkg/config/validation	(cached)
> Check
Executing golangci-lint
/dev/shm/kubeswitch-0.8.1/hack/tools/bin/golangci-lint
INFO [config_reader] Config search paths: [./ /dev/shm/kubeswitch-0.8.1 /dev/shm /dev / /home/x] 
INFO [lintersdb] Active 7 linters: [errcheck gosimple govet ineffassign staticcheck typecheck unused] 
INFO [loader] Go packages loading at mode 575 (exports_file|files|imports|types_sizes|compiled_files|name|deps) took 369.488726ms 
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 6.044975ms 
INFO [linters_context/goanalysis] analyzers took 0s with no stages 
INFO [runner] Issues before processing: 12, after processing: 0 
INFO [runner] Processors filtering stat (out/in): cgo: 12/12, skip_dirs: 12/12, exclude: 12/12, exclude-rules: 0/12, autogenerated_exclude: 12/12, filename_unadjuster: 12/12, path_prettifier: 12/12, skip_files: 12/12, identifier_marker: 12/12 
INFO [runner] processing took 348.727µs with stages: identifier_marker: 128.002µs, autogenerated_exclude: 105.193µs, path_prettifier: 56.306µs, skip_dirs: 40.314µs, exclude-rules: 12.234µs, cgo: 1.966µs, nolint: 983ns, fixer: 692ns, max_same_issues: 545ns, skip_files: 436ns, filename_unadjuster: 405ns, severity-rules: 331ns, exclude: 281ns, diff: 223ns, max_per_file_from_linter: 163ns, source_code: 150ns, max_from_linter: 127ns, sort_results: 106ns, uniq_by_line: 105ns, path_prefixer: 83ns, path_shortener: 82ns 
INFO [runner] linters took 219.884616ms with stages: goanalysis_metalinter: 219.490396ms 
INFO File cache stats: 0 entries of total size 0B 
INFO Memory: 7 samples, avg is 40.3MB, max is 67.3MB 
INFO Execution took 598.978578ms                  
Executing go vet
Executing gofmt/goimports
Check for license headers
All checks successful
# runtime/cgo
clang-16: error: argument unused during compilation: '-arch x86_64' [-Werror,-Wunused-command-line-argument]
make: *** [Makefile:34: build-switcher] Error 1

Building using the (gcc) it fails using the following issues:

x@y: /dev/shm/kubeswitch-0.8.1$ export CC="gcc"
x@y: /dev/shm/kubeswitch-0.8.1$ make all
> Format
> Test
ok  	github.com/danielfoehrkn/kubeswitch/pkg/config/migration	(cached)
ok  	github.com/danielfoehrkn/kubeswitch/pkg/config/validation	(cached)
> Check
Executing golangci-lint
/dev/shm/kubeswitch-0.8.1/hack/tools/bin/golangci-lint
INFO [config_reader] Config search paths: [./ /dev/shm/kubeswitch-0.8.1 /dev/shm /dev / /home/x] 
INFO [lintersdb] Active 7 linters: [errcheck gosimple govet ineffassign staticcheck typecheck unused] 
INFO [loader] Go packages loading at mode 575 (compiled_files|deps|exports_file|files|imports|name|types_sizes) took 364.056768ms 
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 6.909621ms 
INFO [linters_context/goanalysis] analyzers took 0s with no stages 
INFO [runner] Issues before processing: 12, after processing: 0 
INFO [runner] Processors filtering stat (out/in): path_prettifier: 12/12, skip_dirs: 12/12, identifier_marker: 12/12, cgo: 12/12, autogenerated_exclude: 12/12, exclude: 12/12, filename_unadjuster: 12/12, skip_files: 12/12, exclude-rules: 0/12 
INFO [runner] processing took 338.257µs with stages: autogenerated_exclude: 114.188µs, identifier_marker: 95.274µs, path_prettifier: 62.914µs, skip_dirs: 45.893µs, exclude-rules: 13.415µs, cgo: 2.387µs, nolint: 959ns, filename_unadjuster: 637ns, max_same_issues: 479ns, skip_files: 393ns, fixer: 303ns, severity-rules: 233ns, diff: 232ns, exclude: 229ns, max_from_linter: 143ns, sort_results: 109ns, source_code: 105ns, uniq_by_line: 102ns, path_shortener: 94ns, max_per_file_from_linter: 87ns, path_prefixer: 81ns 
INFO [runner] linters took 188.482193ms with stages: goanalysis_metalinter: 188.09972ms 
INFO File cache stats: 0 entries of total size 0B 
INFO Memory: 7 samples, avg is 40.0MB, max is 66.8MB 
INFO Execution took 562.844673ms                  
Executing go vet
Executing gofmt/goimports
Check for license headers
All checks successful
# runtime/cgo
gcc: error: x86_64: No such file or directory
gcc: error: unrecognized command line option '-arch'; did you mean '-march='?
make: *** [Makefile:34: build-switcher] Error 1

The strange thing is however that the go binary is being built nevertheless as hack/switch/switcher_linux_amd64 and this still seems to work well - at least using local store.

So I'm wondering what's causing the compile error and what are the consequences of the failed compile (as the go binary is built anyhow).

hhue13 avatar Jan 12 '24 09:01 hhue13