if bytes(args.o.ver, 'utf-8') in output: print('gcc-install: {app} {ver} is already installed'.format(app=APP, ver=args.o.ver)) exit(0) else: print('gcc-install: compiling {app} {ver}'.format(app=APP, ver=args.o.ver)) gmp_path = os.path.join(os.path.dirname(args.o.src), 'gmp') print('gcc-install: gmp_path=', gmp_path) mpfr_path = os.path.join(os.path.dirname(args.o.src), 'mpfr') print('gcc-install: mpfr_path=', mpfr_path) mpc_path = os.path.join(os.path.dirname(args.o.src), 'mpc') print('gcc-install: mpc_path=', mpc_path) try: utils.wget_extract(GMP_URL, dst_path=gmp_path) utils.wget_extract(MPFR_URL, dst_path=mpfr_path) utils.wget_extract(MPC_URL, dst_path=mpc_path) if True: # Use wget as its faster utils.wget_extract(GCC_URL.format(args.o.ver), dst_path=args.o.src) os.chdir(args.o.src) else: # Use git, but this was slower os.makedirs(args.o.src, exist_ok=True) utils.git('clone', [GCC_GIT_REPO_URL, args.o.src]) os.chdir(args.o.src) utils.git('checkout', [CHECKOUT_LABEL]) # Create the build directory and cd into it os.mkdir('build')
def install(self): dst_dir = os.path.join(self.args.installPrefixDir, 'bin') os.makedirs(dst_dir, exist_ok=True) retval = 0 self.parseUnknownArgs() try: theApp = AN_APP if self.args.target != '': theApp = '{}-{}'.format(self.args.target, theApp) theApp = os.path.join(dst_dir, theApp) output = subprocess.check_output([theApp, '--version'], stderr=subprocess.STDOUT) if output is None: output = b'' except BaseException as err: output = b'' if not self.args.forceInstall and bytes(self.args.ver, 'utf-8') in output: print('{app} {ver} is already installed' .format(app=self.args.app, ver=self.args.ver)) else: code_dir = self.args.codePrefixDir if self.args.target != '': code_dir = os.path.join(code_dir, self.args.target) gmp_path = os.path.join(code_dir, 'gmp') print('gcc_install: gmp_path=', gmp_path) mpfr_path = os.path.join(code_dir, 'mpfr') print('gcc_install: mpfr_path=', mpfr_path) mpc_path = os.path.join(code_dir, 'mpc') print('gcc_install: mpc_path=', mpc_path) #isl does't compile and its optional so don't add #isl_path = os.path.join(code_dir, 'isl') #print('gcc_install: isl_path=', isl_path) gcc_path = os.path.join(code_dir, 'gcc') print('gcc_install: gcc_path=', gcc_path) #envVars = ('LDFLAGS=-L/home/wink/opt/lib' + # ' CPPFLAGS=-I/home/wink/opt/include') envVars = '' # If desired make false when testing so we don't download. if True: if self.args.forceInstall: shutil.rmtree(gmp_path, ignore_errors=True) shutil.rmtree(mpfr_path, ignore_errors=True) shutil.rmtree(mpc_path, ignore_errors=True) #shutil.rmtree(isl_path, ignore_errors=True) shutil.rmtree(gcc_path, ignore_errors=True) utils.wget_extract(GMP_URL, dst_path=gmp_path) utils.wget_extract(MPFR_URL, dst_path=mpfr_path) utils.wget_extract(MPC_URL, dst_path=mpc_path) #utils.wget_extract(ISL_URL, dst_path=isl_path) if True: # Use wget as its faster utils.wget_extract(GCC_URL.format(self.args.ver), dst_path=gcc_path) os.chdir(gcc_path) else: # Use git, but its slower os.makedirs(self.args.codePrefixDir, exist_ok=True) utils.git('clone', [GCC_GIT_REPO_URL, gcc_path]) os.chdir(gcc_path) utils.git('checkout', [CHECKOUT_LABEL]) # Make the prerequisites (isl is optional) #self.makePrerequisiteLibrary(envVars, isl_path, os.path.dirname(self.args.installPrefixDir)) # Make the prerequisites (Not needed if I install existing versions??) #self.makePrerequisiteLibrary(envVars, gmp_path, os.path.dirname(self.args.installPrefixDir)) #self.makePrerequisiteLibrary(envVars, mpfr_path, os.path.dirname(self.args.installPrefixDir)) #self.makePrerequisiteLibrary(envVars, mpc_path, os.path.dirname(self.args.installPrefixDir)) # Create the build directory and cd into it os.chdir(gcc_path) os.makedirs('build', exist_ok=True) os.chdir('build') # ls the directory with gcc, gmp, mpfr and mpc for debug purposes #utils.bash('ls -al {}'.format(os.path.dirname(self.args.codePrefixDir))) cmd = ('{env}' + ' ../configure --prefix={prefix}' + ' --with-gmp={gmp}' + ' --with-gmp-include={gmp}' + ' --with-mpfr={mpfr}' + ' --with-mpfr-include={mpfr}/src' + ' --with-mpc={mpc}' + ' --with-mpc-include={mpc}/src' + #' --with-isl={isl}' + #' --with-isl-include={isl}/include' + ' --disable-nls ' + ' --enable-languages=c,c++' + ' --disable-multilib' + ' --without-headers').format( env=envVars, prefix=self.args.installPrefixDir, gmp=gmp_path, mpfr=mpfr_path, mpc=mpc_path) #, isl=isl_path) if self.args.target != '': cmd += ' --target={}'.format(self.args.target) # Add extraFlags added on the command line for extraFlag in self.extraArgs.extraGccConfigFlags: cmd += ' {}'.format(extraFlag) # Add extraFlags passed to the constructor for extraFlag in self.extraFlags: cmd += ' {}'.format(extraFlag) self.runCmd(cmd) cpu_count = multiprocessing.cpu_count() cci = os.environ.get('CIRCLECI') if cci != None and cci == 'true': cpu_count = 4; self.runCmd('{env} make all-gcc -j {c}' .format(env=envVars, c=cpu_count), verbose=True) self.runCmd('{env} make install-gcc' .format(env=envVars)) self.runCmd('{env} make all-target-libgcc -j {c}' .format(env=envVars, c=cpu_count)) self.runCmd('{env} make install-target-libgcc' .format(env=envVars)) return 0