summaryrefslogtreecommitdiff
path: root/rakelib/tester.rake
diff options
context:
space:
mode:
Diffstat (limited to 'rakelib/tester.rake')
-rw-r--r--rakelib/tester.rake27
1 files changed, 21 insertions, 6 deletions
diff --git a/rakelib/tester.rake b/rakelib/tester.rake
index c348303..d164c2a 100644
--- a/rakelib/tester.rake
+++ b/rakelib/tester.rake
@@ -5,32 +5,47 @@ require_relative 'shared'
CLEAN.include(TMP + 'riscv')
LINKER = 'build/rootfs/riscv32-unknown-linux-gnu/bin/ld'
+AS = 'build/rootfs/riscv32-unknown-linux-gnu/bin/as'
namespace :test do
- test_sources = FileList['tests/vm/*.elna']
+ test_sources = FileList['tests/vm/*.elna', 'tests/vm/*.s']
compiler = `cabal list-bin elna`.strip
object_directory = TMP + 'riscv/tests'
root_directory = TMP + 'riscv/root'
executable_directory = root_directory + 'tests'
expectation_directory = root_directory + 'expectations'
init = TMP + 'riscv/root/init'
+ builtin = TMP + 'riscv/builtin.o'
directory root_directory
directory object_directory
directory executable_directory
directory expectation_directory
+ file builtin => ['tools/builtin.s', object_directory] do |task|
+ sh AS, '-o', task.name, task.prerequisites.first
+ end
+
test_files = test_sources.flat_map do |test_source|
- test_basename = File.basename(test_source, '.elna')
+ test_basename = File.basename(test_source, '.*')
test_object = object_directory + test_basename.ext('.o')
- file test_object => [test_source, object_directory] do
- sh compiler, '--output', test_object.to_path, test_source
+ file test_object => [test_source, object_directory] do |task|
+ case File.extname(task.prerequisites.first)
+ when '.s'
+ sh AS, '-mno-relax', '-o', task.name, task.prerequisites.first
+ when '.elna'
+ sh compiler, '--output', task.name, task.prerequisites.first
+ else
+ raise "Unknown source file extension #{task.prerequisites.first}"
+ end
end
test_executable = executable_directory + test_basename
- file test_executable => [test_object, executable_directory] do
- sh LINKER, '-o', test_executable.to_path, test_object.to_path
+ file test_executable => [test_object, executable_directory, builtin] do |task|
+ objects = task.prerequisites.filter { |prerequisite| File.file? prerequisite }
+
+ sh LINKER, '-o', test_executable.to_path, *objects
end
expectation_name = test_basename.ext '.txt'
source_expectation = "tests/expectations/#{expectation_name}"