-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheffekt_baremetal.patch
More file actions
36 lines (33 loc) · 2.27 KB
/
Copy patheffekt_baremetal.patch
File metadata and controls
36 lines (33 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
diff --git a/effekt/jvm/src/main/scala/effekt/EffektConfig.scala b/effekt/jvm/src/main/scala/effekt/EffektConfig.scala
index 154b49974..1ec70c97b 100644
--- a/effekt/jvm/src/main/scala/effekt/EffektConfig.scala
+++ b/effekt/jvm/src/main/scala/effekt/EffektConfig.scala
@@ -95,6 +95,13 @@ class EffektConfig(args: Seq[String]) extends REPLConfig(args.takeWhile(_ != "--
group = advanced
)
+ val baremetal: ScallopOption[Boolean] = toggle(
+ "baremetal",
+ descrYes = "Generate freestanding executable suitable for baremetal execution",
+ default = Some(false),
+ group = advanced
+ )
+
val preludePath: ScallopOption[List[String]] = opt[List[String]](
"prelude",
descr = "Modules to be automatically imported in every file",
diff --git a/effekt/jvm/src/main/scala/effekt/Runner.scala b/effekt/jvm/src/main/scala/effekt/Runner.scala
index ba610726a..a80f32dc6 100644
--- a/effekt/jvm/src/main/scala/effekt/Runner.scala
+++ b/effekt/jvm/src/main/scala/effekt/Runner.scala
@@ -376,7 +376,12 @@ object LLVMRunner extends Runner[String] {
clangArgs ++= Seq("-O3", "-flto=full")
}
- exec(clangArgs: _*)
+ if (C.config.baremetal()) {
+ clangArgs = Seq(clang, "-c", llPath, "-O2", "-Wall", "-Wextra", "-pedantic", "-Wno-override-module", "-ffreestanding", "-fno-stack-protector", "-fno-stack-check", "-fno-lto", "-fno-PIC", "-fno-pie", "-ffunction-sections", "-fdata-sections", "-nostdlib", "-fno-exceptions", "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", "-m64", "-march=x86-64", "-mabi=sysv", "-mno-80387", "-mno-mmx", "-msse", "-msse2", "-mno-red-zone", "-mcmodel=kernel", "-static", "-o", f"${executableFile}.ll.o", "-ggdb3")
+ exec(clangArgs: _*)
+ clangArgs = Seq(clang, "-c", clangMainFile, "-O2", "-Wall", "-Wextra", "-pedantic", "-Wno-override-module", "-ffreestanding", "-fno-stack-protector", "-fno-stack-check", "-fno-lto", "-fno-PIC", "-fno-pie", "-ffunction-sections", "-fdata-sections", "-nostdlib", "-fno-exceptions", "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", "-m64", "-march=x86-64", "-mabi=sysv", "-mno-80387", "-mno-mmx", "-msse", "-msse2", "-mno-red-zone", "-mcmodel=kernel", "-static", "-o", f"${executableFile}.o", "-ggdb3")
+ exec(clangArgs: _*)
+ } else exec(clangArgs: _*)
Some(executableFile)
}