#!/usr/bin/env node const child_process = require('child_process'); const stdio = { stdio: 'inherit' }; // On OSX all we need to do is configure our deployment target as old as // possible. For now 10.9 is the limit. if (process.platform == 'darwin') { console.log("::set-env name=MACOSX_DEPLOYMENT_TARGET::10.9"); console.log("::set-env name=python::python3"); return; } // On Windows we build against the static CRT to reduce dll dependencies if (process.platform == 'win32') { console.log("::set-env name=RUSTFLAGS::-Ctarget-feature=+crt-static"); console.log("::set-env name=python::python"); return; } // ... and on Linux we do fancy things with containers. We'll spawn an old // CentOS container in the background with a super old glibc, and then we'll run // commands in there with the `$CENTOS` env var. if (process.env.CENTOS !== undefined) { const args = ['exec', '-w', process.cwd(), '-i', 'centos']; for (const arg of process.argv.slice(2)) { args.push(arg); } child_process.execFileSync('docker', args, stdio); return; } // Add our rust mount onto PATH, but also add some stuff to PATH from // the packages that we install. let path = process.env.PATH; path = `${path}:/rust/bin`; path = `/opt/rh/devtoolset-8/root/usr/bin:${path}`; path = `/opt/rh/rh-python36/root/usr/bin:${path}`; // Spawn a container daemonized in the background which we'll connect to via // `docker exec`. This'll have access to the current directory. child_process.execFileSync('docker', [ 'run', '-di', '--name', 'centos', '-v', `${process.cwd()}:${process.cwd()}`, '-v', `${child_process.execSync('rustc --print sysroot').toString().trim()}:/rust:ro`, '--env', `PATH=${path}`, 'centos:6', ], stdio); // Use ourselves to run future commands console.log(`::set-env name=CENTOS::${__filename}`) // See https://edwards.sdsu.edu/research/c11-on-centos-6/ for where these const exec = s => { child_process.execSync(`docker exec centos ${s}`, stdio); }; exec('yum install -y centos-release-scl cmake xz epel-release'); exec('yum install -y rh-python36 patchelf unzip'); exec('yum install -y devtoolset-8-gcc devtoolset-8-binutils devtoolset-8-gcc-c++'); exec('yum install -y git'); // Delete `libstdc++.so` to force gcc to link against `libstdc++.a` instead. // This is a hack and not the right way to do this, but it ends up doing the // right thing for now. exec('rm -f /opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.so'); console.log("::set-env name=python::python3");