Split result into symboltable and types
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
#include "elna/tester.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
#include <boost/process/env.hpp>
|
||||
|
||||
namespace elna
|
||||
{
|
||||
@ -88,6 +90,22 @@ namespace elna
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string find_object(const std::vector<std::filesystem::path>& environment, const std::string& object)
|
||||
{
|
||||
auto variable = std::find(environment.cbegin(), environment.cend(), object);
|
||||
|
||||
for (const auto& variable : environment)
|
||||
{
|
||||
auto full_path = variable / object;
|
||||
|
||||
if (std::filesystem::exists(full_path))
|
||||
{
|
||||
return full_path.native();
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
test_result build_test(boost::asio::io_context& context, const std::filesystem::directory_entry& test_entry)
|
||||
{
|
||||
const std::filesystem::path test_filename = test_entry.path().filename();
|
||||
@ -108,18 +126,24 @@ namespace elna
|
||||
result.status = test_status::compile_failed;
|
||||
return result;
|
||||
}
|
||||
boost::process::v2::execute(boost::process::v2::process(
|
||||
context, "/opt/riscv/bin/riscv32-unknown-elf-ld",
|
||||
{
|
||||
"-o", test_binary.string(),
|
||||
"-L/opt/riscv/lib/gcc/riscv32-unknown-elf/13.2.0/",
|
||||
"-L/opt/riscv/riscv32-unknown-elf/lib",
|
||||
"/opt/riscv/riscv32-unknown-elf/lib/crt0.o",
|
||||
"/opt/riscv/lib/gcc/riscv32-unknown-elf/13.2.0/crtbegin.o",
|
||||
test_object.string(),
|
||||
"--start-group", "-lgcc", "-lc", "-lgloss", "--end-group",
|
||||
"/opt/riscv/lib/gcc/riscv32-unknown-elf/13.2.0/crtend.o"
|
||||
}
|
||||
std::vector<std::filesystem::path> environment;
|
||||
std::vector<std::string> linker_arguments = { "-o", test_binary.string() };
|
||||
|
||||
for (const auto segment : boost::this_process::environment()["LIBRARY_PATH"].to_vector())
|
||||
{
|
||||
linker_arguments.push_back("-L" + segment);
|
||||
environment.push_back(std::filesystem::path(segment));
|
||||
}
|
||||
linker_arguments.push_back(find_object(environment, "crt0.o"));
|
||||
linker_arguments.push_back(find_object(environment, "crtbegin.o"));
|
||||
linker_arguments.push_back(test_object.string());
|
||||
linker_arguments.insert(linker_arguments.cend(),
|
||||
{ "--start-group", "-lgcc", "-lc", "-lgloss", "--end-group" });
|
||||
linker_arguments.push_back(find_object(environment, "crtend.o"));
|
||||
|
||||
boost::process::v2::execute(boost::process::v2::process(context,
|
||||
boost::process::search_path("ld"),
|
||||
linker_arguments
|
||||
));
|
||||
return test_result{};
|
||||
}
|
||||
|
Reference in New Issue
Block a user