Skip to content

Conversation

@dongcarl
Copy link
Contributor

@dongcarl dongcarl commented Nov 25, 2019

Based on: #16519
Based on: #17933 (Time Machines are... shall we say... superior 😁)

This PR allows us to perform Guix builds for the x86_64-w64-mingw32 target. We do this without splitting up the build script like we do in Gitian by using this newfangled alien technology called case statements. (This is WIP and might be changed to if statements soon)

@laanwj
Copy link
Member

laanwj commented Nov 26, 2019

Thanks for working on this! Another step towards Guix builds.

@dongcarl dongcarl force-pushed the 2019-09-guix-staging-win-mingw-6.0.0 branch 2 times, most recently from 2452353 to 5e1614c Compare January 23, 2020 21:30
@fanquake
Copy link
Member

Looks good.

I've just completed a Guix time-machine build, I modified the changes here to only build the x86_64-w64-mingw32 target, and the binaries are working fine in a Windows VM 👍.

env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
  guix 44e70de
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 44e70dee184c4e4190349def71dc07f05822f591

git rev-parse HEAD
5e1614cce5216166bb9a43b9fbfa4ad0fa7e5e8c

find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
addd48c58db416b9e1ae46fa2adc2421578deef7ea013725b6b7ed4c1269b1c2  output/bitcoin-0.19.99-win-unsigned.tar.gz
ddb5691b16d0c865541f1a4a93f10b44b784d55e35e66bffad73174aa05345fe  output/bitcoin-0.19.99-win64-debug.zip
006a97dfe6f1412800a3ec3072049e9ac1aa648ec22f0b32a1559cefb5179632  output/bitcoin-0.19.99-win64-setup-unsigned.exe
d285db2c41e54973f3c6953c6defa4edaf1fa2b1811408147240fa23baa6bdda  output/bitcoin-0.19.99-win64.zip
467dba326ec9cfb7839a603073aa2a82a49190eabe3d56cc2b8e3c0d284926ef  output/src/bitcoin-0.19.99.tar.gz

@DrahtBot
Copy link
Contributor

DrahtBot commented Jan 28, 2020

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Conflicts

No conflicts as of last run.

@fanquake
Copy link
Member

@dongcarl Could you rebase this on master and fixup any shellcheck complaints:

In contrib/guix/guix-build.sh line 25:

for host in ${HOSTS=i686-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu x86_64-w64-mingw32}; do

            ^-- SC2153: Possible misspelling: HOSTS may not be assigned, but HOST is.
For more information:
  https://www.shellcheck.net/wiki/SC2153 -- Possible misspelling: HOSTS may n...

@fanquake
Copy link
Member

fanquake commented Jan 30, 2020

Can you also address the follow up comment from #17933.

@dongcarl dongcarl force-pushed the 2019-09-guix-staging-win-mingw-6.0.0 branch from 5e1614c to 20e9e0b Compare January 31, 2020 14:48
@dongcarl
Copy link
Contributor Author

dongcarl commented Jan 31, 2020

Fixed up shellcheck complaints and addressed followup. Thanks for the reminders!

You can limit to building just mingw binaries like this btw:
env HOSTS=x86_64-w64-mingw32 ./contrib/guix/guix-build.sh

