From f5bfb821d13eb36f378d4820f655dfc9a1e53d12 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Thu, 16 Sep 2021 16:47:49 -0500 Subject: [PATCH] fix: set the environment variables for gcc --- src/brew/__tests__/brew.test.ts | 1 - src/default_versions.ts | 1 + src/gcc/__tests__/gcc.test.ts | 5 ++-- src/gcc/gcc.ts | 43 +++++++++++++++++++++++++++------ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/brew/__tests__/brew.test.ts b/src/brew/__tests__/brew.test.ts index d7d31c1c..ea71437e 100644 --- a/src/brew/__tests__/brew.test.ts +++ b/src/brew/__tests__/brew.test.ts @@ -1,6 +1,5 @@ import { setupBrew } from "../brew" import { testBin } from "../../utils/tests/test-helpers" -import { InstallationInfo } from "../../utils/setup/setupBin" jest.setTimeout(200000) describe("setup-brew", () => { diff --git a/src/default_versions.ts b/src/default_versions.ts index 62e0ffe9..5a421dc5 100644 --- a/src/default_versions.ts +++ b/src/default_versions.ts @@ -7,6 +7,7 @@ const DefaultVersions: Record = { conan: "1.40.1", meson: "0.59.1", python: "3.x", + gcc: "11.2.0", } /** Get the default version if passed true or undefined, otherwise return the version itself */ diff --git a/src/gcc/__tests__/gcc.test.ts b/src/gcc/__tests__/gcc.test.ts index 226e11e9..b802de11 100644 --- a/src/gcc/__tests__/gcc.test.ts +++ b/src/gcc/__tests__/gcc.test.ts @@ -1,12 +1,11 @@ -import { InstallationInfo } from "../../utils/setup/setupBin" import { testBin } from "../../utils/tests/test-helpers" import { setupGcc } from "../gcc" jest.setTimeout(200000) describe("setup-gcc", () => { it("should setup gcc", async () => { - const installInfo = await setupGcc("", "", "") + const installInfo = await setupGcc("11.2.0", "", "") - await testBin("g++", ["--version"], (installInfo as InstallationInfo | undefined)?.binDir) + await testBin("g++", ["--version"], installInfo?.binDir) }) }) diff --git a/src/gcc/gcc.ts b/src/gcc/gcc.ts index ba580fde..17b43c10 100644 --- a/src/gcc/gcc.ts +++ b/src/gcc/gcc.ts @@ -1,37 +1,38 @@ -import { addPath } from "@actions/core" +import { addPath, exportVariable } from "@actions/core" import { existsSync } from "fs" import { setupAptPack } from "../utils/setup/setupAptPack" import { setupBrewPack } from "../utils/setup/setupBrewPack" import { setupChocoPack } from "../utils/setup/setupChocoPack" +import semverMajor from "semver/functions/major" // eslint-disable-next-line @typescript-eslint/no-unused-vars export async function setupGcc(version: string, _setupCppDir: string, arch: string) { + let binDir: string | undefined switch (process.platform) { case "win32": { if (arch === "arm" || arch === "arm64") { await setupChocoPack("gcc-arm-embedded", version) } await setupChocoPack("mingw", version) - let binDir: string | undefined if (arch === "x64" && existsSync("C:\\tools\\mingw64\\bin")) { binDir = "C:\\tools\\mingw64\\bin" addPath(binDir) - return { binDir } } else if (arch === "ia32" && existsSync("C:\\tools\\mingw32\\bin")) { binDir = "C:\\tools\\mingw32\\bin" addPath(binDir) - return { binDir } } - return undefined + break } case "darwin": { - return setupBrewPack("gcc", version) + binDir = setupBrewPack("gcc", version).binDir + break } case "linux": { if (arch === "x64") { - return setupAptPack("g++", version, "ppa:ubuntu-toolchain-r/test") + binDir = (await setupAptPack("g++", version, "ppa:ubuntu-toolchain-r/test")).binDir } - return setupAptPack("g++-multilib", version, "ppa:ubuntu-toolchain-r/test") + binDir = (await setupAptPack("g++-multilib", version, "ppa:ubuntu-toolchain-r/test")).binDir + break } // TODO support bare-metal // TODO support abi @@ -46,4 +47,30 @@ export async function setupGcc(version: string, _setupCppDir: string, arch: stri throw new Error(`Unsupported platform for ${arch}`) } } + if (binDir !== undefined) { + const majorVersion = semverMajor(version) + + // TODO + // const ld = process.env.LD_LIBRARY_PATH ?? "" + // const dyld = process.env.DYLD_LIBRARY_PATH ?? "" + + // // Setup gcc as the compiler + // exportVariable("LD_LIBRARY_PATH", `${installDir}/lib${path.delimiter}${ld}`) + // exportVariable("DYLD_LIBRARY_PATH", `${installDir}/lib${path.delimiter}${dyld}`) + + // exportVariable("CPATH", `${installDir}/lib/gcc/${majorVersion}/include`) + + // exportVariable("LDFLAGS", `-L${installDir}/lib`) + // exportVariable("CPPFLAGS", `-I${installDir}/include`) + + if (process.platform === "win32") { + exportVariable("CC", `${binDir}/gcc`) + exportVariable("CXX", `${binDir}/g++`) + } else { + exportVariable("CC", `${binDir}/gcc-${majorVersion}`) + exportVariable("CXX", `${binDir}/g++-${majorVersion}`) + } + return { binDir } + } + return undefined }