Browse Source
compiler: add support for custom code model
pull/1167/head
Yannis Huber
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
32 additions and
1 deletions
-
compileopts/config.go
-
compileopts/target.go
-
compiler/compiler.go
|
|
@ -272,6 +272,15 @@ func (c *Config) OpenOCDConfiguration() (args []string, err error) { |
|
|
|
return args, nil |
|
|
|
} |
|
|
|
|
|
|
|
// CodeModel returns the code model used on this platform.
|
|
|
|
func (c *Config) CodeModel() string { |
|
|
|
if c.Target.CodeModel != "" { |
|
|
|
return c.Target.CodeModel |
|
|
|
} |
|
|
|
|
|
|
|
return "default" |
|
|
|
} |
|
|
|
|
|
|
|
type TestConfig struct { |
|
|
|
CompileTestBinary bool |
|
|
|
// TODO: Filter the test functions to run, include verbose flag, etc
|
|
|
|
|
|
@ -49,6 +49,7 @@ type TargetSpec struct { |
|
|
|
OpenOCDTarget string `json:"openocd-target"` |
|
|
|
OpenOCDTransport string `json:"openocd-transport"` |
|
|
|
JLinkDevice string `json:"jlink-device"` |
|
|
|
CodeModel string `json:"code-model"` |
|
|
|
} |
|
|
|
|
|
|
|
// copyProperties copies all properties that are set in spec2 into itself.
|
|
|
@ -130,6 +131,9 @@ func (spec *TargetSpec) copyProperties(spec2 *TargetSpec) { |
|
|
|
if spec2.JLinkDevice != "" { |
|
|
|
spec.JLinkDevice = spec2.JLinkDevice |
|
|
|
} |
|
|
|
if spec2.CodeModel != "" { |
|
|
|
spec.CodeModel = spec2.CodeModel |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// load reads a target specification from the JSON in the given io.Reader. It
|
|
|
|
|
|
@ -91,7 +91,25 @@ func NewTargetMachine(config *compileopts.Config) (llvm.TargetMachine, error) { |
|
|
|
return llvm.TargetMachine{}, err |
|
|
|
} |
|
|
|
features := strings.Join(config.Features(), ",") |
|
|
|
machine := target.CreateTargetMachine(config.Triple(), config.CPU(), features, llvm.CodeGenLevelDefault, llvm.RelocStatic, llvm.CodeModelDefault) |
|
|
|
|
|
|
|
var codeModel llvm.CodeModel |
|
|
|
|
|
|
|
switch config.CodeModel() { |
|
|
|
case "default": |
|
|
|
codeModel = llvm.CodeModelDefault |
|
|
|
case "tiny": |
|
|
|
codeModel = llvm.CodeModelTiny |
|
|
|
case "small": |
|
|
|
codeModel = llvm.CodeModelSmall |
|
|
|
case "kernel": |
|
|
|
codeModel = llvm.CodeModelKernel |
|
|
|
case "medium": |
|
|
|
codeModel = llvm.CodeModelMedium |
|
|
|
case "large": |
|
|
|
codeModel = llvm.CodeModelLarge |
|
|
|
} |
|
|
|
|
|
|
|
machine := target.CreateTargetMachine(config.Triple(), config.CPU(), features, llvm.CodeGenLevelDefault, llvm.RelocStatic, codeModel) |
|
|
|
return machine, nil |
|
|
|
} |
|
|
|
|
|
|
|