summaryrefslogtreecommitdiff
path: root/Rakefile
diff options
context:
space:
mode:
Diffstat (limited to 'Rakefile')
-rw-r--r--Rakefile35
1 files changed, 23 insertions, 12 deletions
diff --git a/Rakefile b/Rakefile
index 368abfa..86ca2e1 100644
--- a/Rakefile
+++ b/Rakefile
@@ -7,8 +7,28 @@ CROSS_GCC = '../riscv32-ilp32d--glibc/bin/riscv32-linux-gcc'
SYSROOT = '../riscv32-ilp32d--glibc/riscv32-buildroot-linux-gnu/sysroot'
QEMU = 'qemu-riscv32'
+def assemble_stage(output, compiler, source)
+ arguments = [QEMU, '-L', SYSROOT, *compiler]
+
+ puts(arguments * ' ')
+ puts
+ Open3.popen2(*arguments) do |qemu_in, qemu_out|
+ qemu_in.write File.read(*source)
+ qemu_in.close
+
+ IO.copy_stream qemu_out, output
+ qemu_out.close
+ end
+end
+
desc 'Final stage'
-task default: 'build/stage2'
+task default: ['build/stage2', 'boot/stage2.elna'] do |t|
+ assembler, exe = t.prerequisites.partition { |prerequisite| prerequisite.end_with? '.elna' }
+
+ File.open File::NULL, 'w' do |output|
+ assemble_stage output, exe, assembler
+ end
+end
directory 'build'
@@ -21,18 +41,9 @@ end
file 'build/stage2.s' => ['build/stage1', 'boot/stage2.elna'] do |t|
assembler, exe = t.prerequisites.partition { |prerequisite| prerequisite.end_with? '.elna' }
- arguments = [QEMU, '-L', SYSROOT, *exe]
-
- puts(arguments * ' ')
- puts
- Open3.popen2(*arguments) do |qemu_in, qemu_out|
- qemu_in.write File.read(*assembler)
- qemu_in.close
- File.open t.name, 'w' do |output|
- IO.copy_stream qemu_out, output
- end
- qemu_out.close
+ File.open t.name, 'w' do |output|
+ assemble_stage output, exe, assembler
end
end