Hamlib / Hamlib

Ham radio control library for rigs, rotators, tuners, and amplifiers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build fails with LTO

eli-schwartz opened this issue · comments

I tried to build with the following *FLAGS to optimize the build: -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

Note the -Werror=* flags are used to help detect cases where the compiler tries to optimize by assuming UB cannot exist in the source code -- if it does exist, ordinarily the code would be miscompiled, and this says to make the miscompilation a fatal error.

I got this error:

/bin/sh ../libtool  --tag=CC   --mode=link x86_64-pc-linux-gnu-gcc -Wall -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types   -no-undefined -version-info 4:6:0 -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -o libhamlib.la -rpath /usr/lib64/hamlib rig.lo serial.lo misc.lo register.lo event.lo cal.lo conf.lo tones.lo rotator.lo locator.lo rot_reg.lo rot_conf.lo rot_settings.lo rot_ext.lo iofunc.lo ext.lo mem.lo settings.lo parallel.lo usb_port.lo debug.lo network.lo cm108.lo gpio.lo microham.lo amplifier.lo amp_reg.lo amp_conf.lo amp_settings.lo extamp.lo sleep.lo sprintflst.lo cache.lo snapshot_data.lo ../lib/libmisc.la ../security/libsecurity.la  ../rigs/adat/libhamlib-adat.la ../rigs/alinco/libhamlib-alinco.la ../rigs/aor/libhamlib-aor.la ../rigs/barrett/libhamlib-barrett.la ../rigs/codan/libhamlib-codan.la ../rigs/dorji/libhamlib-dorji.la ../rigs/drake/libhamlib-drake.la ../rigs/dummy/libhamlib-dummy.la ../rigs/elad/libhamlib-elad.la ../rigs/flexradio/libhamlib-flexradio.la ../rigs/icom/libhamlib-icom.la ../rigs/icmarine/libhamlib-icmarine.la ../rigs/jrc/libhamlib-jrc.la ../rigs/kachina/libhamlib-kachina.la ../rigs/kenwood/libhamlib-kenwood.la ../rigs/kit/libhamlib-kit.la ../rigs/lowe/libhamlib-lowe.la ../rigs/pcr/libhamlib-pcr.la ../rigs/prm80/libhamlib-prm80.la ../rigs/racal/libhamlib-racal.la ../rigs/rft/libhamlib-rft.la ../rigs/rs/libhamlib-rs.la ../rigs/skanti/libhamlib-skanti.la ../rigs/tapr/libhamlib-tapr.la ../rigs/tentec/libhamlib-tentec.la ../rigs/tuner/libhamlib-tuner.la ../rigs/uniden/libhamlib-uniden.la ../rigs/winradio/libhamlib-winradio.la ../rigs/wj/libhamlib-wj.la ../rigs/yaesu/libhamlib-yaesu.la ../rigs/gomspace/libhamlib-gomspace.la ../rotators/amsat/libhamlib-amsat.la ../rotators/ars/libhamlib-ars.la ../rotators/celestron/libhamlib-celestron.la ../rotators/cnctrk/libhamlib-cnctrk.la ../rotators/grbltrk/libhamlib-grbltrk.la ../rotators/easycomm/libhamlib-easycomm.la ../rotators/ether6/libhamlib-ether6.la ../rotators/fodtrack/libhamlib-fodtrack.la ../rotators/gs232a/libhamlib-gs232a.la ../rotators/heathkit/libhamlib-heathkit.la ../rotators/m2/libhamlib-m2.la ../rotators/meade/libhamlib-meade.la ../rotators/rotorez/libhamlib-rotorez.la ../rotators/sartek/libhamlib-sartek.la ../rotators/spid/libhamlib-spid.la ../rotators/ts7400/libhamlib-ts7400.la ../rotators/prosistel/libhamlib-prosistel.la ../rotators/ioptron/libhamlib-ioptron.la ../rotators/satel/libhamlib-satel.la ../rotators/radant/libhamlib-radant.la ../amplifiers/elecraft/libhamlib-elecraft.la ../amplifiers/gemini/libhamlib-gemini.la  -lm -lusb-1.0  -lreadline
libtool: link: x86_64-pc-linux-gnu-gcc -shared  -fPIC -DPIC  .libs/rig.o .libs/serial.o .libs/misc.o .libs/register.o .libs/event.o .libs/cal.o .libs/conf.o .libs/tones.o .libs/rotator.o .libs/locator.o .libs/rot_reg.o .libs/rot_conf.o .libs/rot_settings.o .libs/rot_ext.o .libs/iofunc.o .libs/ext.o .libs/mem.o .libs/settings.o .libs/parallel.o .libs/usb_port.o .libs/debug.o .libs/network.o .libs/cm108.o .libs/gpio.o .libs/microham.o .libs/amplifier.o .libs/amp_reg.o .libs/amp_conf.o .libs/amp_settings.o .libs/extamp.o .libs/sleep.o .libs/sprintflst.o .libs/cache.o .libs/snapshot_data.o  -Wl,--whole-archive ../lib/.libs/libmisc.a ../security/.libs/libsecurity.a ../rigs/adat/.libs/libhamlib-adat.a ../rigs/alinco/.libs/libhamlib-alinco.a ../rigs/aor/.libs/libhamlib-aor.a ../rigs/barrett/.libs/libhamlib-barrett.a ../rigs/codan/.libs/libhamlib-codan.a ../rigs/dorji/.libs/libhamlib-dorji.a ../rigs/drake/.libs/libhamlib-drake.a ../rigs/dummy/.libs/libhamlib-dummy.a ../rigs/elad/.libs/libhamlib-elad.a ../rigs/flexradio/.libs/libhamlib-flexradio.a ../rigs/icom/.libs/libhamlib-icom.a ../rigs/icmarine/.libs/libhamlib-icmarine.a ../rigs/jrc/.libs/libhamlib-jrc.a ../rigs/kachina/.libs/libhamlib-kachina.a ../rigs/kenwood/.libs/libhamlib-kenwood.a ../rigs/kit/.libs/libhamlib-kit.a ../rigs/lowe/.libs/libhamlib-lowe.a ../rigs/pcr/.libs/libhamlib-pcr.a ../rigs/prm80/.libs/libhamlib-prm80.a ../rigs/racal/.libs/libhamlib-racal.a ../rigs/rft/.libs/libhamlib-rft.a ../rigs/rs/.libs/libhamlib-rs.a ../rigs/skanti/.libs/libhamlib-skanti.a ../rigs/tapr/.libs/libhamlib-tapr.a ../rigs/tentec/.libs/libhamlib-tentec.a ../rigs/tuner/.libs/libhamlib-tuner.a ../rigs/uniden/.libs/libhamlib-uniden.a ../rigs/winradio/.libs/libhamlib-winradio.a ../rigs/wj/.libs/libhamlib-wj.a ../rigs/yaesu/.libs/libhamlib-yaesu.a ../rigs/gomspace/.libs/libhamlib-gomspace.a ../rotators/amsat/.libs/libhamlib-amsat.a ../rotators/ars/.libs/libhamlib-ars.a ../rotators/celestron/.libs/libhamlib-celestron.a ../rotators/cnctrk/.libs/libhamlib-cnctrk.a ../rotators/grbltrk/.libs/libhamlib-grbltrk.a ../rotators/easycomm/.libs/libhamlib-easycomm.a ../rotators/ether6/.libs/libhamlib-ether6.a ../rotators/fodtrack/.libs/libhamlib-fodtrack.a ../rotators/gs232a/.libs/libhamlib-gs232a.a ../rotators/heathkit/.libs/libhamlib-heathkit.a ../rotators/m2/.libs/libhamlib-m2.a ../rotators/meade/.libs/libhamlib-meade.a ../rotators/rotorez/.libs/libhamlib-rotorez.a ../rotators/sartek/.libs/libhamlib-sartek.a ../rotators/spid/.libs/libhamlib-spid.a ../rotators/ts7400/.libs/libhamlib-ts7400.a ../rotators/prosistel/.libs/libhamlib-prosistel.a ../rotators/ioptron/.libs/libhamlib-ioptron.a ../rotators/satel/.libs/libhamlib-satel.a ../rotators/radant/.libs/libhamlib-radant.a ../amplifiers/elecraft/.libs/libhamlib-elecraft.a ../amplifiers/gemini/.libs/libhamlib-gemini.a -Wl,--no-whole-archive  -Wl,--as-needed -ldl -lpthread -lm -lusb-1.0 -lreadline  -march=native -fstack-protector-all -O2 -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types -Wl,-O1 -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0   -pthread -Wl,-soname -Wl,libhamlib.so.4 -o .libs/libhamlib.so.4.0.6
rig.c:874:22: error: type of 'settings_file' does not match original declaration [-Werror=lto-type-mismatch]
  874 |         extern char *settings_file;
      |                      ^