Here are my results (probably not reproducible, but let's triage here!):

$ git rev-parse HEAD
20e9e0bf0af4d168e703d1a569d0d573b3ce22f4

$ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
b2127237a4e353924a597160ecd042f150050495fac9bda41b06084d90edd375  output/bitcoin-0.19.99-win64-debug.zip
8bc76d6bf6d3aaff08a2ae143662882ef48ac4929f7457299905b1931fdea673  output/bitcoin-0.19.99-win64-setup-unsigned.exe
3130ca0ec9090a834b7afa65ddb353208321a3b4e4a2c0c6635b84cd7263fbce  output/bitcoin-0.19.99-win64.zip
cd96da19d52bfc0a061b36146b437a5a3612574b6ce106f1a3810f666a43f122  output/bitcoin-0.19.99-win-unsigned.tar.gz
34c5fd0a228f2d0c087ccb26fd6b927d7de345da4a0f7226b52281ff58e084a7  output/src/bitcoin-0.19.99.tar.gz

@dongcarl dongcarl marked this pull request as ready for review January 31, 2020 14:57
Copy link
Member

@fanquake fanquake left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. I've just done another build. Hashes don't match as you suggested:

env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
  guix dcbfb3b
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: dcbfb3b8ea69c573f3b48bfc04a1127ec01cc538

git rev-parse HEAD
20e9e0bf0af4d168e703d1a569d0d573b3ce22f4

find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
e9980f2badc93e506e36cb8142d3f4b781ad182cefbf4bb14d87e4015f4dee1e  output/bitcoin-0.19.99-win-unsigned.tar.gz
52368a7824dcec941a33904eff49557e17ef095697ba1b7833dc26f4883caf8e  output/bitcoin-0.19.99-win64-debug.zip
9e1d6d12d10482fb82e703b23ea7b04a21f8da9915bb706330247d845205cb53  output/bitcoin-0.19.99-win64-setup-unsigned.exe
429fd98e7122dc541f01d2f1d387c95e62f57178d8d3f3a3dbfd66cd9646ba34  output/bitcoin-0.19.99-win64.zip
843f958009812087fcb68fab8117d7710db19bcc64d36966121975718609dced  output/src/bitcoin-0.19.99.tar.gz

If I compare two builds, this is the difference I'm seeing (excluding directory metadata):

bitcoin-qt.exe

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0e00 0000 0000 004c b901  PE..d........L..
 00000090: 0000 0000 f000 2e00 0b02 0220 00e6 1d01  ........... ....
 000000a0: 0046 b901 0090 0100 b014 0000 0010 0000  .F..............
 000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 0070 bb01 0004 0000 ffff b901 0200 6001  .p............`.
+000000d0: 0070 bb01 0004 0000 ab07 ba01 0200 6001  .p............`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 0090 b701 da05 0000  ................
 00000110: 00a0 b701 6066 0000 0030 b801 f8c9 0100  ....`f...0......
 00000120: 00b0 9d01 ccd0 0800 0000 0000 0000 0000  ................
 00000130: 0000 ba01 2457 0100 0000 0000 0000 0000  ....$W..........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -1792858,15 +1792858,15 @@
 01b5b590: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 01b5b5f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-01b5b600: 0000 0000 9f37 355e 0000 0000 7c91 b701  .....75^....|...
+01b5b600: 0000 0000 4b3f 355e 0000 0000 7c91 b701  ....K?5^....|...
 01b5b610: 0100 0000 2200 0000 2200 0000 2890 b701  ...."..."...(...
 01b5b620: b090 b701 3891 b701 0036 de00 c02d de00  ....8....6...-..
 01b5b630: a037 de00 b0a2 1e01 305a de00 9038 de00  .7......0Z...8..
 01b5b640: 2038 de00 004f de00 9051 de00 d055 de00   8...O...Q...U..
 01b5b650: 505a de00 504d de00 3050 de00 9039 de00  PZ..PM..0P...9..
 01b5b660: f03c de00 b052 de00 1057 de00 f04c de00  .<...R...W...L..
 01b5b670: 8063 de00 e05f de00 705d de00 e05e de00  .c..._..p]...^..

bitcoin-tx.exe

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0d00 0000 0000 009c 2200  PE..d.........".
 00000090: 0000 0000 f000 2e00 0b02 0220 0068 1b00  ........... .h..
 000000a0: 0096 2200 0024 0000 e014 0000 0010 0000  .."..$..........
 000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 0040 2300 0004 0000 82c9 2200 0300 6001  .@#......."...`.
+000000d0: 0040 2300 0004 0000 d1d1 2200 0300 6001  .@#......."...`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 0090 2200 da05 0000  ..........".....
 00000110: 00a0 2200 4821 0000 00f0 2200 c004 0000  ..".H!....".....
 00000120: 0070 1f00 2c0f 0100 0000 0000 0000 0000  .p..,...........
 00000130: 0000 2300 a825 0000 0000 0000 0000 0000  ..#..%..........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -140314,15 +140314,15 @@
 00224190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 002241f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-00224200: 0000 0000 5b36 355e 0000 0000 7c91 2200  ....[65^....|.".
+00224200: 0000 0000 aa3e 355e 0000 0000 7c91 2200  .....>5^....|.".
 00224210: 0100 0000 2200 0000 2200 0000 2890 2200  ...."..."...(.".
 00224220: b090 2200 3891 2200 8041 0a00 4039 0a00  ..".8."..A..@9..
 00224230: 2043 0a00 30b8 1b00 b065 0a00 1044 0a00   C..0....e...D..
 00224240: a043 0a00 805a 0a00 105d 0a00 5061 0a00  .C...Z...]..Pa..
 00224250: d065 0a00 d058 0a00 b05b 0a00 1045 0a00  .e...X...[...E..
 00224260: 7048 0a00 305e 0a00 9062 0a00 7058 0a00  pH..0^...b..pX..
 00224270: 006f 0a00 606b 0a00 f068 0a00 606a 0a00  .o..`k...h..`j..

bitcoin-wallet.exe

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0d00 0000 0000 00a4 5100  PE..d.........Q.
 00000090: 0000 0000 f000 2e00 0b02 0220 0012 4300  ........... ..C.
 000000a0: 009e 5100 0060 0000 e014 0000 0010 0000  ..Q..`..........
 000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 0080 5200 0004 0000 dbda 5100 0300 6001  ..R.......Q...`.
+000000d0: 0080 5200 0004 0000 22e3 5100 0300 6001  ..R.....".Q...`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 00c0 5100 de05 0000  ..........Q.....
 00000110: 00d0 5100 942d 0000 0020 5200 d804 0000  ..Q..-... R.....
 00000120: 0050 4b00 dcf4 0100 0000 0000 0000 0000  .PK.............
 00000130: 0030 5200 bc38 0000 0000 0000 0000 0000  .0R..8..........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -332442,15 +332442,15 @@
 00512990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 005129f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-00512a00: 0000 0000 6736 355e 0000 0000 7cc1 5100  ....g65^....|.Q.
+00512a00: 0000 0000 ae3e 355e 0000 0000 7cc1 5100  .....>5^....|.Q.
 00512a10: 0100 0000 2200 0000 2200 0000 28c0 5100  ...."..."...(.Q.
 00512a20: b0c0 5100 38c1 5100 e0e0 1800 a0d8 1800  ..Q.8.Q.........
 00512a30: 80e2 1800 a06a 4300 1005 1900 70e3 1800  .....jC.....p...
 00512a40: 00e3 1800 e0f9 1800 70fc 1800 b000 1900  ........p.......
 00512a50: 3005 1900 30f8 1800 10fb 1800 70e4 1800  0...0.......p...
 00512a60: d0e7 1800 90fd 1800 f001 1900 d0f7 1800  ................
 00512a70: 600e 1900 c00a 1900 5008 1900 c009 1900  `.......P.......

bitcoind.exe

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0d00 0000 0000 00b6 8c00  PE..d...........
 00000090: 0000 0000 f000 2e00 0b02 0220 00de 7200  ........... ..r.
 000000a0: 00b0 8c00 00b2 0000 e014 0000 0010 0000  ................
 000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 00f0 8d00 0004 0000 f10b 8d00 0300 6001  ..............`.
+000000d0: 00f0 8d00 0004 0000 9f13 8d00 0300 6001  ..............`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 00f0 8c00 d805 0000  ................
 00000110: 0000 8d00 9c33 0000 0060 8d00 a804 0000  .....3...`......
 00000120: 00d0 8000 007e 0300 0000 0000 0000 0000  .....~..........
 00000130: 0070 8d00 bc62 0000 0000 0000 0000 0000  .p...b..........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -573626,15 +573626,15 @@
 008c0b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 008c0bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-008c0c00: 0000 0000 8a37 355e 0000 0000 7cf1 8c00  .....75^....|...
+008c0c00: 0000 0000 383f 355e 0000 0000 7cf1 8c00  ....8?5^....|...
 008c0c10: 0100 0000 2200 0000 2200 0000 28f0 8c00  ...."..."...(...
 008c0c20: b0f0 8c00 38f1 8c00 50ce 3600 10c6 3600  ....8...P.6...6.
 008c0c30: f0cf 3600 b032 7300 80f2 3600 e0d0 3600  ..6..2s...6...6.
 008c0c40: 70d0 3600 50e7 3600 e0e9 3600 20ee 3600  p.6.P.6...6. .6.
 008c0c50: a0f2 3600 a0e5 3600 80e8 3600 e0d1 3600  ..6...6...6...6.
 008c0c60: 40d5 3600 00eb 3600 60ef 3600 40e5 3600  @.6...6.`[email protected].
 008c0c70: d0fb 3600 30f8 3600 c0f5 3600 30f7 3600  ..6.0.6...6.0.6.

test_bitcoin.exe

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0c00 0000 0000 00da e800  PE..d...........
 00000090: 0000 0000 f000 2e00 0b02 0220 0038 ba00  ........... .8..
 000000a0: 00d4 e800 0016 0100 e014 0000 0010 0000  ................
 000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 0070 ea00 0004 0000 65aa e900 0300 6001  .p......e.....`.
+000000d0: 0070 ea00 0004 0000 12b2 e900 0300 6001  .p............`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 0070 e900 dc05 0000  .........p......
 00000110: 0080 e900 2035 0000 0000 0000 0000 0000  .... 5..........
 00000120: 0080 d800 6440 0400 0000 0000 0000 0000  ....d@..........
 00000130: 00e0 e900 1c7d 0000 0000 0000 0000 0000  .....}..........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -950682,15 +950682,15 @@
 00e81990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00e819f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-00e81a00: 0000 0000 8f37 355e 0000 0000 7c71 e900  .....75^....|q..
+00e81a00: 0000 0000 3c3f 355e 0000 0000 7c71 e900  ....<?5^....|q..
 00e81a10: 0100 0000 2200 0000 2200 0000 2870 e900  ...."..."...(p..
 00e81a20: b070 e900 3871 e900 608c 7500 2084 7500  .p..8q..`.u. .u.
 00e81a30: 008e 7500 109e ba00 90b0 7500 f08e 7500  ..u.......u...u.
 00e81a40: 808e 7500 60a5 7500 f0a7 7500 30ac 7500  ..u.`.u...u.0.u.
 00e81a50: b0b0 7500 b0a3 7500 90a6 7500 f08f 7500  ..u...u...u...u.
 00e81a60: 5093 7500 10a9 7500 70ad 7500 50a3 7500  P.u...u.p.u.P.u.
 00e81a70: e0b9 7500 40b6 7500 d0b3 7500 40b5 7500  [email protected][email protected].

libbitcoinconsensus-0.dll

@@ -7,15 +7,15 @@
 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
 00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
 00000080: 5045 0000 6486 0c00 0000 0000 00ce 1400  PE..d...........
 00000090: 0000 0000 f000 2e20 0b02 0220 0018 1000  ....... ... ....
 000000a0: 00c8 1400 0018 0000 3013 0000 0010 0000  ........0.......
 000000b0: 0000 946d 0000 0000 0010 0000 0002 0000  ...m............
 000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
-000000d0: 0060 1500 0004 0000 c0fb 1400 0300 6001  .`............`.
+000000d0: 0060 1500 0004 0000 1504 1500 0300 6001  .`............`.
 000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
 000000f0: 0000 1000 0000 0000 0010 0000 0000 0000  ................
 00000100: 0000 0000 1000 0000 00e0 1400 6606 0000  ............f...
 00000110: 00f0 1400 8414 0000 0000 0000 0000 0000  ................
 00000120: 00c0 1200 a0cb 0000 0000 0000 0000 0000  ................
 00000130: 0030 1500 5c18 0000 0000 0000 0000 0000  .0..\...........
 00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
@@ -84218,15 +84218,15 @@
 00148f90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148fa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148fb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148fc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148fe0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00148ff0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
-00149000: 0000 0000 5136 355e 0000 0000 9ae1 1400  ....Q65^........
+00149000: 0000 0000 a63e 355e 0000 0000 9ae1 1400  .....>5^........
 00149010: 0100 0000 2500 0000 2500 0000 28e0 1400  ....%...%...(...
 00149020: bce0 1400 50e1 1400 8038 0200 5038 0200  ....P....8..P8..
 00149030: c0fd 0100 d0e2 0300 90da 0300 70e4 0300  ............p...
 00149040: e030 1000 0007 0400 60e5 0300 f0e4 0300  .0......`.......
 00149050: d0fb 0300 60fe 0300 a002 0400 2007 0400  ....`....... ...
 00149060: 20fa 0300 00fd 0300 60e6 0300 c0e9 0300   .......`.......
 00149070: 80ff 0300 e003 0400 c0f9 0300 5010 0400  ............P...

@laanwj
Copy link
Member

laanwj commented Feb 5, 2020

Do we know what section / symbols these non-determinism differences are in? The first one (in the PE header) is probably the checksum. The second one is unclear to me, it doesn't look like assembly code but a 32-bit number.

Maybe a literal timestamp? Yes, this works out, these are little-endian UNIX timestamps:

bitcoin-qt.exe

-9f37355e    Sat Feb  1 09:32:31 2020
+4b3f355e    Sat Feb  1 10:05:15 2020

bitcoin-tx.exe

-5b36355e    Sat Feb  1 09:27:07 2020
+aa3e355e    Sat Feb  1 10:02:34 2020

bitcoin-wallet.exe

-6736355e    Sat Feb  1 09:27:19 2020
+ae3e355e    Sat Feb  1 10:02:38 2020

bitcoind.exe

-8a37355e    Sat Feb  1 09:32:10 2020
+383f355e    Sat Feb  1 10:04:56 2020

test_bitcoin.exe

-8f37355e    Sat Feb  1 09:32:15 2020
+3c3f355e    Sat Feb  1 10:05:00 2020

libbitcoinconsensus-0.dll

-5136355e    Sat Feb  1 09:26:57 2020
+a63e355e    Sat Feb  1 10:02:30 2020

@dongcarl
Copy link
Contributor Author

dongcarl commented Feb 5, 2020

The first one (in the PE header) is probably the checksum.

Yeah I believe it's the checksum... Assuming that the checksum is of the whole file and not just of the header, perhaps fixing the timestamp will fix this checksum too?

Maybe a literal timestamp? Yes, this works out, these are little-endian UNIX timestamps:

Yay thanks! I was hoping we could avoid libfaketime like we did with the Linux binaries... But perhaps it's inevitable :-( I'm going to give -Wl,--no-insert-timestamp a try first though (Source)

@fanquake
Copy link
Member

fanquake commented Feb 6, 2020

I've just completed two more builds, adding -Wl,--no-insert-timestamp to the LDFLAGS, and am no longer seeing any differences in the bitcoin-0.19.99-win64.zip files (excluding directory metadata). i.e diffoscope --exclude-directory-metadata build_1_output/bitcoin-0.19.99 build_2_output/bitcoin-0.19.99. All the binaries in bin/ match.

I'm still seeing a diff for output/bitcoin-0.19.99-win64-setup-unsigned.exe (much larger diff later in the file):

--- build_1_output/bitcoin-0.19.99-win64-setup-unsigned.exe
+++ build_2_output/bitcoin-0.19.99-win64-setup-unsigned.exe
@@ -9179,15 +9179,15 @@
 00023da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 00023e00: 0000 0000 efbe adde 4e75 6c6c 736f 6674  ........Nullsoft
-00023e10: 496e 7374 a892 0000 a3ca e600 5d00 0080  Inst........]...
+00023e10: 496e 7374 a892 0000 81cd e600 5d00 0080  Inst........]...
 00023e20: 0000 5424 7c18 8100 44f9 e0b7 abb0 2913  ..T$|...D.....).
 00023e30: 8c06 5f94 e5ee 6d0f 1445 3e2c 3bca 8067  .._...m..E>,;..g
 00023e40: 30e3 1cf4 4b84 fb68 d331 eb8d 2db4 49dd  0...K..h.1..-.I.

The two installers are also slightly different sizes:

$ ls -la build_1_output/bitcoin-0.19.99-win64-setup-unsigned.exe
15272099  6 Feb 08:58 build_1_output/bitcoin-0.19.99-win64-setup-unsigned.exe
$ ls -la build_2_output/bitcoin-0.19.99-win64-setup-unsigned.exe
15272833  6 Feb 09:19 build_2_output/bitcoin-0.19.99-win64-setup-unsigned.exe

@dongcarl
Copy link
Contributor Author

@fanquake I can reproduce this non-reproducibility on my workstation... Will investigate.

@dongcarl
Copy link
Contributor Author

🤞

$ git rev-parse HEAD
f38dfc7ae0a1489d33ae0b6ea7c49a3e34836adf

$ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
acbe8d606d7d47da5ab874e72e6b195fd8d3137bdc2f97745995342222064f5c  output/bitcoin-0.19.99-win64-debug.zip
9846a7e86db931a600d88ccd17c137cedac7ccb171469a8b50007e0f6139e94f  output/bitcoin-0.19.99-win64-setup-unsigned.exe
45201ef9571e98a5b6040c10645e5d5588dde550aaa74c0adf03230dd30726e3  output/bitcoin-0.19.99-win64.zip
4b11b0db3fcc0a37154780f5089bebda4f940fc2a2c300be64fc2fa75797df2e  output/bitcoin-0.19.99-win-unsigned.tar.gz
c9e278d1341ca4435a17276f738b9d2f51de7a7cd33b71ff27c7200b317c7644  output/src/bitcoin-0.19.99.tar.gz

@dongcarl dongcarl force-pushed the 2019-09-guix-staging-win-mingw-6.0.0 branch from f38dfc7 to a7765f3 Compare February 14, 2020 04:34
@dongcarl
Copy link
Contributor Author

Rebased over master 🤞

$ git rev-parse HEAD
a7765f371e78d85f23bca43f475c5a1a4e32afb2

$ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
67cbc94d04718f7b81444d142a1c47040801aa7412feec956897adc2123113ea  output/bitcoin-0.19.99-win64-debug.zip
6658d3823a299a8d63765162b3c0b18be8ae7bd950c6f564e26662f104428426  output/bitcoin-0.19.99-win64-setup-unsigned.exe
5059893e5c4cd427866448692536d51a422a45de5396f163b03922bfa631aba7  output/bitcoin-0.19.99-win64.zip
bffe6ec0cad08ba0dc112309865fd8d7e3740ad6e3e883f3a3e19aca515dc84f  output/bitcoin-0.19.99-win-unsigned.tar.gz
c33786b4e42f062f7aaa3c500513304fd8bca4cd8aa51048a5f375caa0809e98  output/src/bitcoin-0.19.99.tar.gz

@fanquake
Copy link
Member

Ran a couple builds, they are deterministic, but aren't currently matching your hashes:

guix describe
  guix 4530fe8
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 4530fe8ecca456fcc7226914502ad452c33ce27b

git rev-parse HEAD
a7765f371e78d85f23bca43f475c5a1a4e32afb2

find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
d865da5d1ff2f10d0545e3b23de7ad6bdad74d333be73e139392e243e514f681  output/bitcoin-0.19.99-win-unsigned.tar.gz
1ad7966f49bd7fa11bb84a37514303d8b7acd46a3ccfd3f456c1e8c25122784e  output/bitcoin-0.19.99-win64-debug.zip
79274407a55a06299e90d5dae42a3a589697c5e4cbc51da2f98f5d4a097cf7af  output/bitcoin-0.19.99-win64-setup-unsigned.exe
92571b2d6830fb03060ecf0cb357e1ff843ee2446f21bbcb870db2a17e0e2ede  output/bitcoin-0.19.99-win64.zip
c33786b4e42f062f7aaa3c500513304fd8bca4cd8aa51048a5f375caa0809e98  output/src/bitcoin-0.19.99.tar.gz

@dongcarl
Copy link
Contributor Author

@fanquake Weird. Here are mine: https://send.firefox.com/download/e27a2a3a463ee70e/#q-3dDZ59pzrrvFhryIgmZw

If you get a chance to upload yours, I'd be happy to take a look!

@fanquake
Copy link
Member

@dongcarl sure: https://send.firefox.com/download/8ee9cd6f49500764/#Y2OZ_HIDHRp3mu0Zm6B1Lg.
sha256sum is b2b4cc78b1b3caad00b7ada013c23a986c957eb054fe7e9420e04b85e59ae051.

guix describe
  guix a02ca03
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: a02ca03318faa77ab5ef06f4b7a3beed0c7db029

git rev-parse HEAD
a7765f371e78d85f23bca43f475c5a1a4e32afb2

find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
d865da5d1ff2f10d0545e3b23de7ad6bdad74d333be73e139392e243e514f681  output/bitcoin-0.19.99-win-unsigned.tar.gz
1ad7966f49bd7fa11bb84a37514303d8b7acd46a3ccfd3f456c1e8c25122784e  output/bitcoin-0.19.99-win64-debug.zip
79274407a55a06299e90d5dae42a3a589697c5e4cbc51da2f98f5d4a097cf7af  output/bitcoin-0.19.99-win64-setup-unsigned.exe
92571b2d6830fb03060ecf0cb357e1ff843ee2446f21bbcb870db2a17e0e2ede  output/bitcoin-0.19.99-win64.zip
c33786b4e42f062f7aaa3c500513304fd8bca4cd8aa51048a5f375caa0809e98  output/src/bitcoin-0.19.99.tar.gz

laanwj added a commit that referenced this pull request Feb 28, 2020
3d9b41e build: add --enable-determinism configure flag (fanquake)

Pull request description:

  This adds a `--enable-determinsm` configure flag, which if used, will enable additional compile / link time flags to make subsequent builds of bitcoind deterministic.

  The first flag enabled is `--no-insert-timestamp`. This prevents the linker from embedding timestamps, and makes consecutive builds of `bitcoind.exe` deterministic. This will likely also be used for [Guix Windows builds](#17595 (comment)).

  [`--no-insert-timestamp`](https://manpages.debian.org/buster/binutils-mingw-w64-x86-64/x86_64-w64-mingw32-ld.bfd.1.en.html):
  > The option --no-insert-timestamp can be used to insert a zero value for the timestamp, this ensuring that binaries produced from identical sources will compare identically.

  Diff of consecutive builds of [master](2bdc476):
  ```diff
  --- bitcoind.exe.1
  +++ bitcoind.exe.2
  @@ -2,20 +2,20 @@
   00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS
   00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
  -00000080: 5045 0000 6486 1400 57e8 445e 00da 6900  PE..d...W.D^..i.
  +00000080: 5045 0000 6486 1400 e3e9 445e 00da 6900  PE..d.....D^..i.
   0000009: e015 0100 f000 2600 0b02 021f 00de 4900  ......&.......I.
   000000a0: 00b0 5b00 008a 0000 e014 0000 0010 0000  ..[.............
   000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
   000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
  -000000d0: 00f0 6a00 0006 0000 bd31 af00 0300 6001  ..j......1....`.
  +000000d0: 00f0 6a00 0006 0000 d434 af00 0300 6001  ..j......4....`.
   000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
  @@ -373594,15 +373594,15 @@
   005b35f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  -005b3600: 0000 0000 57e8 445e 0000 0000 7ce1 5b00  ....W.D^....|.[.
  +005b3600: 0000 0000 e2e9 445e 0000 0000 7ce1 5b00  ......D^....|.[.
   005b3610: 0100 0000 2200 0000 2200 0000 28e0 5b00  ...."..."...(.[.
  ```

ACKs for top commit:
  practicalswift:
    ACK 3d9b41e -- patch looks correct
  laanwj:
    ACK 3d9b41e

Tree-SHA512: 1ff9dab7fa818b1fc6b0eb3b7a1e0468aac9e2578f4451aa300a648f883fa83f83722067f1adf27ebad54157790857d1501d573adbd7ebdf6962858cc669960d
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Feb 28, 2020
3d9b41e build: add --enable-determinism configure flag (fanquake)

Pull request description:

  This adds a `--enable-determinsm` configure flag, which if used, will enable additional compile / link time flags to make subsequent builds of bitcoind deterministic.

  The first flag enabled is `--no-insert-timestamp`. This prevents the linker from embedding timestamps, and makes consecutive builds of `bitcoind.exe` deterministic. This will likely also be used for [Guix Windows builds](bitcoin#17595 (comment)).

  [`--no-insert-timestamp`](https://manpages.debian.org/buster/binutils-mingw-w64-x86-64/x86_64-w64-mingw32-ld.bfd.1.en.html):
  > The option --no-insert-timestamp can be used to insert a zero value for the timestamp, this ensuring that binaries produced from identical sources will compare identically.

  Diff of consecutive builds of [master](bitcoin@2bdc476):
  ```diff
  --- bitcoind.exe.1
  +++ bitcoind.exe.2
  @@ -2,20 +2,20 @@
   00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS
   00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
  -00000080: 5045 0000 6486 1400 57e8 445e 00da 6900  PE..d...W.D^..i.
  +00000080: 5045 0000 6486 1400 e3e9 445e 00da 6900  PE..d.....D^..i.
   0000009: e015 0100 f000 2600 0b02 021f 00de 4900  ......&.......I.
   000000a0: 00b0 5b00 008a 0000 e014 0000 0010 0000  ..[.............
   000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
   000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
  -000000d0: 00f0 6a00 0006 0000 bd31 af00 0300 6001  ..j......1....`.
  +000000d0: 00f0 6a00 0006 0000 d434 af00 0300 6001  ..j......4....`.
   000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
  @@ -373594,15 +373594,15 @@
   005b35f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  -005b3600: 0000 0000 57e8 445e 0000 0000 7ce1 5b00  ....W.D^....|.[.
  +005b3600: 0000 0000 e2e9 445e 0000 0000 7ce1 5b00  ......D^....|.[.
   005b3610: 0100 0000 2200 0000 2200 0000 28e0 5b00  ...."..."...(.[.
  ```

ACKs for top commit:
  practicalswift:
    ACK 3d9b41e -- patch looks correct
  laanwj:
    ACK 3d9b41e

Tree-SHA512: 1ff9dab7fa818b1fc6b0eb3b7a1e0468aac9e2578f4451aa300a648f883fa83f83722067f1adf27ebad54157790857d1501d573adbd7ebdf6962858cc669960d
@dongcarl
Copy link
Contributor Author

dongcarl commented Mar 9, 2020

Okay some more insights... I'm trying to track down where the difference may be propagating from... And diffed the distsrc-x86_64-w64-mingw32/src/.libs/libbitcoinconsensus-0.dll of two different build runs... Here's what I got: https://send.firefox.com/download/381b244913161e90/#c8Ds0IR1ZkehT9u28LJ2Hg

I couldn't make sense of the beginning of that diff, but I went to the very end and saw something like this:

@@ -576768,18 +576768,18 @@
 008ccff0: 635f 6f73 7472 696e 6773 7472 6561 6d49  c_ostringstreamI
 008cd000: 7753 7431 3163 6861 725f 7472 6169 7473  wSt11char_traits
 008cd010: 4977 4553 6149 7745 4545 005f 5f69 6d70  IwESaIwEEE.__imp
 008cd020: 5f41 6464 5665 6374 6f72 6564 4578 6365  _AddVectoredExce
 008cd030: 7074 696f 6e48 616e 646c 6572 005f 5a54  ptionHandler._ZT
 008cd040: 4953 7431 3462 6173 6963 5f69 6673 7472  ISt14basic_ifstr
 008cd050: 6561 6d49 6353 7431 3163 6861 725f 7472  eamIcSt11char_tr
-008cd060: 6169 7473 4963 4545 002e 7265 6670 7472  aitsIcEE..refptr
-008cd070: 2e5f 5a54 5653 7431 3362 6164 5f65 7863  ._ZTVSt13bad_exc
-008cd080: 6570 7469 6f6e 005f 5a54 5653 7431 315f  eption._ZTVSt11_
-008cd090: 5f74 696d 6570 756e 6374 4963 4500 2e72  _timepunctIcE..r
+008cd060: 6169 7473 4963 4545 005f 5a54 5653 7431  aitsIcEE._ZTVSt1
+008cd070: 315f 5f74 696d 6570 756e 6374 4963 4500  1__timepunctIcE.
+008cd080: 2e72 6566 7074 722e 5f5a 5456 5374 3133  .refptr._ZTVSt13
+008cd090: 6261 645f 6578 6365 7074 696f 6e00 2e72  bad_exception..r
 008cd0a0: 6566 7074 722e 5f5a 5456 4e53 7437 5f5f  efptr._ZTVNSt7__
 008cd0b0: 6378 7831 3139 6d6f 6e65 795f 6765 7449  cxx119money_getI
 008cd0c0: 7753 7431 3969 7374 7265 616d 6275 665f  wSt19istreambuf_
 008cd0d0: 6974 6572 6174 6f72 4977 5374 3131 6368  iteratorIwSt11ch
 008cd0e0: 6172 5f74 7261 6974 7349 7745 4545 4500  ar_traitsIwEEEE.
 008cd0f0: 2e72 6566 7074 722e 5f5a 4e53 7438 696f  .refptr._ZNSt8io
 008cd100: 735f 6261 7365 3449 6e69 7432 305f 535f  s_base4Init20_S_

To me, this looks like two different orderings of the items:

.refptr
._ZTVSt13bad_exception
._ZTVSt11__timepunctIcE

This occurs many times (but with differing items) if you look at the diff starting from the bottom. Anyone know what these are/how to interpret these?

dongcarl added 12 commits April 2, 2020 17:19
- Add "--no-insert-timestamp" LDFLAG for x86_64-w64-mingw32 builds

"The option --no-insert-timestamp can be used to insert a zero value for
the timestamp, this ensuring that binaries produced from identical
sources will compare identically." - ld(1)

- Set "SetDateSave off" in NSIS script

From https://nsis.sourceforge.io/Docs/Chapter4.html#flags

"This command sets the file date/time saving flag which is used by the
File command to determine whether or not to save the last write date and
time of the file, so that it can be restored on installation. Valid
flags are 'on' and 'off'. 'on' is the default."

- Add commented out NSIS options for reproducibility debugging in NSIS
  script

- Make ZIPs deterministic by reseting file modification times to
  SOURCE_DATE_EPOCH using touch(1) (Reference:
  https://reproducible-builds.org/docs/archives/)
We're using mingw-w64 6.0.0, which is paired with gcc-8 in most distros.
This bump will includes a couple of commits which improve the
reproducibility of the mingw-w64 toolchain. Most of which came from
debian. They will be upstreamed as upstream Guix release timeline
allows.
Unfortunately, gcc is still not smart enough to detect whether or not
mingw-w64 provides ssp, so let's put it back just for mingw-w64.
Most of the mingw-w64 toolchain changes have now been upstreamed, we can
point to a commit that exists upstream.

NOTE: I'm not changing the URL yet until we see that Guix upstream will
accept all my patches for macOS.

-----

The Guix tree that's referred to by this commit contains the following
changes relevant to our mingw-w64 build:

b066c25026

  Adds a PACKAGES-WITH-*PATCHES procedure which we can use in the future
  to apply patches to packages if those patches are not considered
  appropriate to upstream Guix

4719b71572

  Adds mingw-w64 (the libc itself) reproducibility patches, taken from
  debian.

79825bee07 + 401d28e433 + c1c50cb5b0

  Add mingw-w64 specific binutils patches, taken from debian.
  Specifically, the "Make DLL import libraries reproducible" patch made
  libbitcoinconsensus.dll.a build reproducibly. The followup commits
  were hotfixes for my mistakes.

0f864175dc

  Bumps mingw-w64 to v7.0.0. This is the first release that enables
  secure APIs by default (which we need), and gains _FORTIFY_SOURCE
  support. This will also be what Ubuntu Focal 20.04 LTS releases with.

cdf00cf75d

  Bumps NSIS to v3.05. This is the first release that includes a fix for
  a reproducibility bug found by some of the electrum developers. See
  details here: https://sourceforge.net/p/nsis/bugs/1230/
This is no longer needed after 3bef7c22 in the mingw-w64 git repository,
which is first included in mingw-w64 v7.0.0.

As of the previous bump to our Guix time machine, we now use mingw-w64
v7.0.0.
The libtool unsorted 'find' determinism issue seemed to have been solved
in gcc-9's git: d41cd173e23ebea7c758644d6ad6e0fde1c2e3a6 or SVN: r262451

Furthermore, it seems that Ubuntu Focal 20.04 LTS is going to ship with
gcc 9 and mingw-w64 7, which will match what we have now.

-----

A note on this:

Careful observers will see that previously I stated that all released
versions of gcc were bootstrapped with a libtool 2.2.7a, meaning that
they all had the unsorted 'find' determinism issue first resolved in
libtool 2.2.7b.

However, I was mistaken, gcc's ltmain.sh CLAIMS it was generated by
libtool 2.2.7a, but it was in fact edited manually. It seems that gcc
maintains their own versions of ltmain.sh and libtool.m4, and only
sometimes backports patches from upstream.

Quite confusing.
@dongcarl dongcarl force-pushed the 2019-09-guix-staging-win-mingw-6.0.0 branch from e63cb74 to 0b66d22 Compare April 7, 2020 23:26
@dongcarl
Copy link
Contributor Author

dongcarl commented Apr 7, 2020

Rebased to include the #18358 merge. It's a lot of commits, but it preserves the history, which I know some reviewers like. Let me know if people want things squashed instead, and I'd be happy to oblige.

A few commit messages that would give more context on the last bit of investigation/upstreaming done for this PR:

commit 93439a71eda49fb69f1e82966a23a946733aa6fa
Author: Carl Dong <[email protected]>
Date:   Tue Apr 7 18:28:28 2020 -0400

    guix: Bump to upstream commit with mingw-w64 changes

    Most of the mingw-w64 toolchain changes have now been upstreamed, we can
    point to a commit that exists upstream.

    NOTE: I'm not changing the URL yet until we see that Guix upstream will
    accept all my patches for macOS.

    -----

    The Guix tree that's referred to by this commit contains the following
    changes relevant to our mingw-w64 build:

    b066c25026

      Adds a PACKAGES-WITH-*PATCHES procedure which we can use in the future
      to apply patches to packages if those patches are not considered
      appropriate to upstream Guix

    4719b71572

      Adds mingw-w64 (the libc itself) reproducibility patches, taken from
      debian.

    79825bee07 + 401d28e433 + c1c50cb5b0

      Add mingw-w64 specific binutils patches, taken from debian.
      Specifically, the "Make DLL import libraries reproducible" patch made
      libbitcoinconsensus.dll.a build reproducibly. The followup commits
      were hotfixes for my mistakes.

    0f864175dc

      Bumps mingw-w64 to v7.0.0. This is the first release that enables
      secure APIs by default (which we need), and gains _FORTIFY_SOURCE
      support. This will also be what Ubuntu Focal 20.04 LTS releases with.

    cdf00cf75d

      Bumps NSIS to v3.05. This is the first release that includes a fix for
      a reproducibility bug found by some of the electrum developers. See
      details here: https://sourceforge.net/p/nsis/bugs/1230/

and

commit 0b66d22da5f53640e22f05adf880782c613e6d0f
Author: Carl Dong <[email protected]>
Date:   Tue Apr 7 18:23:53 2020 -0400

    guix: Use gcc-9 for mingw-w64 instead of 8

    The libtool unsorted 'find' determinism issue seemed to have been solved
    in gcc-9's git: d41cd173e23ebea7c758644d6ad6e0fde1c2e3a6 or SVN: r262451

    Furthermore, it seems that Ubuntu Focal 20.04 LTS is going to ship with
    gcc 9 and mingw-w64 7, which will match what we have now.

    -----

    A note on this:

    Careful observers will see that previously I stated that all released
    versions of gcc were bootstrapped with a libtool 2.2.7a, meaning that
    they all had the unsorted 'find' determinism issue first resolved in
    libtool 2.2.7b.

    However, I was mistaken, gcc's ltmain.sh CLAIMS it was generated by
    libtool 2.2.7a, but it was in fact edited manually. It seems that gcc
    maintains their own versions of ltmain.sh and libtool.m4, and only
    sometimes backports patches from upstream.

    Quite confusing.

@dongcarl
Copy link
Contributor Author

dongcarl commented Apr 7, 2020

Also, here are my hashes for a35e323:

$ find distsrc-x86_64-w64-mingw32/installed/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
7ab680cf4cf431319c90e9fb0e4abeba5fd4cb7a3a33302d7eeedc6c0bc220b6  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-cli.exe
c1026cb9fd0a0826eb9baadafaada7cc391bd217ff6a0f11987ac86da32b8c48  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-cli.exe.dbg
d409e656769867f56ff1ec13e55025e734313291d87a7fdd72dc25895bf262dd  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-qt.exe
3e3801b421c1a8a34cde1c6deb02776c9358aa5d1d015503348ea539ca6b6abe  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-qt.exe.dbg
66e85e55bcd71d9644508e6a879fdb151ebf6d7472c94a20efd6f2224ae0c735  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-tx.exe
1031d08a859ab115ac394a4acb652d3dd6e9a71f6bdb5915bec18ece7fc692f9  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-tx.exe.dbg
c902601b5b884f84c7cdec322fbccb41cefff89a3408ee1faa7491c418e16371  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-wallet.exe
2fd5252192e291531532743b30f7134ffecec00107948ba275d6031f99e62ac7  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-wallet.exe.dbg
cc428ade350b76e38513c85b16d5a46baaf3f8adbb879a3f3f7445e29dcbec42  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoind.exe
427fcb14a3a79b5e431ad9d19ea29e3c6bf29823ca0564b2a75821cb8a37f2dc  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoind.exe.dbg
d59c63a74f1ec59ceadf96d696596ec517c206fe5c36fd62a4f011539380ca23  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/test_bitcoin.exe
2335e8db7d39e7fd77c452aeae6eda4fd64a8d7cc4f6172131476900def6c0c0  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/test_bitcoin.exe.dbg
b96be38342dd488fc32531bf0b9c54fbebf22795b00703472c29f605eedab6c5  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/include/bitcoinconsensus.h
91b29a04affa6de8a39d380a96e4ece0b6148dd1a1174ca61965a92f8072b89e  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/lib/libbitcoinconsensus-0.dll
97e338dd0451ecfec7dca0ccdabd4bc367ca3724d565ce5a736e52444d064997  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/lib/libbitcoinconsensus-0.dll.dbg
c9ea36a83c960895637b447be87603981e0bd57c6584b17ac907618c9aacee96  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/readme.txt
5a5195f9e757665fd1c879e4383537ae0d584e3a101ec34ef821379bc6e92342  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-cli.1
a78e3d4a3d2127b77b5addc8b758b561e530fab12115fadd4c990bf1f6c19661  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-qt.1
3a58bbb8a3cf469e191ca1b5cb5a497ed0c8e8ac6292fbde2271dcecb5af4634  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-tx.1
d9e6659155aa9672f268190c4c90bdb25647399fb43056d5be7071ea78bff89a  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-wallet.1
fc8b190f85394fa0cb259ef8ef3df7200e90ef831c08906880b278be2a9f1378  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoind.1
$ find output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
da2072e35e0fd621edfc5e87f12f5cac6021b4b10a9ef3f726a2a20bc086c6e3  output/bitcoin-0.19.99-win-unsigned.tar.gz
83e34b7a7e3901c55595f97d96575958083f8574ef94d3e0c01812632bcf0f2f  output/bitcoin-0.19.99-win64-debug.zip
64358f7913ea14d28bcfe73d1bfa4f87c3ba5a05aafec6e676e74aa4eba62313  output/bitcoin-0.19.99-win64-setup-unsigned.exe
73e6132ab35c58fca2abfa5f66ab5352365aac147a337f8cc91d5887d0e2521f  output/bitcoin-0.19.99-win64.zip
064592f1f0de13058de3cb6822df810fa8eea69e4afb86a430b3a33bfc99e1d2  output/src/bitcoin-0.19.99.tar.gz

@fanquake
Copy link
Member

fanquake commented Apr 8, 2020

Hashes still look good at a35e323:

bash-5.0# git rev-parse HEAD
a35e3235891d35daa167116cc70340140e883f06

bash-5.0# env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
  guix 0eb799e
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 0eb799e6696202316b7e5062ba21bff9ece7a789

bash-5.0# find output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
da2072e35e0fd621edfc5e87f12f5cac6021b4b10a9ef3f726a2a20bc086c6e3  output/bitcoin-0.19.99-win-unsigned.tar.gz
83e34b7a7e3901c55595f97d96575958083f8574ef94d3e0c01812632bcf0f2f  output/bitcoin-0.19.99-win64-debug.zip
64358f7913ea14d28bcfe73d1bfa4f87c3ba5a05aafec6e676e74aa4eba62313  output/bitcoin-0.19.99-win64-setup-unsigned.exe
73e6132ab35c58fca2abfa5f66ab5352365aac147a337f8cc91d5887d0e2521f  output/bitcoin-0.19.99-win64.zip
064592f1f0de13058de3cb6822df810fa8eea69e4afb86a430b3a33bfc99e1d2  output/src/bitcoin-0.19.99.tar.gz

bash-5.0# find distsrc-x86_64-w64-mingw32/installed/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
7ab680cf4cf431319c90e9fb0e4abeba5fd4cb7a3a33302d7eeedc6c0bc220b6  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-cli.exe
c1026cb9fd0a0826eb9baadafaada7cc391bd217ff6a0f11987ac86da32b8c48  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-cli.exe.dbg
d409e656769867f56ff1ec13e55025e734313291d87a7fdd72dc25895bf262dd  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-qt.exe
3e3801b421c1a8a34cde1c6deb02776c9358aa5d1d015503348ea539ca6b6abe  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-qt.exe.dbg
66e85e55bcd71d9644508e6a879fdb151ebf6d7472c94a20efd6f2224ae0c735  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-tx.exe
1031d08a859ab115ac394a4acb652d3dd6e9a71f6bdb5915bec18ece7fc692f9  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-tx.exe.dbg
c902601b5b884f84c7cdec322fbccb41cefff89a3408ee1faa7491c418e16371  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-wallet.exe
2fd5252192e291531532743b30f7134ffecec00107948ba275d6031f99e62ac7  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoin-wallet.exe.dbg
cc428ade350b76e38513c85b16d5a46baaf3f8adbb879a3f3f7445e29dcbec42  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoind.exe
427fcb14a3a79b5e431ad9d19ea29e3c6bf29823ca0564b2a75821cb8a37f2dc  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/bitcoind.exe.dbg
d59c63a74f1ec59ceadf96d696596ec517c206fe5c36fd62a4f011539380ca23  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/test_bitcoin.exe
2335e8db7d39e7fd77c452aeae6eda4fd64a8d7cc4f6172131476900def6c0c0  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/bin/test_bitcoin.exe.dbg
b96be38342dd488fc32531bf0b9c54fbebf22795b00703472c29f605eedab6c5  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/include/bitcoinconsensus.h
91b29a04affa6de8a39d380a96e4ece0b6148dd1a1174ca61965a92f8072b89e  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/lib/libbitcoinconsensus-0.dll
97e338dd0451ecfec7dca0ccdabd4bc367ca3724d565ce5a736e52444d064997  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/lib/libbitcoinconsensus-0.dll.dbg
c9ea36a83c960895637b447be87603981e0bd57c6584b17ac907618c9aacee96  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/readme.txt
5a5195f9e757665fd1c879e4383537ae0d584e3a101ec34ef821379bc6e92342  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-cli.1
a78e3d4a3d2127b77b5addc8b758b561e530fab12115fadd4c990bf1f6c19661  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-qt.1
3a58bbb8a3cf469e191ca1b5cb5a497ed0c8e8ac6292fbde2271dcecb5af4634  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-tx.1
d9e6659155aa9672f268190c4c90bdb25647399fb43056d5be7071ea78bff89a  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoin-wallet.1
fc8b190f85394fa0cb259ef8ef3df7200e90ef831c08906880b278be2a9f1378  distsrc-x86_64-w64-mingw32/installed/bitcoin-0.19.99/share/man/man1/bitcoind.1

Copy link
Member

@fanquake fanquake left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK a35e323 2/3

@fanquake fanquake merged commit ed3b8ea into bitcoin:master Apr 12, 2020
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request Apr 13, 2020
…arget

a35e323 guix: Appease travis. (Carl Dong)
0b66d22 guix: Use gcc-9 for mingw-w64 instead of 8 (Carl Dong)
ba0b99b guix: Don't set MINGW_HAS_SECURE_API CFLAG in depends (Carl Dong)
93439a7 guix: Bump to upstream commit with mingw-w64 changes (Carl Dong)
35a9679 guix: Check mingw symbols, improve SSP fix docs (Carl Dong)
449d8fe guix: Expand on INT trap message (Carl Dong)
3f1f03c guix: Spelling fixes (Carl Dong)
ff821dd guix: Reinstate make-ssp-fixed-gcc (Carl Dong)
360a9e0 guix: Bump time-machine for mingw-w64 patches (Carl Dong)
93e41b7 guix: Use gcc-8 for mingw-w64 instead of 7 (Carl Dong)
ef4f7e4 guix: Set the well-known timezone env var (Carl Dong)
acf4b3b guix: Make x86_64-w64-mingw32 builds reproducible (Carl Dong)
c4cce00 guix: Remove dead links from README. (Carl Dong)
df953a4 guix: Appease shellcheck. (Carl Dong)
91897c9 guix: Improve guix-build.sh documentation (Carl Dong)
570d769 guix: Build support for Windows (Carl Dong)

Pull request description:

  ~~Based on: bitcoin#16519
  Based on: bitcoin#17933 (Time Machines are... shall we say... superior 😁)

  This PR allows us to perform Guix builds for the `x86_64-w64-mingw32` target. We do this _without_ splitting up the build script like we do in Gitian by using this newfangled alien technology called `case` statements. (This is WIP and might be changed to `if` statements soon)

ACKs for top commit:
  fanquake:
    ACK a35e323 2/3

Tree-SHA512: c471951c23eb2cda919a71285d8b8f2580cb20f09d5db17b53e13dbd8813e01b3e7a83ea848e4913fd0f2bc12c6c133c5f76b54e65c0d89fed4dfd2e0be19875
fanquake added a commit that referenced this pull request May 6, 2020
bfe1ba2 rel-builds: Specify core.abbrev for git-rev-parse (Carl Dong)
27e63e0 build: Accomodate makensis v2.x (Carl Dong)
1f2c39a guix: Remove logical cores requirement (Carl Dong)
a4f6ffa lint: Also enable source statements for non-gitian (Carl Dong)
d256f91 rel-builds: Directly deploy win installer to OUTDIR (Carl Dong)
fa791da nsis: Specify OutFile path only once (Carl Dong)
1470160 guix: Expose GIT_COMMON_DIR in container as readonly (Carl Dong)
f5a6ac4 guix: Make source tarball using git-archive (Carl Dong)
395c113 gitian: Limit sourced script to just assignments (Carl Dong)

Pull request description:

  Based on: #18556
  Related: #17595 (comment)

ACKs for top commit:
  fanquake:
    ACK bfe1ba2 - I agree with Carl, and am going to merge this. I'd like for Linux Guix builds to be working again, and we can rebase #18818.

Tree-SHA512: c87ada7e3de17ca0b692a91029b86573442ded5780fc081c214773f6b374a0cdbeaf6f6898c36669c2e247ee32aa7f82defb1180f8decac52c65f0c140f18674
sidhujag pushed a commit to syscoin/syscoin that referenced this pull request May 12, 2020
bfe1ba2 rel-builds: Specify core.abbrev for git-rev-parse (Carl Dong)
27e63e0 build: Accomodate makensis v2.x (Carl Dong)
1f2c39a guix: Remove logical cores requirement (Carl Dong)
a4f6ffa lint: Also enable source statements for non-gitian (Carl Dong)
d256f91 rel-builds: Directly deploy win installer to OUTDIR (Carl Dong)
fa791da nsis: Specify OutFile path only once (Carl Dong)
1470160 guix: Expose GIT_COMMON_DIR in container as readonly (Carl Dong)
f5a6ac4 guix: Make source tarball using git-archive (Carl Dong)
395c113 gitian: Limit sourced script to just assignments (Carl Dong)

Pull request description:

  Based on: bitcoin#18556
  Related: bitcoin#17595 (comment)

ACKs for top commit:
  fanquake:
    ACK bfe1ba2 - I agree with Carl, and am going to merge this. I'd like for Linux Guix builds to be working again, and we can rebase bitcoin#18818.

Tree-SHA512: c87ada7e3de17ca0b692a91029b86573442ded5780fc081c214773f6b374a0cdbeaf6f6898c36669c2e247ee32aa7f82defb1180f8decac52c65f0c140f18674
sidhujag pushed a commit to syscoin-core/syscoin that referenced this pull request Nov 10, 2020
3d9b41e build: add --enable-determinism configure flag (fanquake)

Pull request description:

  This adds a `--enable-determinsm` configure flag, which if used, will enable additional compile / link time flags to make subsequent builds of bitcoind deterministic.

  The first flag enabled is `--no-insert-timestamp`. This prevents the linker from embedding timestamps, and makes consecutive builds of `bitcoind.exe` deterministic. This will likely also be used for [Guix Windows builds](bitcoin#17595 (comment)).

  [`--no-insert-timestamp`](https://manpages.debian.org/buster/binutils-mingw-w64-x86-64/x86_64-w64-mingw32-ld.bfd.1.en.html):
  > The option --no-insert-timestamp can be used to insert a zero value for the timestamp, this ensuring that binaries produced from identical sources will compare identically.

  Diff of consecutive builds of [master](bitcoin@2bdc476):
  ```diff
  --- bitcoind.exe.1
  +++ bitcoind.exe.2
  @@ -2,20 +2,20 @@
   00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS
   00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
  -00000080: 5045 0000 6486 1400 57e8 445e 00da 6900  PE..d...W.D^..i.
  +00000080: 5045 0000 6486 1400 e3e9 445e 00da 6900  PE..d.....D^..i.
   0000009: e015 0100 f000 2600 0b02 021f 00de 4900  ......&.......I.
   000000a0: 00b0 5b00 008a 0000 e014 0000 0010 0000  ..[.............
   000000b0: 0000 4000 0000 0000 0010 0000 0002 0000  ..@.............
   000000c0: 0400 0000 0000 0000 0500 0200 0000 0000  ................
  -000000d0: 00f0 6a00 0006 0000 bd31 af00 0300 6001  ..j......1....`.
  +000000d0: 00f0 6a00 0006 0000 d434 af00 0300 6001  ..j......4....`.
   000000e0: 0000 2000 0000 0000 0010 0000 0000 0000  .. .............
  @@ -373594,15 +373594,15 @@
   005b35f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  -005b3600: 0000 0000 57e8 445e 0000 0000 7ce1 5b00  ....W.D^....|.[.
  +005b3600: 0000 0000 e2e9 445e 0000 0000 7ce1 5b00  ......D^....|.[.
   005b3610: 0100 0000 2200 0000 2200 0000 28e0 5b00  ...."..."...(.[.
  ```

ACKs for top commit:
  practicalswift:
    ACK 3d9b41e -- patch looks correct
  laanwj:
    ACK 3d9b41e

Tree-SHA512: 1ff9dab7fa818b1fc6b0eb3b7a1e0468aac9e2578f4451aa300a648f883fa83f83722067f1adf27ebad54157790857d1501d573adbd7ebdf6962858cc669960d
UdjinM6 pushed a commit to UdjinM6/dash that referenced this pull request Oct 23, 2021
bfe1ba2 rel-builds: Specify core.abbrev for git-rev-parse (Carl Dong)
27e63e0 build: Accomodate makensis v2.x (Carl Dong)
1f2c39a guix: Remove logical cores requirement (Carl Dong)
a4f6ffa lint: Also enable source statements for non-gitian (Carl Dong)
d256f91 rel-builds: Directly deploy win installer to OUTDIR (Carl Dong)
fa791da nsis: Specify OutFile path only once (Carl Dong)
1470160 guix: Expose GIT_COMMON_DIR in container as readonly (Carl Dong)
f5a6ac4 guix: Make source tarball using git-archive (Carl Dong)
395c113 gitian: Limit sourced script to just assignments (Carl Dong)

Pull request description:

  Based on: bitcoin#18556
  Related: bitcoin#17595 (comment)

ACKs for top commit:
  fanquake:
    ACK bfe1ba2 - I agree with Carl, and am going to merge this. I'd like for Linux Guix builds to be working again, and we can rebase bitcoin#18818.

Tree-SHA512: c87ada7e3de17ca0b692a91029b86573442ded5780fc081c214773f6b374a0cdbeaf6f6898c36669c2e247ee32aa7f82defb1180f8decac52c65f0c140f18674
UdjinM6 pushed a commit to UdjinM6/dash that referenced this pull request Dec 4, 2021
bfe1ba2 rel-builds: Specify core.abbrev for git-rev-parse (Carl Dong)
27e63e0 build: Accomodate makensis v2.x (Carl Dong)
1f2c39a guix: Remove logical cores requirement (Carl Dong)
a4f6ffa lint: Also enable source statements for non-gitian (Carl Dong)
d256f91 rel-builds: Directly deploy win installer to OUTDIR (Carl Dong)
fa791da nsis: Specify OutFile path only once (Carl Dong)
1470160 guix: Expose GIT_COMMON_DIR in container as readonly (Carl Dong)
f5a6ac4 guix: Make source tarball using git-archive (Carl Dong)
395c113 gitian: Limit sourced script to just assignments (Carl Dong)

Pull request description:

  Based on: bitcoin#18556
  Related: bitcoin#17595 (comment)

ACKs for top commit:
  fanquake:
    ACK bfe1ba2 - I agree with Carl, and am going to merge this. I'd like for Linux Guix builds to be working again, and we can rebase bitcoin#18818.

Tree-SHA512: c87ada7e3de17ca0b692a91029b86573442ded5780fc081c214773f6b374a0cdbeaf6f6898c36669c2e247ee32aa7f82defb1180f8decac52c65f0c140f18674
PhotoshiNakamoto added a commit to PhotonicBitcoin/pBTC-core that referenced this pull request Dec 13, 2021
Bitcoin Core PR: bitcoin/bitcoin#17595

Pull request description:

  ~~Based on: bitcoin/bitcoin#16519
  Based on: bitcoin/bitcoin#17933 (Time Machines are... shall we say... superior 😁)

  This PR allows us to perform Guix builds for the `x86_64-w64-mingw32` target. We do this _without_ splitting up the build script like we do in Gitian by using this newfangled alien technology called `case` statements. (This is WIP and might be changed to `if` statements soon)
@bitcoin bitcoin locked as resolved and limited conversation to collaborators Feb 15, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants