Пример #1
0
    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