#64294 closed defect (fixed)
isl @0.24: Does not use -arch flags for all compilations
Reported by: | barracuda156 | Owned by: | MarcusCalhoun-Lopez (Marcus Calhoun-Lopez) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.7.1 |
Keywords: | PowerPC, Leopard, ppc64, gcc | Cc: | |
Port: | isl |
Description
The build fails with:
/opt/local/bin/ranlib: file: .libs/libisl.a(isl_ffs.o) has no symbols libtool: link: ranlib .libs/libisl.a ranlib: file: .libs/libisl.a(isl_ffs.o) has no symbols libtool: link: ( cd ".libs" && rm -f "libisl.la" && ln -s "../libisl.la" "libisl.la" ) /bin/sh ./libtool --tag=CC --mode=link /usr/bin/gcc-4.2 -O1 -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc64 -o isl_test isl_test.o libisl.la -lgmp /bin/sh ./libtool --tag=CC --mode=link /usr/bin/gcc-4.2 -O1 -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc64 -o isl_polyhedron_sample polyhedron_sample.o libisl.la /bin/sh ./libtool --tag=CC --mode=link /usr/bin/gcc-4.2 -O1 -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc64 -o isl_pip pip.o libisl.la -lgmp /bin/sh ./libtool --tag=CC --mode=link /usr/bin/gcc-4.2 -O1 -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc64 -o isl_polyhedron_minimize polyhedron_minimize.o libisl.la -lgmp libtool: link: /usr/bin/gcc-4.2 -O1 -Wl,-headerpad_max_install_names -arch ppc64 -o .libs/isl_polyhedron_sample polyhedron_sample.o -L/opt/local/lib ./.libs/libisl.dylib /opt/local/lib/libgmp.dylib ld warning: in polyhedron_sample.o, file is not of required architecture Undefined symbols: "_main", referenced from: start in crt1.10.5.o ld: symbol(s) not found collect2: ld returned 1 exit status make[2]: *** [isl_polyhedron_sample] Error 1 make[2]: *** Waiting for unfinished jobs.... libtool: link: /usr/bin/gcc-4.2 -O1 -Wl,-headerpad_max_install_names -arch ppc64 -o .libs/isl_polyhedron_minimize polyhedron_minimize.o -L/opt/local/lib ./.libs/libisl.dylib /opt/local/lib/libgmp.dylib libtool: link: /usr/bin/gcc-4.2 -O1 -Wl,-headerpad_max_install_names -arch ppc64 -o .libs/isl_pip pip.o -L/opt/local/lib ./.libs/libisl.dylib /opt/local/lib/libgmp.dylib libtool: link: /usr/bin/gcc-4.2 -O1 -Wl,-headerpad_max_install_names -arch ppc64 -o .libs/isl_test isl_test.o -L/opt/local/lib ./.libs/libisl.dylib /opt/local/lib/libgmp.dylib ld warning: in polyhedron_minimize.o, file is not of required architecture Undefined symbols: "_main", referenced from: start in crt1.10.5.o ld: symbol(s) not found collect2: ld returned 1 exit status make[2]: *** [isl_polyhedron_minimize] Error 1 ld warning: in pip.o, file is not of required architecture Undefined symbols: "_main", referenced from: start in crt1.10.5.o ld: symbol(s) not found collect2: ld returned 1 exit status ld warning: in isl_test.o, file is not of required architecture Undefined symbols: "_main", referenced from: start in crt1.10.5.o ld: symbol(s) not found collect2: ld returned 1 exit status make[2]: *** [isl_pip] Error 1 make[2]: *** [isl_test] Error 1 make[2]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_isl/isl/work/isl-0.24-ppc64' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_isl/isl/work/isl-0.24-ppc64' make: *** [all] Error 2 make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_isl/isl/work/isl-0.24-ppc64' Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_isl/isl/work/isl-0.24-ppc64" && /usr/bin/make -j4 -w all Exit code: 2 Error: Failed to build isl: command execution failed Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_isl/isl/main.log for details. Error: Follow https://guide.macports.org/#project.tickets if you believe there is a bug.
Earlier version built as universal:
36-225:~ svacchanda$ port -v installed isl The following ports are currently installed: isl @0.22.1_0 requested_variants='-universal' platform='darwin 9' archs='ppc' date='2021-12-22T12:17:44+0800' isl @0.22.1_0+universal (active) requested_variants='+universal' platform='darwin 9' archs='ppc ppc64' date='2021-12-21T10:37:51+0800'
Attachments (1)
Change History (13)
Changed 3 years ago by barracuda156
comment:1 follow-up: 2 Changed 3 years ago by barracuda156
comment:2 Changed 3 years ago by ryandesign (Ryan Carsten Schmidt)
Replying to barracuda156:
Another problem, if it is built and installed ppc-only, it breaks down gcc6 and gcc7 existing installations:
Could not open /opt/local/lib/libisl.22.dylibAfter
isl
update there is nolibisl.22.dylib
there, it is replaced withlibisl.23.dylib
.
Of course. isl @0.22 provided libisl.22.dylib. isl 0.24 provides libisl.23.dylib. This library version change is why all the gcc ports that linked with libisl.22.dylib had their revisions increased as part of the isl @0.24 update and now need to be rebuilt.
comment:3 Changed 3 years ago by ryandesign (Ryan Carsten Schmidt)
Owner: | set to MarcusCalhoun-Lopez |
---|---|
Status: | new → assigned |
Summary: | New version of isl seems broken for ppc64 → isl @0.24: Does not use -arch flags for all compilations |
Replying to barracuda156:
ld warning: in polyhedron_sample.o, file is not of required architecture
Yes I can see from the main.log that the gcc-4.2 invocation that created polyhedron_sample.o (and similarly for several other objects) did not use any -arch
flags:
depbase=`echo polyhedron_sample.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ /usr/bin/gcc-4.2 -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude/ -I/opt/local/include -O1 -MT polyhedron_sample.o -MD -MP -MF $depbase.Tpo -c -o polyhedron_sample.o polyhedron_sample.c &&\ mv -f $depbase.Tpo $depbase.Po
So I would expect any universal or non-default-arch build of isl on any OS version to fail at this point.
comment:4 Changed 3 years ago by ryandesign (Ryan Carsten Schmidt)
Confirmed: a standard +universal build on Lion also fails.
comment:5 Changed 3 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
There is a pull request that should (hopefully) fix this problem.
Any feedback would be appreciated.
comment:6 Changed 3 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:7 Changed 3 years ago by barracuda156
After upgrade of isl both gcc6 and gcc7 are broken:
Could not open /opt/local/lib/libisl.22.dylib: Error opening or reading file (referenced from /opt/local/libexec/gcc/ppc-apple-darwin9/6.5.0/cc1) ---> Found 12 broken files, matching files to ports ---> Found 2 broken ports, determining rebuild order You can always run 'port rev-upgrade' again to fix errors. The following ports will be rebuilt: gcc6 @6.5.0+universal gcc7 @7.5.0+universal Continue? [Y/n]: n 36-225:~ svacchanda$ port -v installed isl The following ports are currently installed: isl @0.22.1_0 requested_variants='-universal' platform='darwin 9' archs='ppc' date='2021-12-22T12:17:44+0800' isl @0.22.1_0+universal requested_variants='+universal' platform='darwin 9' archs='ppc ppc64' date='2021-12-21T10:37:51+0800' isl @0.24_1+universal (active) requested_variants='+universal' platform='darwin 9' archs='ppc ppc64' date='2021-12-29T00:57:53+0800'
comment:8 Changed 3 years ago by ryandesign (Ryan Carsten Schmidt)
The ports that linked with libisl.22.dylib need to be rebuilt as I explained in comment:2. Selfupdate and upgrade outdated. For gcc6, you need @6.5.0_7. For gcc7, you need @7.5.0_3.
comment:9 follow-up: 10 Changed 3 years ago by kencu (Ken)
when a library changes sufficiently that it can no longer properly support the software built against it (an ABI change), by convention it changes it’s library name version number, like isl has just done. This breaks all existing software using that library, forcing all of it to rebuild against the new library.
So this is all as expected.
Some people try making a symlink from the new version to the old. This is nutty, as it won’t work reliably.
debian and other linux distros often leave behind the old library version, so nothing needs urgent rebuilding, but then builds gradually get rebuilt against the new version of the library through natural updates. Once everything has rebuilt, they remove the old library. That works, but you can see takes lots of organization, and has it’s own many issues, so MacPorts does not generally do that unless software can’t build against the new library version.
So you can either rebuild, or hold back updating isl until you are ready to rebuild if you like. Or given you are on PPC where rebuilding gcc is a week-long project, you can steal out the old isl libs, if the are standalone, and leave those behind like debian does for a while, but there are potholes there to avoid and you must know what you are doing!!
People are proposing exactly this kind of thing for openssl in a PR right now in the PR queue, but I suspect it will not be allowed.
comment:10 Changed 3 years ago by barracuda156
Replying to kencu:
when a library changes sufficiently that it can no longer properly support the software built against it (an ABI change), by convention it changes it’s library name version number, like isl has just done. This breaks all existing software using that library, forcing all of it to rebuild against the new library.
So this is all as expected.
Some people try making a symlink from the new version to the old. This is nutty, as it won’t work reliably.
debian and other linux distros often leave behind the old library version, so nothing needs urgent rebuilding, but then builds gradually get rebuilt against the new version of the library through natural updates. Once everything has rebuilt, they remove the old library. That works, but you can see takes lots of organization, and has it’s own many issues, so MacPorts does not generally do that unless software can’t build against the new library version.
So you can either rebuild, or hold back updating isl until you are ready to rebuild if you like. Or given you are on PPC where rebuilding gcc is a week-long project, you can steal out the old isl libs, if the are standalone, and leave those behind like debian does for a while, but there are potholes there to avoid and you must know what you are doing!!
People are proposing exactly this kind of thing for openssl in a PR right now in the PR queue, but I suspect it will not be allowed.
Got it, thank you!
Gonna rebuild then, what to do. I just got SSD installed into my Quad tonight for 10.6, but 10.5.8 remains on HDD volume for a while. (I am just back to the Quad, gonna study your discussion with Iains now.)
- S. Since you mentioned openssl (asking here, since the ticket is closed): I have noticed you used openssl 1.1.1 in your SLPPC ports, while current version is 3.2. Was it for some specific reason or just left unupdated?
comment:11 follow-up: 12 Changed 3 years ago by kencu (Ken)
just never got around to updating that repo again since this summer, and as I don't have that 10.6 PPC set up any more, I probably never will.
If you are ready to take over the lead on that, please feel free to clone/fork/take the repo over, and go for it!
comment:12 Changed 3 years ago by barracuda156
Replying to kencu:
just never got around to updating that repo again since this summer, and as I don't have that 10.6 PPC set up any more, I probably never will.
If you are ready to take over the lead on that, please feel free to clone/fork/take the repo over, and go for it!
Got it! I am willing, and I am actually working on ports to build for 10.6 PPC, but I will need to review my changes and amend them to be acceptable for public sharing (as long as it was just on my machine, I needed not care about existence of anything else).
If I will really need some help that is specific to 10.6 PPC, where may I ask you (or anyone)? It may not ever be necessary - as long as I can make a port build for ppc-32 on 10.5.8, most likely it can be fixed for 10.6, and I can do that on my end. But just in case.
So far I have far more problems with building universal on 10.5.8 than building natively on 10.6 PPC.
Another problem, if it is built and installed ppc-only, it breaks down gcc6 and gcc7 existing installations:
After
isl
update there is nolibisl.22.dylib
there, it is replaced withlibisl.23.dylib
.