From 979361d5fe11c716822b5636689f45a82b573140 Mon Sep 17 00:00:00 2001 From: Keeley Hammond Date: Wed, 6 Jul 2022 11:28:27 -0700 Subject: [PATCH] fix: add std=c++17 flag for e20+ --- src/clang-fetcher.ts | 7 +++++++ src/module-type/node-gyp.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/clang-fetcher.ts b/src/clang-fetcher.ts index 8a6f624c..9ec61d45 100644 --- a/src/clang-fetcher.ts +++ b/src/clang-fetcher.ts @@ -2,6 +2,7 @@ import * as cp from 'child_process'; import debug from 'debug'; import * as fs from 'fs-extra'; import * as path from 'path'; +import semver from 'semver'; import * as tar from 'tar'; import * as zlib from 'zlib'; import { ELECTRON_GYP_DIR } from './constants'; @@ -36,10 +37,14 @@ export async function getClangEnvironmentVars(electronVersion: string, targetArc const clangDownloadDir = await downloadClangVersion(electronVersion); const clangDir = path.resolve(clangDownloadDir, 'bin'); + const cxxflags = []; const clangArgs: string[] = []; if (process.platform === 'darwin') { clangArgs.push('-isysroot', getSDKRoot()); } + if (semver.major(electronVersion) >= 20) { + cxxflags.push('-std=c++17'); + } const gypArgs = []; if (process.platform === 'win32') { @@ -56,6 +61,8 @@ export async function getClangEnvironmentVars(electronVersion: string, targetArc env: { CC: `"${path.resolve(clangDir, 'clang')}" ${clangArgs.join(' ')}`, CXX: `"${path.resolve(clangDir, 'clang++')}" ${clangArgs.join(' ')}`, + CFLAGS: `${cxxflags.join(' ')}`, + CXXFLAGS: `${cxxflags.join(' ')}` }, args: gypArgs, } diff --git a/src/module-type/node-gyp.ts b/src/module-type/node-gyp.ts index d733c502..009896c2 100644 --- a/src/module-type/node-gyp.ts +++ b/src/module-type/node-gyp.ts @@ -89,6 +89,10 @@ export class NodeGyp extends NativeModule { let env: Record; const extraNodeGypArgs: string[] = []; + if (semver.major(this.rebuilder.electronVersion) >= 20) { + process.env.CXXFLAGS = '-std=c++17'; + } + if (this.rebuilder.useElectronClang) { env = { ...process.env }; const { env: clangEnv, args: clangArgs } = await getClangEnvironmentVars(this.rebuilder.electronVersion, this.rebuilder.arch);