mold/mold.spec
Martin Liška 6f2035fba2 - Update to version 2.4.1
* mold 2.4.0 or prior may promote weak dynamic symbols to strong ones under a rare
    circumstance, which caused "undefined symbol" error at runtime. The bug has been
    fixed. (50bdf39)
  * Previously, if two or more VERSION clauses in a version script match to the same
    symbol, the first one took precedence. This was incompatible with GNU ld, which
    gives the last one the highest priority, causing a Qt library link failure. This
    compatibility issue has been resolved. (e1e16bf)
  * By default, we demangle symbols in error messages so that they are easier to
    read. Previously, Rust symbols could accidentally be demangled as C++ symbols.
    Now, mold attempts to demangle symbols as Rust ones only for object files
    created by rustc. (ea9864b)
  * [RISC-V] mold now relaxes a GOT-load instruction sequence into a direct address
    materialization if the symbol address is known at link time. This relaxation
    eliminates one memory load and slightly improves the linked program's
    performance. (2ccaa81)
  * [PowerPC64 ELFv2] GCC may emit references to _savegpr0_*, _restgpr0_*,
    _savegpr1_* and _restgpr1_* symbols for the -Os command line option to optimize
    the output for code size. These symbols are not defined by any object file and
    expected to be synthesized by the linker. mold didn't use to synthesize these
    symbols, and therefore object files created with -Os sometimes failed due to
    missing symbol errors. Now, mold synthesizes these symbols. (d4ff48a)
  * [PowerPC64] R_PPC64_DTPREL16_LO_DS relocation type has now been supported.
    (6d8e6af)
  * [Illumos] On Illumos OS, absolute symbols in DSOs need to be resolved at runtime
    because the dynamic linker treats such symbols in a special manner. Previously,
    mold directly used absolute symbol addresses at link-time and did not place them
    into the dynamic symbol table. That optimization has been removed for
    compatibility with Illumos. (bed5b17, 7f8d77d)

OBS-URL: https://build.opensuse.org/package/show/devel:tools:compiler/mold?expand=0&rev=112
2024-03-01 14:53:28 +00:00

116 lines
2.9 KiB
RPMSpec

#
# spec file for package mold
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: mold
Version: 2.4.1
Release: 0
Summary: A Modern Linker (mold)
License: MIT
Group: Development/Tools/Building
URL: https://github.com/rui314/mold
Source: https://github.com/rui314/mold/archive/v%{version}/mold-%{version}.tar.gz
Patch0: build-blake-3-as-static.patch
BuildRequires: cmake
%if %{suse_version} < 1550
BuildRequires: gcc11-c++
%else
# These libraries are not present for openSUSE Leap
BuildRequires: gcc-c++
BuildRequires: clang
BuildRequires: libdwarf-tools
BuildRequires: llvm
BuildRequires: llvm-gold
BuildRequires: tbb-devel
%ifarch x86_64
BuildRequires: gcc-32bit
%endif
%endif
BuildRequires: gdb
BuildRequires: glibc-devel-static
BuildRequires: libzstd-devel
%ifnarch ppc64
BuildRequires: valgrind
%endif
BuildRequires: zlib-devel
BuildRequires: zstd
PreReq: update-alternatives
%if %{suse_version} < 1550
%define build_args -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_MIMALLOC=OFF
%else
%define build_args -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_MIMALLOC=OFF -DMOLD_USE_SYSTEM_TBB=ON
%endif
%description
mold is a faster drop-in replacement for existing Unix linkers.
It is several times faster than LLVM lld linker, the second-fastest
open-source linker.
mold is created for increasing developer productivity by reducing
build time especially in rapid debug-edit-rebuild cycles.
%prep
%autosetup -p1
%build
%if %{suse_version} < 1550
export CC=gcc-11
export CXX=g++-11
%endif
%cmake %{build_args}
%cmake_build
%install
%cmake_install
%check
%if %{suse_version} < 1550
export TEST_CC=gcc-11
export TEST_CXX=g++-11
%endif
%ctest
%post
"%_sbindir/update-alternatives" --install \
"%_bindir/ld" ld "%_bindir/ld.mold" 1
%pre
if [ "$1" -gt 0 ] && [ -f %{_sbindir}/update-alternatives ] ; then
"%_sbindir/update-alternatives" --remove ld "%_bindir/ld.mold";
fi;
%postun
if [ ! -f %{_bindir}/lld ] ; then
"%{_sbindir}/update-alternatives" --remove ld "%{_bindir}/ld.mold"
fi
%files
%ghost %_sysconfdir/alternatives/ld
%{_bindir}/mold
%{_bindir}/ld.mold
%dir %{_libdir}/mold
%{_libexecdir}/mold/ld
%dir %{_libexecdir}/mold
%{_libdir}/mold/mold-wrapper.so
%{_mandir}/man1/mold.1.gz
%{_mandir}/man1/ld.mold.1.gz
%dir %{_docdir}/mold
%doc %{_docdir}/mold/LICENSE
%doc %{_docdir}/mold/LICENSE.third-party
%changelog