compiler: add support for custom code model
Этот коммит содержится в:
родитель
2396c22658
коммит
d3f5b51cd8
3 изменённых файлов: 32 добавлений и 1 удалений
|
@ -272,6 +272,15 @@ func (c *Config) OpenOCDConfiguration() (args []string, err error) {
|
||||||
return args, nil
|
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 {
|
type TestConfig struct {
|
||||||
CompileTestBinary bool
|
CompileTestBinary bool
|
||||||
// TODO: Filter the test functions to run, include verbose flag, etc
|
// TODO: Filter the test functions to run, include verbose flag, etc
|
||||||
|
|
|
@ -49,6 +49,7 @@ type TargetSpec struct {
|
||||||
OpenOCDTarget string `json:"openocd-target"`
|
OpenOCDTarget string `json:"openocd-target"`
|
||||||
OpenOCDTransport string `json:"openocd-transport"`
|
OpenOCDTransport string `json:"openocd-transport"`
|
||||||
JLinkDevice string `json:"jlink-device"`
|
JLinkDevice string `json:"jlink-device"`
|
||||||
|
CodeModel string `json:"code-model"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// copyProperties copies all properties that are set in spec2 into itself.
|
// copyProperties copies all properties that are set in spec2 into itself.
|
||||||
|
@ -130,6 +131,9 @@ func (spec *TargetSpec) copyProperties(spec2 *TargetSpec) {
|
||||||
if spec2.JLinkDevice != "" {
|
if spec2.JLinkDevice != "" {
|
||||||
spec.JLinkDevice = 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
|
// 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
|
return llvm.TargetMachine{}, err
|
||||||
}
|
}
|
||||||
features := strings.Join(config.Features(), ",")
|
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
|
return machine, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче