1
1
use crate :: abi:: Endian ;
2
- use crate :: spec:: { Cc , cvs, LinkerFlavor , Lld , PanicStrategy , TargetOptions } ;
2
+ use crate :: spec:: { Cc , cvs, LinkerFlavor , Lld , PanicStrategy , Target , TargetOptions } ;
3
3
4
4
const V0_LINKER_SCRIPT : & str = r"
5
5
PHDRS
@@ -81,12 +81,31 @@ PHDRS
81
81
}
82
82
" ;
83
83
84
- pub fn opts ( ) -> TargetOptions {
84
+ pub fn opts ( version : & ' static str ) -> TargetOptions {
85
85
let pre_link_args = TargetOptions :: link_args (
86
86
LinkerFlavor :: Gnu ( Cc :: No , Lld :: No ) ,
87
87
& [ "--threads=1" , "-z" , "notext" , "--Bdynamic" ] ,
88
88
) ;
89
89
90
+ let linker_script = if version == "v3" {
91
+ V3_LINKER_SCRIPT
92
+ } else {
93
+ V0_LINKER_SCRIPT
94
+ } ;
95
+ let cpu = if version == "v0" {
96
+ "generic"
97
+ } else {
98
+ version
99
+ } ;
100
+
101
+ let features = if version == "v3" {
102
+ "+static-syscalls"
103
+ } else if version == "v0" {
104
+ "+store-imm,+jmp-ext"
105
+ } else {
106
+ ""
107
+ } ;
108
+
90
109
TargetOptions {
91
110
allow_asm : true ,
92
111
c_int_width : "64" . into ( ) ,
@@ -99,8 +118,7 @@ pub fn opts() -> TargetOptions {
99
118
env : "" . into ( ) ,
100
119
executables : true ,
101
120
families : cvs ! [ "solana" ] ,
102
- features : "+store-imm,+jmp-ext" . into ( ) ,
103
- link_script : Some ( V0_LINKER_SCRIPT . into ( ) ) ,
121
+ link_script : Some ( linker_script. into ( ) ) ,
104
122
linker : Some ( "rust-lld" . into ( ) ) ,
105
123
linker_flavor : LinkerFlavor :: Gnu ( Cc :: No , Lld :: Yes ) ,
106
124
main_needs_argc_argv : false ,
@@ -115,7 +133,24 @@ pub fn opts() -> TargetOptions {
115
133
singlethread : true ,
116
134
vendor : "solana" . into ( ) ,
117
135
c_enum_min_bits : Some ( 32 ) ,
118
- sbf_v3_link_script : Some ( V3_LINKER_SCRIPT . into ( ) ) ,
136
+ cpu : cpu. into ( ) ,
137
+ features : features. into ( ) ,
119
138
.. Default :: default ( )
120
139
}
121
140
}
141
+
142
+ pub fn sbf_target ( version : & ' static str ) -> Target {
143
+ Target {
144
+ llvm_target : "sbf" . into ( ) ,
145
+ pointer_width : 64 ,
146
+ arch : "sbf" . into ( ) ,
147
+ data_layout : "e-m:e-p:64:64-i64:64-n32:64-S128" . into ( ) ,
148
+ options : opts ( version) ,
149
+ metadata : crate :: spec:: TargetMetadata {
150
+ description : None ,
151
+ tier : None ,
152
+ host_tools : None ,
153
+ std : None ,
154
+ } ,
155
+ }
156
+ }
0 commit comments