-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathToolchainTests.cpp
More file actions
119 lines (101 loc) · 4.07 KB
/
Copy pathToolchainTests.cpp
File metadata and controls
119 lines (101 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <vix/engine/Toolchain.hpp>
#include "EnvGuard.hpp"
#include <cassert>
#include <filesystem>
#include <fstream>
#include <string>
#include <vector>
namespace
{
namespace fs = std::filesystem;
using namespace vix::engine;
fs::path make_temp_dir()
{
fs::path dir = fs::temp_directory_path() / "vix-engine-toolchain-tests";
std::error_code ec;
fs::remove_all(dir, ec);
fs::create_directories(dir, ec);
assert(!ec);
return dir;
}
void make_executable(const fs::path &path)
{
std::ofstream out(path);
out << "#!/bin/sh\nexit 0\n";
out.close();
std::error_code ec;
fs::permissions(
path,
fs::perms::owner_exec |
fs::perms::owner_read |
fs::perms::owner_write |
fs::perms::group_exec |
fs::perms::group_read |
fs::perms::others_exec |
fs::perms::others_read,
fs::perm_options::replace,
ec);
assert(!ec);
}
}
int main()
{
using vix::engine::tests::EnvGuard;
assert(infer_processor_from_triple("aarch64-linux-gnu") == "aarch64");
assert(infer_processor_from_triple("arm-linux-gnueabihf") == "arm");
assert(infer_processor_from_triple("x86_64-linux-gnu") == "x86_64");
assert(infer_processor_from_triple("riscv64-linux-gnu") == "riscv64");
assert(infer_processor_from_triple("mips-linux-gnu") == "unknown");
const std::string withoutSysroot =
"# Auto-generated by Vix (vix build --target aarch64-linux-gnu)\n"
"set(CMAKE_SYSTEM_NAME Linux)\n"
"set(CMAKE_SYSTEM_PROCESSOR \"aarch64\")\n"
"\n"
"set(VIX_TARGET_TRIPLE \"aarch64-linux-gnu\" CACHE STRING \"Vix target triple\")\n"
"\n"
"set(CMAKE_C_COMPILER \"aarch64-linux-gnu-gcc\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_CXX_COMPILER \"aarch64-linux-gnu-g++\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_AR \"aarch64-linux-gnu-ar\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_RANLIB \"aarch64-linux-gnu-ranlib\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_STRIP \"aarch64-linux-gnu-strip\" CACHE FILEPATH \"\" FORCE)\n"
"\n"
"set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)\n";
assert(toolchain_contents_for_triple("aarch64-linux-gnu", "") == withoutSysroot);
const std::string withSysroot =
"# Auto-generated by Vix (vix build --target x86_64-linux-gnu)\n"
"set(CMAKE_SYSTEM_NAME Linux)\n"
"set(CMAKE_SYSTEM_PROCESSOR \"x86_64\")\n"
"\n"
"set(CMAKE_SYSROOT \"/opt/sys root\")\n"
"set(CMAKE_FIND_ROOT_PATH \"/opt/sys root\")\n"
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"
"set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\n"
"set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\n"
"\n"
"set(VIX_TARGET_TRIPLE \"x86_64-linux-gnu\" CACHE STRING \"Vix target triple\")\n"
"\n"
"set(CMAKE_C_COMPILER \"x86_64-linux-gnu-gcc\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_CXX_COMPILER \"x86_64-linux-gnu-g++\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_AR \"x86_64-linux-gnu-ar\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_RANLIB \"x86_64-linux-gnu-ranlib\" CACHE FILEPATH \"\" FORCE)\n"
"set(CMAKE_STRIP \"x86_64-linux-gnu-strip\" CACHE FILEPATH \"\" FORCE)\n"
"\n"
"set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)\n";
assert(toolchain_contents_for_triple("x86_64-linux-gnu", "/opt/sys root") == withSysroot);
EnvGuard path("PATH");
path.set("");
assert(detect_available_targets().empty());
const fs::path tools = make_temp_dir();
path.set(tools.string());
make_executable(tools / "x86_64-linux-gnu-gcc");
assert(detect_available_targets().empty());
make_executable(tools / "x86_64-linux-gnu-g++");
make_executable(tools / "riscv64-linux-gnu-gcc");
make_executable(tools / "riscv64-linux-gnu-g++");
const std::vector<std::string> targets = detect_available_targets();
assert((targets == std::vector<std::string>{
"x86_64-linux-gnu",
"riscv64-linux-gnu"}));
assert(detect_available_targets() == targets);
return 0;
}