diff --git a/IDE/src/Compiler/BfCompiler.bf b/IDE/src/Compiler/BfCompiler.bf index cc8c95b0..1599915c 100644 --- a/IDE/src/Compiler/BfCompiler.bf +++ b/IDE/src/Compiler/BfCompiler.bf @@ -697,6 +697,8 @@ namespace IDE.Compiler } //Debug.WriteLine("HandleOptions SetOptions:{0:X}", (int)optionFlags); + if (!options.mTargetTriple.IsWhiteSpace) + targetTriple.Set(options.mTargetTriple); SetOptions(hotBfProject, hotIdx, targetTriple, options.mTargetCPU, (int32)options.mToolsetType, (int32)options.mBfSIMDSetting, (int32)options.mAllocStackTraceDepth, diff --git a/IDE/src/Workspace.bf b/IDE/src/Workspace.bf index cf213b14..698739e4 100644 --- a/IDE/src/Workspace.bf +++ b/IDE/src/Workspace.bf @@ -240,6 +240,8 @@ namespace IDE [Reflect] public IntermediateType mIntermediateType; [Reflect] + public String mTargetTriple = new String() ~ delete _; + [Reflect] public String mTargetCPU = new String() ~ delete _; [Reflect] public BuildOptions.SIMDSetting mBfSIMDSetting = .SSE2; @@ -319,6 +321,7 @@ namespace IDE mIncrementalBuild = prev.mIncrementalBuild; mIntermediateType = prev.mIntermediateType; + mTargetTriple.Set(prev.mTargetTriple); mTargetCPU.Set(prev.mTargetCPU); mBfSIMDSetting = prev.mBfSIMDSetting; mBfOptimizationLevel = prev.mBfOptimizationLevel; @@ -741,6 +744,7 @@ namespace IDE data.ConditionalAdd("Toolset", options.mToolsetType, ToolsetType.GetDefaultFor(platformType, isRelease)); data.ConditionalAdd("BuildKind", options.mBuildKind, isTest ? .Test : .Normal); + data.ConditionalAdd("TargetTriple", options.mTargetTriple); data.ConditionalAdd("TargetCPU", options.mTargetCPU); data.ConditionalAdd("BfSIMDSetting", options.mBfSIMDSetting, .SSE2); if (platformType == .Windows) @@ -1045,6 +1049,7 @@ namespace IDE options.mToolsetType = data.GetEnum("Toolset", ToolsetType.GetDefaultFor(platformType, isRelease)); options.mBuildKind = data.GetEnum("BuildKind", isTest ? .Test : .Normal); + data.GetString("TargetTriple", options.mTargetTriple); data.GetString("TargetCPU", options.mTargetCPU); options.mBfSIMDSetting = data.GetEnum("BfSIMDSetting", .SSE2); if (platformType == .Windows) diff --git a/IDE/src/ui/WorkspaceProperties.bf b/IDE/src/ui/WorkspaceProperties.bf index c53d667b..83f55d99 100644 --- a/IDE/src/ui/WorkspaceProperties.bf +++ b/IDE/src/ui/WorkspaceProperties.bf @@ -775,6 +775,7 @@ namespace IDE.ui return false; }); allocPropEntry.mOnUpdate(); + AddPropertiesItem(category, "Target Triple", "mTargetTriple"); AddPropertiesItem(category, "Target CPU", "mTargetCPU"); AddPropertiesItem(category, "SIMD Instructions", "mBfSIMDSetting"); AddPropertiesItem(category, "Optimization Level", "mBfOptimizationLevel", diff --git a/IDEHelper/Backend/BeMCContext.cpp b/IDEHelper/Backend/BeMCContext.cpp index f99ee96e..6e31f4c6 100644 --- a/IDEHelper/Backend/BeMCContext.cpp +++ b/IDEHelper/Backend/BeMCContext.cpp @@ -16040,7 +16040,7 @@ BeMCOperand BeMCContext::AllocBinaryOp(BeMCInstKind instKind, const BeMCOperand& } void BeMCContext::Generate(BeFunction* function) -{ +{ BP_ZONE_F("BeMCContext::Generate %s", function->mName.c_str()); mBeFunction = function; @@ -16048,7 +16048,12 @@ void BeMCContext::Generate(BeFunction* function) mModule = function->mModule; if (!mModule->mTargetCPU.IsEmpty()) - mModule->mBeIRCodeGen->Fail(StrFormat("Cannot set Target CPU '%s' for +Og optimization. Considering compiling under a different optimization setting.", mModule->mTargetCPU.c_str())); + mModule->mBeIRCodeGen->Fail(StrFormat("Cannot set Target CPU to '%s' for +Og optimization. Considering compiling under a different optimization setting.", mModule->mTargetCPU.c_str())); + if (mModule->mTargetTriple != "x86_64-pc-windows-msvc") + { + mModule->mBeIRCodeGen->Fail(StrFormat("Cannot set Target Triple to '%s' for +Og optimization. Considering compiling under a different optimization setting.", mModule->mTargetTriple.c_str())); + return; + } //mDbgPreferredRegs[15] = X64Reg_RCX; //mDbgPreferredRegs[7] = X64Reg_RCX;