settings.c:977:6: note: 'settings_file' was previously declared here
  977 | char settings_file[4096];
      |      ^
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-gcc returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:551: libhamlib.la] Error 1

Downstream report: https://bugs.gentoo.org/926839
Full build log: build.log

Thanks. After manually backporting that patch, the build gets a lot further. It fails again in the tests directory:

make[1]: Entering directory '/var/tmp/portage/media-libs/hamlib-4.5.5-r2/work/hamlib-4.5.5/tests'
/bin/sh ../libtool  --tag=CC   --mode=link x86_64-pc-linux-gnu-gcc -Wall -pthread -I../src -I../security -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types  -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -o rigctld rigctld-rigctld.o rigctld-rigctl_parse.o rigctld-dumpcaps.o  -lpthread ../src/libhamlib.la ../lib/libmisc.la -ldl  -lreadline
libtool: link: x86_64-pc-linux-gnu-gcc -Wall -I../src -I../security -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wformat -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types -Wl,-O1 -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -o .libs/rigctld rigctld-rigctld.o rigctld-rigctl_parse.o rigctld-dumpcaps.o  -Wl,--as-needed ../src/.libs/libhamlib.so -lpthread -lm -lusb-1.0 ../lib/.libs/libmisc.a -ldl -lreadline -pthread
rigctld.c:153:13: error: type of 'rigctld_password' does not match original declaration [-Werror=lto-type-mismatch]
  153 | extern char rigctld_password[65];
      |             ^
rigctl_parse.c:99:6: note: array types have different bounds
   99 | char rigctld_password[64];
      |      ^
rigctl_parse.c:99:6: note: 'rigctld_password' was previously declared here
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-gcc returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:1043: rigctld] Error 1

Thanks -- for some reason github never sent me a notification for the updates (?) but I just confirmed the additional fix works on my end too.