/// <summary> /// Configure this instance with Windows and MSVC. /// </summary> /// <returns>This instance</returns> public CppParserOptions ConfigureForWindowsMsvc(CppTargetCpu targetCpu = CppTargetCpu.X86, CppVisualStudioVersion vsVersion = CppVisualStudioVersion.VS2019) { // 1920 var highVersion = ((int)vsVersion) / 100; // => 19 var lowVersion = ((int)vsVersion) % 100; // => 20 var versionAsString = $"{highVersion}.{lowVersion}"; TargetCpu = targetCpu; TargetCpuSub = string.Empty; TargetVendor = "pc"; TargetSystem = "windows"; TargetAbi = $"msvc{versionAsString}"; // See https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019 Defines.Add($"_MSC_VER={(int)vsVersion}"); Defines.Add("_WIN32=1"); switch (targetCpu) { case CppTargetCpu.X86: Defines.Add("_M_IX86=600"); break; case CppTargetCpu.X86_64: Defines.Add("_M_AMD64=100"); Defines.Add("_M_X64=100"); Defines.Add("_WIN64=1"); break; case CppTargetCpu.ARM: Defines.Add("_M_ARM=7"); break; case CppTargetCpu.ARM64: Defines.Add("_M_ARM64=1"); Defines.Add("_WIN64=1"); break; default: throw new ArgumentOutOfRangeException(nameof(targetCpu), targetCpu, null); } AdditionalArguments.Add("-fms-extensions"); AdditionalArguments.Add("-fms-compatibility"); AdditionalArguments.Add($"-fms-compatibility-version={versionAsString}"); return(this); }
private static string GetTargetCpuAsString(CppTargetCpu targetCpu) { switch (targetCpu) { case CppTargetCpu.X86: return("i686"); case CppTargetCpu.X86_64: return("x86_64"); case CppTargetCpu.ARM: return("arm"); case CppTargetCpu.ARM64: return("aarch64"); default: throw new ArgumentOutOfRangeException(nameof(targetCpu), targetCpu, null); } }