Update this to try to get determanistic builds.
Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
parent
1d1034c44c
commit
b77fe59ae4
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
clog
|
clog
|
||||||
gnu-efi?3.0*.tar.*
|
gnu-efi?3.0*.tar.*
|
||||||
*.rpm
|
*.rpm
|
||||||
|
gnu-efi-*/
|
||||||
|
.build*.log
|
||||||
|
25
0011-Nerf-Werror-pragma-away.patch
Normal file
25
0011-Nerf-Werror-pragma-away.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From 6671a712db5c4dfecd4e7026057a99d9b1c4fe5e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Tue, 7 Mar 2017 10:11:19 -0500
|
||||||
|
Subject: [PATCH] Nerf -Werror=pragma away
|
||||||
|
|
||||||
|
---
|
||||||
|
Make.defaults | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/Make.defaults b/Make.defaults
|
||||||
|
index a7778a7..8882701 100755
|
||||||
|
--- a/Make.defaults
|
||||||
|
+++ b/Make.defaults
|
||||||
|
@@ -87,6 +87,8 @@ OBJDIR := $(TOPDIR)/$(ARCH)
|
||||||
|
# Arch-specific compilation flags
|
||||||
|
CPPFLAGS += -DCONFIG_$(ARCH)
|
||||||
|
|
||||||
|
+CFLAGS += -Wno-error=pragmas
|
||||||
|
+
|
||||||
|
ifeq ($(ARCH),ia64)
|
||||||
|
CFLAGS += -mfixed-range=f32-f127
|
||||||
|
endif
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
34
0012-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch
Normal file
34
0012-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From bbd1ee0379327a58e042d288e371f314b7df2d55 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Wed, 15 Mar 2017 17:33:39 -0400
|
||||||
|
Subject: [PATCH] Make ia32 use our own div asm on gnu C as well.
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/ia32/math.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/ia32/math.c b/lib/ia32/math.c
|
||||||
|
index 81f51bf..fce7a8d 100644
|
||||||
|
--- a/lib/ia32/math.c
|
||||||
|
+++ b/lib/ia32/math.c
|
||||||
|
@@ -140,7 +140,7 @@ DivU64x32 (
|
||||||
|
// divide 64bit by 32bit and get a 64bit result
|
||||||
|
// N.B. only works for 31bit divisors!!
|
||||||
|
{
|
||||||
|
-#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||||
|
+#if 0 && defined(__GNUC__) && !defined(__MINGW32__)
|
||||||
|
if (Remainder)
|
||||||
|
*Remainder = Dividend % Divisor;
|
||||||
|
return Dividend / Divisor;
|
||||||
|
@@ -157,7 +157,7 @@ DivU64x32 (
|
||||||
|
|
||||||
|
Rem = 0;
|
||||||
|
for (bit=0; bit < 64; bit++) {
|
||||||
|
-#ifdef __MINGW32__
|
||||||
|
+#if defined(__GNUC__) || defined(__MINGW32__)
|
||||||
|
asm (
|
||||||
|
"shll $1, %0\n\t"
|
||||||
|
"rcll $1, 4%0\n\t"
|
||||||
|
--
|
||||||
|
2.12.0
|
||||||
|
|
71
0013-Call-ar-in-deterministic-mode.patch
Normal file
71
0013-Call-ar-in-deterministic-mode.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From 0e95c51225b01f0ca79dafd607ae6a3e404db6be Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Tue, 28 Mar 2017 17:59:55 -0400
|
||||||
|
Subject: [PATCH 13/13] Call ar in deterministic mode.
|
||||||
|
|
||||||
|
We need the x86_64 and i686 builds of .a's to be the same, and that
|
||||||
|
means we need to not have timestamps. Also force the timestamps on disk
|
||||||
|
just in case that doesn't work, because RHEL's ar /silently ignores -D/.
|
||||||
|
|
||||||
|
v2: use "ar rvD" not "ar rv -D".
|
||||||
|
|
||||||
|
It's a wonder anybody ever gets these command line options right, if
|
||||||
|
"ar rv -D libfoo.a foo.o" doesn't use deterministic mode (or
|
||||||
|
complain), but "ar rvD libfoo.a foo.o" does.
|
||||||
|
|
||||||
|
v3: Add a bunch of junk to try to set timestamps to 0 manually
|
||||||
|
|
||||||
|
For some reason I'm still getting timestamps in the .a even though ar seems to
|
||||||
|
be invoked correctly. When I do "mock -r rhel-7-build --shell" and run make
|
||||||
|
manually, they're fine. Very strange.
|
||||||
|
|
||||||
|
v4: go back to v2, the problem isn't in the make process.
|
||||||
|
|
||||||
|
"ar rDv" works just fine, but /usr/lib/rpm/redhat/brp-strip-static-archive is
|
||||||
|
calling "%{__strip} -g $for_each.a", and it's rewriting our binary from
|
||||||
|
ts/uid/gid of 0/0/0 to $epoch/$UID/$GID. Awesomely /usr/bin/strip it seems to
|
||||||
|
have 3 modes of operation:
|
||||||
|
-U: the default, which adds $epoch/$UID/$GID to your binary archive
|
||||||
|
instead of just removing stuff. Clearly the Principle of Least
|
||||||
|
Surprise is strong here.
|
||||||
|
-p: preserve the timestamp from the original .a, but add UID and GID,
|
||||||
|
because this is 1980 and people use ar(1) for archiving stuff they
|
||||||
|
might want that out of.
|
||||||
|
-D: Condescend at you in a command line error and explain that -D both
|
||||||
|
is and is not a valid option:
|
||||||
|
/usr/bin/strip: invalid option -- 'D'
|
||||||
|
Usage: /usr/bin/strip <option(s)> in-file(s)
|
||||||
|
Removes symbols and sections from files
|
||||||
|
The options are:
|
||||||
|
...
|
||||||
|
-D --enable-deterministic-archives
|
||||||
|
Produce deterministic output when stripping archives
|
||||||
|
So I agree that it's invalid, but I think we may be pronouncing that
|
||||||
|
second vowel differently. They say in-VAL-id, I say IN-vuh-lid.
|
||||||
|
|
||||||
|
Nobody should ever have to run "strace -ttt -v -f -o make.strace make all",
|
||||||
|
just to discover the problem isn't even in there.
|
||||||
|
|
||||||
|
Related: rhbz#1310782
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
---
|
||||||
|
Make.defaults | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Make.defaults b/Make.defaults
|
||||||
|
index aa15c73..8f36365 100755
|
||||||
|
--- a/Make.defaults
|
||||||
|
+++ b/Make.defaults
|
||||||
|
@@ -167,7 +167,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
|
||||||
|
$(if $(findstring clang,$(CC)),-Wno-unknown-pragmas,)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-ARFLAGS += -U
|
||||||
|
+ARFLAGS := rDv
|
||||||
|
ASFLAGS += $(ARCH3264)
|
||||||
|
LDFLAGS += -nostdlib --warn-common --no-undefined --fatal-warnings \
|
||||||
|
--build-id=sha1
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
39
gnu-efi.spec
39
gnu-efi.spec
@ -1,7 +1,7 @@
|
|||||||
Summary: Development Libraries and headers for EFI
|
Summary: Development Libraries and headers for EFI
|
||||||
Name: gnu-efi
|
Name: gnu-efi
|
||||||
Version: 3.0.5
|
Version: 3.0.5
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}%{?buildid}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Group: Development/System
|
Group: Development/System
|
||||||
License: BSD
|
License: BSD
|
||||||
@ -10,10 +10,14 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
|||||||
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
|
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
|
||||||
BuildRequires: git
|
BuildRequires: git
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
BuildRequires: glibc32
|
#BuildRequires: glibc32
|
||||||
|
BuildRequires: glibc-devel(x86-32)
|
||||||
%endif
|
%endif
|
||||||
Source: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{version}.tar.bz2
|
Source: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{version}.tar.bz2
|
||||||
|
|
||||||
|
# dammit, rpmlint, shut up.
|
||||||
|
%define lib %{nil}lib%{nil}
|
||||||
|
|
||||||
Patch0001: 0001-Mark-our-explicit-fall-through-so-Wextra-will-work-i.patch
|
Patch0001: 0001-Mark-our-explicit-fall-through-so-Wextra-will-work-i.patch
|
||||||
Patch0002: 0002-Fix-some-types-gcc-doesn-t-like.patch
|
Patch0002: 0002-Fix-some-types-gcc-doesn-t-like.patch
|
||||||
Patch0003: 0003-Fix-arm-build-paths-in-the-makefile.patch
|
Patch0003: 0003-Fix-arm-build-paths-in-the-makefile.patch
|
||||||
@ -24,9 +28,25 @@ Patch0007: 0007-make-clang-not-complain-about-fno-merge-constants.patch
|
|||||||
Patch0008: 0008-Fix-another-place-clang-complains-about.patch
|
Patch0008: 0008-Fix-another-place-clang-complains-about.patch
|
||||||
Patch0009: 0009-route80h-remove-some-dead-code.patch
|
Patch0009: 0009-route80h-remove-some-dead-code.patch
|
||||||
Patch0010: 0010-Make-clang-not-complain-about-the-debughook-s-optimi.patch
|
Patch0010: 0010-Make-clang-not-complain-about-the-debughook-s-optimi.patch
|
||||||
|
Patch0011: 0011-Nerf-Werror-pragma-away.patch
|
||||||
|
Patch0012: 0012-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch
|
||||||
|
Patch0013: 0013-Call-ar-in-deterministic-mode.patch
|
||||||
|
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
|
|
||||||
|
# brp-strip-static-archive will senselessly /add/ timestamps and uid/gid
|
||||||
|
# data to our .a and make them not multilib clean if we don't have this.
|
||||||
|
# Note that if we don't have the shell quotes there, -p becomes $2 on its
|
||||||
|
# invocation, and so it completely ignores it.
|
||||||
|
#
|
||||||
|
# Also note that if we try to use -D as we should (so it doesn't add
|
||||||
|
# uid/gid), strip(1) from binutils-2.25.1-22.base.el7.x86_64 throws a
|
||||||
|
# syntax error.
|
||||||
|
#
|
||||||
|
# True story.
|
||||||
|
#
|
||||||
|
%global __strip "%{__strip} -p"
|
||||||
|
|
||||||
# Figure out the right file path to use
|
# Figure out the right file path to use
|
||||||
%global efidir %(eval echo $(grep ^ID= /etc/os-release | sed -e 's/^ID=//' -e 's/rhel/redhat/'))
|
%global efidir %(eval echo $(grep ^ID= /etc/os-release | sed -e 's/^ID=//' -e 's/rhel/redhat/'))
|
||||||
|
|
||||||
@ -82,8 +102,8 @@ git config --unset user.name
|
|||||||
make
|
make
|
||||||
make apps
|
make apps
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/lib
|
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib}
|
||||||
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/lib apps
|
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib} apps
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%install
|
%install
|
||||||
@ -96,11 +116,11 @@ mv %{buildroot}/%{_libdir}/*.lds %{buildroot}/%{_libdir}/*.o %{buildroot}/%{_lib
|
|||||||
mv %{efiarch}/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/%{efiarch}/
|
mv %{efiarch}/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/%{efiarch}/
|
||||||
|
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
mkdir -p %{buildroot}/%{_prefix}/lib/gnuefi
|
mkdir -p %{buildroot}/%{_prefix}/%{lib}/gnuefi
|
||||||
mkdir -p %{buildroot}/boot/efi/EFI/%{efidir}/ia32
|
mkdir -p %{buildroot}/boot/efi/EFI/%{efidir}/ia32
|
||||||
|
|
||||||
setarch linux32 -B make PREFIX=%{_prefix} LIBDIR=%{_prefix}/lib INSTALLROOT=%{buildroot} ARCH=ia32 install
|
setarch linux32 -B make PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib} INSTALLROOT=%{buildroot} ARCH=ia32 install
|
||||||
mv %{buildroot}/%{_prefix}/lib/*.{lds,o} %{buildroot}/%{_prefix}/lib/gnuefi/
|
mv %{buildroot}/%{_prefix}/%{lib}/*.{lds,o} %{buildroot}/%{_prefix}/%{lib}/gnuefi/
|
||||||
mv ia32/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/ia32/
|
mv ia32/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/ia32/
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -108,7 +128,7 @@ mv ia32/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/ia3
|
|||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%{_prefix}/lib*/*
|
%{_prefix}/%{lib}*/*
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
@ -120,6 +140,9 @@ rm -rf %{buildroot}
|
|||||||
%attr(0644,root,root) /boot/efi/EFI/%{efidir}/*/*.efi
|
%attr(0644,root,root) /boot/efi/EFI/%{efidir}/*/*.efi
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jun 13 2017 Peter Jones <pjones@redhat.com> - 3.0.5-8
|
||||||
|
- Update this to try to get determanistic builds.
|
||||||
|
|
||||||
* Mon Mar 20 2017 Peter Jones <pjones@redhat.com> - 3.0.5-7
|
* Mon Mar 20 2017 Peter Jones <pjones@redhat.com> - 3.0.5-7
|
||||||
- Also build the ia32 bits in a separate 32-bit package for other consumers.
|
- Also build the ia32 bits in a separate 32-bit package for other consumers.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user