@ -46,19 +46,11 @@ def setup():
print ( ' Reboot is required ' )
sys . exit ( 0 )
def build( ) :
def re build( ) :
global args , workdir
os . makedirs ( ' out/ ' + args . version , exist_ok = True )
print ( ' \n Building Dependencies \n ' )
os . chdir ( ' builder ' )
os . makedirs ( ' inputs ' , exist_ok = True )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz ' ] )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch ' ] )
subprocess . check_output ( [ " echo ' a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 inputs/osslsigncode-Backports-to-1.7.1.patch ' | sha256sum -c " ] , shell = True )
subprocess . check_output ( [ " echo ' f9a8cdb38b9c309326764ebc937cba1523a3a751a7ab05df3ecc99d18ae466c9 inputs/osslsigncode-1.7.1.tar.gz ' | sha256sum -c " ] , shell = True )
subprocess . check_call ( [ ' make ' , ' -C ' , ' inputs/monero/contrib/depends ' , ' download ' , ' SOURCES_PATH= ' + os . getcwd ( ) + ' /cache/common ' ] )
os . makedirs ( ' out/ ' + args . version , exist_ok = True )
if args . linux :
print ( ' \n Compiling ' + args . version + ' Linux ' )
@ -66,6 +58,12 @@ def build():
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -linux ' , ' --destination ' , ' ../sigs/ ' , ' inputs/monero/contrib/gitian/gitian-linux.yml ' ] )
subprocess . check_call ( ' mv build/out/monero-*.tar.bz2 ../out/ ' + args . version , shell = True )
if args . android :
print ( ' \n Compiling ' + args . version + ' Android ' )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' inputs/monero/contrib/gitian/gitian-android.yml ' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -android ' , ' --destination ' , ' ../sigs/ ' , ' inputs/monero/contrib/gitian/gitian-android.yml ' ] )
subprocess . check_call ( ' mv build/out/monero-*.tar.bz2 ../out/ ' + args . version , shell = True )
if args . windows :
print ( ' \n Compiling ' + args . version + ' Windows ' )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' inputs/monero/contrib/gitian/gitian-win.yml ' ] )
@ -84,17 +82,37 @@ def build():
print ( ' \n Committing ' + args . version + ' Unsigned Sigs \n ' )
os . chdir ( ' sigs ' )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -linux/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -android/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -win/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -osx/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' commit ' , ' -m ' , ' Add ' + args . version + ' unsigned sigs for ' + args . signer ] )
os . chdir ( workdir )
def build ( ) :
global args , workdir
print ( ' \n Checking Depends Freshness \n ' )
os . chdir ( ' builder ' )
os . makedirs ( ' inputs ' , exist_ok = True )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz ' ] )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch ' ] )
subprocess . check_output ( [ " echo ' a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 inputs/osslsigncode-Backports-to-1.7.1.patch ' | sha256sum -c " ] , shell = True )
subprocess . check_output ( [ " echo ' f9a8cdb38b9c309326764ebc937cba1523a3a751a7ab05df3ecc99d18ae466c9 inputs/osslsigncode-1.7.1.tar.gz ' | sha256sum -c " ] , shell = True )
subprocess . check_call ( [ ' make ' , ' -C ' , ' inputs/monero/contrib/depends ' , ' download ' , ' SOURCES_PATH= ' + os . getcwd ( ) + ' /cache/common ' ] )
rebuild ( )
def verify ( ) :
global args , workdir
os . chdir ( ' builder ' )
print ( ' \n Verifying v ' + args . version + ' Linux \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../sigs/ ' , ' -r ' , args . version + ' -linux ' , ' inputs/monero/contrib/gitian/gitian-linux.yml ' ] )
print ( ' \n Verifying v ' + args . version + ' Android \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../sigs/ ' , ' -r ' , args . version + ' -android ' , ' inputs/monero/contrib/gitian/gitian-android.yml ' ] )
print ( ' \n Verifying v ' + args . version + ' Windows \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../sigs/ ' , ' -r ' , args . version + ' -win ' , ' inputs/monero/contrib/gitian/gitian-win.yml ' ] )
print ( ' \n Verifying v ' + args . version + ' MacOS \n ' )
@ -111,7 +129,9 @@ def main():
parser . add_argument ( ' -v ' , ' --verify ' , action = ' store_true ' , dest = ' verify ' , help = ' Verify the Gitian build ' )
parser . add_argument ( ' -b ' , ' --build ' , action = ' store_true ' , dest = ' build ' , help = ' Do a Gitian build ' )
parser . add_argument ( ' -B ' , ' --buildsign ' , action = ' store_true ' , dest = ' buildsign ' , help = ' Build both signed and unsigned binaries ' )
parser . add_argument ( ' -o ' , ' --os ' , dest = ' os ' , default = ' lwm ' , help = ' Specify which Operating Systems the build is for. Default is %(default)s . l for Linux, w for Windows, m for MacOS ' )
parser . add_argument ( ' -o ' , ' --os ' , dest = ' os ' , default = ' lawm ' , help = ' Specify which Operating Systems the build is for. Default is %(default)s . l for Linux, a for Android, w for Windows, m for MacOS ' )
parser . add_argument ( ' -r ' , ' --rebuild ' , action = ' store_true ' , dest = ' rebuild ' , help = ' Redo a Gitian build ' )
parser . add_argument ( ' -R ' , ' --rebuildsign ' , action = ' store_true ' , dest = ' rebuildsign ' , help = ' Redo and sign a Gitian build ' )
parser . add_argument ( ' -j ' , ' --jobs ' , dest = ' jobs ' , default = ' 2 ' , help = ' Number of processes to use. Default %(default)s ' )
parser . add_argument ( ' -m ' , ' --memory ' , dest = ' memory ' , default = ' 2000 ' , help = ' Memory to allocate in MiB. Default %(default)s ' )
parser . add_argument ( ' -k ' , ' --kvm ' , action = ' store_true ' , dest = ' kvm ' , help = ' Use KVM instead of LXC ' )
@ -127,6 +147,7 @@ def main():
workdir = os . getcwd ( )
args . linux = ' l ' in args . os
args . android = ' a ' in args . os
args . windows = ' w ' in args . os
args . macos = ' m ' in args . os
@ -136,6 +157,10 @@ def main():
args . build = True
args . sign = True
if args . rebuildsign :
args . rebuild = True
args . sign = True
if args . kvm and args . docker :
raise Exception ( ' Error: cannot have both kvm and docker ' )
@ -152,9 +177,10 @@ def main():
os . environ [ ' LXC_GUEST_IP ' ] = ' 10.0.3.5 '
# Disable MacOS build if no SDK found
if args . build and args . macos and not os . path . isfile ( ' builder/inputs/MacOSX10.11.sdk.tar.gz ' ) :
print ( ' Cannot build for MacOS, SDK does not exist. Will build for other OSes ' )
if args . macos and not os . path . isfile ( ' builder/inputs/MacOSX10.11.sdk.tar.gz ' ) :
args . macos = False
if args . build :
print ( ' Cannot build for MacOS, SDK does not exist. Will build for other OSes ' )
script_name = os . path . basename ( sys . argv [ 0 ] )
# Signer and version shouldn't be empty
@ -189,6 +215,10 @@ def main():
if args . build :
build ( )
if args . rebuild :
os . chdir ( ' builder ' )
rebuild ( )
if args . verify :
verify ( )