gentoo / dlang

[MIRROR] D programming language ebuild repository
https://gitweb.gentoo.org/repo/user/dlang.git
GNU General Public License v2.0
30 stars 25 forks source link

dev-util/dub: emerge fails with ldc2 and -flto #108

Closed mccarverone closed 2 years ago

mccarverone commented 2 years ago

When trying to build with flag '-flto=8' included in make.conf it fails at compile time.

LDFLAGS look suspicious:

>>> Emerging (1 of 1) dev-util/dub-1.29.0::dlang
 * dub-1.29.0.tar.gz BLAKE2B SHA512 size ;-) ...                                            [ ok ]
 * FEATURES='assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live ccache config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr'
 * CFLAGS='-march=native -O2 -flto=8 -pipe -Wl,-O1 -Wl,--as-needed'
 * CXXFLAGS='-march=native -O2 -flto=8 -pipe -Wl,-O1 -Wl,--as-needed'
 * FFLAGS='-march=native -O2 -flto=8 -pipe -Wl,-O1 -Wl,--as-needed'
 * FCFLAGS='-march=native -O2 -flto=8 -pipe -Wl,-O1 -Wl,--as-needed'
 * F77FLAGS='-march=native -O2 -flto=8 -pipe -Wl,-O1 -Wl,--as-needed'
 * LDFLAGS='-Wl,-O1 -Wl,--as-needed -march=native -O2 -flto=8 -pipe'
 * MAKEOPTS='-j8'
 * gcc (Gentoo 11.3.0 p7) 11.3.0
 * g++ (Gentoo 11.3.0 p7) 11.3.0
 * GNU ld (Gentoo 2.38 p4) 2.38

When I remove '-flto' the LDFLAGS variable changes LDFLAGS='-Wl,-O1 -Wl,--as-needed' and everything builds perfectly.

Of course tainting LDFLAGS will confuse the compiler, this is from the build log:

/usr/lib/ldc2/1.29/bin/ldc2 -mcpu=native -O4 -release -op source/app.d source/dub/commandline.d source/dub/dependency.d source/dub/dependencyresolver.d source/dub/description.d source/dub/dub.d source/dub/init.d source/dub/packagemanager.d source/dub/packagesupplier.d source/dub/packagesuppliers/package.d source/dub/packagesuppliers/fallback.d source/dub/packagesuppliers/filesystem.d source/dub/packagesuppliers/packagesupplier.d source/dub/packagesuppliers/maven.d source/dub/packagesuppliers/registry.d source/dub/package_.d source/dub/platform.d source/dub/project.d source/dub/semver.d source/dub/compilers/buildsettings.d source/dub/compilers/compiler.d source/dub/compilers/dmd.d source/dub/compilers/gdc.d source/dub/compilers/ldc.d source/dub/compilers/utils.d source/dub/generators/build.d source/dub/generators/cmake.d source/dub/generators/generator.d source/dub/generators/sublimetext.d source/dub/generators/targetdescription.d source/dub/generators/visuald.d source/dub/internal/git.d source/dub/internal/libInputVisitor.d source/dub/internal/sdlang/ast.d source/dub/internal/sdlang/exception.d source/dub/internal/sdlang/lexer.d source/dub/internal/sdlang/package.d source/dub/internal/sdlang/parser.d source/dub/internal/sdlang/symbol.d source/dub/internal/sdlang/token.d source/dub/internal/sdlang/util.d source/dub/internal/undead/xml.d source/dub/internal/utils.d source/dub/internal/vibecompat/core/file.d source/dub/internal/vibecompat/core/log.d source/dub/internal/vibecompat/data/json.d source/dub/internal/vibecompat/data/serialization.d source/dub/internal/vibecompat/data/utils.d source/dub/internal/vibecompat/inet/path.d source/dub/internal/vibecompat/inet/url.d source/dub/recipe/io.d source/dub/recipe/json.d source/dub/recipe/packagerecipe.d source/dub/recipe/sdl.d -d-version=DubApplication -d-version=DubUseCurl -I=source -L=-lcurl -L=-lz -L-O1 -L--as-needed -march=native -O2 -flto=8 -pipe -of=bin/dub
ldc2: for the --flto option: Cannot find option named '8'!
ldc2: Unknown command line argument '-pipe'.  Try: '/usr/lib/ldc2/1.29/bin/ldc2 --help'
ldc2: Did you mean '--de'?

Maybe something is there with flags handling in dlang.eclass but I couldn't pinpoint the issue.

the-horo commented 2 years ago

Can you paste the whole make.conf and build.log files?

What seems to happen is *FLAGS and LDFLAGS being mixed up. I don't know how this ended up happening but I know of nothing in particular in this overlay that could cause it.

mccarverone commented 2 years ago

Thanks for your reply but as it turned out it was an issue with "portage-bashrc-mv" from mv overlay. This behaviour was intended and preventable by setting NOCADD=1 during emerge.