diff options
Diffstat (limited to 'rakelib/tester.rake')
| -rw-r--r-- | rakelib/tester.rake | 27 |
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}" |
