diff options
Diffstat (limited to 'Rakefile')
| -rw-r--r-- | Rakefile | 35 |
1 files changed, 23 insertions, 12 deletions
@@ -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 |
