@@ -10,6 +10,14 @@ pub struct Build {
10
10
max_stack_size : Option < usize > ,
11
11
// Use longjmp instead of C++ exceptions
12
12
use_longjmp : Option < bool > ,
13
+ // Disable bytecode loading
14
+ disable_bytecode : Option < bool > ,
15
+ // Disable filesystem access
16
+ disable_fs : Option < bool > ,
17
+ // Disable os.os.execute and io.popen
18
+ disable_os_exec : Option < bool > ,
19
+ // Disable loading any C modules or shared libraries
20
+ disable_binaries : Option < bool > ,
13
21
}
14
22
15
23
pub struct Artifacts {
@@ -27,6 +35,10 @@ impl Build {
27
35
host : env:: var ( "HOST" ) . ok ( ) ,
28
36
max_stack_size : None ,
29
37
use_longjmp : None ,
38
+ disable_bytecode : None ,
39
+ disable_fs : None ,
40
+ disable_os_exec : None ,
41
+ disable_binaries : None ,
30
42
}
31
43
}
32
44
@@ -55,6 +67,30 @@ impl Build {
55
67
self
56
68
}
57
69
70
+ // Controls `PLUTO_DISABLE_COMPILED` define
71
+ pub fn disable_bytecode ( & mut self , disable : bool ) -> & mut Build {
72
+ self . disable_bytecode = Some ( disable) ;
73
+ self
74
+ }
75
+
76
+ // Controls `PLUTO_NO_FILESYSTEM` define
77
+ pub fn disable_fs ( & mut self , disable : bool ) -> & mut Build {
78
+ self . disable_fs = Some ( disable) ;
79
+ self
80
+ }
81
+
82
+ // Controls `PLUTO_NO_OS_EXECUTE` define
83
+ pub fn disable_os_exec ( & mut self , disable : bool ) -> & mut Build {
84
+ self . disable_os_exec = Some ( disable) ;
85
+ self
86
+ }
87
+
88
+ // Controls `PLUTO_NO_BINARIES` define
89
+ pub fn disable_binaries ( & mut self , disable : bool ) -> & mut Build {
90
+ self . disable_binaries = Some ( disable) ;
91
+ self
92
+ }
93
+
58
94
pub fn build ( & mut self ) -> Artifacts {
59
95
let target = & self . target . as_ref ( ) . expect ( "TARGET not set" ) [ ..] ;
60
96
let host = & self . host . as_ref ( ) . expect ( "HOST not set" ) [ ..] ;
@@ -81,14 +117,6 @@ impl Build {
81
117
. flag_if_supported ( "-Wno-multichar" )
82
118
. cpp ( true ) ;
83
119
84
- if let Some ( max_stack_size) = self . max_stack_size {
85
- config. define ( "LUAI_MAXSTACK" , & * max_stack_size. to_string ( ) ) ;
86
- }
87
-
88
- if let Some ( true ) = self . use_longjmp {
89
- config. define ( "LUA_USE_LONGJMP" , "1" ) ;
90
- }
91
-
92
120
if cfg ! ( debug_assertions) {
93
121
config. define ( "LUA_USE_APICHECK" , None ) ;
94
122
} else {
@@ -124,6 +152,30 @@ impl Build {
124
152
}
125
153
soup_config. out_dir ( out_dir) . compile ( soup_lib_name) ;
126
154
155
+ if let Some ( max_stack_size) = self . max_stack_size {
156
+ config. define ( "LUAI_MAXSTACK" , & * max_stack_size. to_string ( ) ) ;
157
+ }
158
+
159
+ if let Some ( true ) = self . use_longjmp {
160
+ config. define ( "LUA_USE_LONGJMP" , None ) ;
161
+ }
162
+
163
+ if let Some ( true ) = self . disable_bytecode {
164
+ config. define ( "PLUTO_DISABLE_COMPILED" , None ) ;
165
+ }
166
+
167
+ if let Some ( true ) = self . disable_fs {
168
+ config. define ( "PLUTO_NO_FILESYSTEM" , None ) ;
169
+ }
170
+
171
+ if let Some ( true ) = self . disable_os_exec {
172
+ config. define ( "PLUTO_NO_OS_EXECUTE" , None ) ;
173
+ }
174
+
175
+ if let Some ( true ) = self . disable_binaries {
176
+ config. define ( "PLUTO_NO_BINARIES" , None ) ;
177
+ }
178
+
127
179
// Build Pluto
128
180
let pluto_lib_name = "pluto" ;
129
181
config
0 commit comments