/// <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);
        }
Exemple #2
0
        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);
            }
        }