Skip to content

Commit 129a4b7

Browse files
authored
Updated bootstrap and buildexe (#181)
1 parent d41c6cb commit 129a4b7

36 files changed

+1408
-418
lines changed

bootstrap/config/toolchain_linux_gcc.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[toolchain.custom]
1+
[toolchain.host]
22
build = true
33
test = true
44

bootstrap/config/toolchain_win_gcc.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
[toolchain.custom]
1+
[toolchain.host]
22
build = true
33
test = true
44

5-
id = "gcc"
5+
id = "mingw"
66
name = "x86_64-w64-mingw32"
77
asm_compiler = "as"
88
c_compiler = "gcc"

bootstrap/config/toolchain_win_msvc.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[toolchain.custom]
1+
[toolchain.host]
22
build = true
33
test = true
44

bootstrap/include/bootstrap/build_tpl.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@
2121

2222
namespace buildcc {
2323

24-
void tpl_cb(BaseTarget &target);
24+
struct TplConfig {
25+
TplConfig() = default;
26+
27+
OsId os_id{OsId::Linux};
28+
};
29+
30+
void tpl_cb(BaseTarget &target, const TplConfig &config = TplConfig());
2531

2632
} // namespace buildcc
2733

bootstrap/main.buildcc.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@ static void hybrid_simple_example_cb(BaseTarget &target,
3535
int main(int argc, char **argv) {
3636
Args args;
3737
ArgToolchain custom_toolchain_arg;
38-
args.AddToolchain("custom", "Host Toolchain", custom_toolchain_arg);
38+
args.AddToolchain("host", "Host Toolchain", custom_toolchain_arg);
3939
args.Parse(argc, argv);
4040

4141
Register reg(args);
4242
reg.Clean(clean_cb);
4343

4444
BaseToolchain toolchain = custom_toolchain_arg.ConstructToolchain();
4545

46-
PersistentStorage storage;
4746
BuildBuildCC buildcc(
4847
reg, toolchain,
4948
TargetEnv(env::get_project_root_dir(), env::get_project_build_dir()));

bootstrap/src/build_buildcc.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ void buildcc_cb(BaseTarget &target, const BaseGenerator &schema_gen,
5454
target.GlobHeaders("lib/env/include/env");
5555

5656
// TOOLCHAIN
57+
target.GlobSources("lib/toolchain/src/api");
5758
target.AddIncludeDir("lib/toolchain/include");
5859
target.GlobHeaders("lib/toolchain/include/toolchain");
60+
target.GlobHeaders("lib/toolchain/include/toolchain/api");
5961

6062
// TARGET
6163
target.GlobSources("lib/target/src/common");
@@ -238,7 +240,9 @@ void BuildBuildCC::Setup(const ArgToolchainState &state) {
238240
"tiny-process-library",
239241
env_.GetTargetBuildDir()));
240242
reg_.CallbackIf(state, global_flags_cb, tpl_lib, toolchain_);
241-
reg_.Build(state, tpl_cb, tpl_lib);
243+
TplConfig tpl_config;
244+
tpl_config.os_id = get_host_os();
245+
reg_.Build(state, tpl_cb, tpl_lib, tpl_config);
242246

243247
// TODO, Make this a generic selection between StaticTarget and
244248
// DynamicTarget

bootstrap/src/build_cli11.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ namespace buildcc {
2121
void cli11_ho_cb(TargetInfo &info) {
2222
info.AddIncludeDir("include");
2323
info.GlobHeaders("include/CLI");
24-
// TODO, Add PCH
2524
}
2625

2726
} // namespace buildcc

bootstrap/src/build_flatbuffers.cpp

+16-31
Original file line numberDiff line numberDiff line change
@@ -82,45 +82,30 @@ void build_flatc_exe_cb(BaseTarget &target) {
8282
kFlatcPreprocessorFlags.cend(),
8383
[&](const auto &f) { target.AddPreprocessorFlag(f); });
8484

85-
if constexpr (env::is_win()) {
86-
switch (target.GetToolchain().GetId()) {
87-
case ToolchainId::Gcc:
88-
case ToolchainId::MinGW:
89-
std::for_each(kFlatcGccCppCompileFlags.cbegin(),
90-
kFlatcGccCppCompileFlags.cend(),
91-
[&](const auto &f) { target.AddCppCompileFlag(f); });
92-
break;
93-
case ToolchainId::Msvc:
94-
std::for_each(kFlatcMsvcCppCompileFlags.cbegin(),
95-
kFlatcMsvcCppCompileFlags.cend(),
96-
[&](const auto &f) { target.AddCppCompileFlag(f); });
97-
break;
98-
default:
99-
break;
100-
}
85+
switch (target.GetToolchain().GetId()) {
86+
case ToolchainId::Gcc:
87+
case ToolchainId::MinGW:
88+
std::for_each(kFlatcGccCppCompileFlags.cbegin(),
89+
kFlatcGccCppCompileFlags.cend(),
90+
[&](const auto &f) { target.AddCppCompileFlag(f); });
91+
break;
92+
case ToolchainId::Msvc:
93+
std::for_each(kFlatcMsvcCppCompileFlags.cbegin(),
94+
kFlatcMsvcCppCompileFlags.cend(),
95+
[&](const auto &f) { target.AddCppCompileFlag(f); });
96+
break;
97+
case ToolchainId::Clang:
98+
break;
99+
default:
100+
break;
101101
}
102102

103-
if constexpr (env::is_linux()) {
104-
switch (target.GetToolchain().GetId()) {
105-
case ToolchainId::Gcc:
106-
std::for_each(kFlatcGccCppCompileFlags.cbegin(),
107-
kFlatcGccCppCompileFlags.cend(),
108-
[&](const auto &f) { target.AddCppCompileFlag(f); });
109-
break;
110-
default:
111-
break;
112-
}
113-
}
114-
115-
// TODO, Add PCH
116-
117103
target.Build();
118104
}
119105

120106
void flatbuffers_ho_cb(TargetInfo &info) {
121107
info.AddIncludeDir("include");
122108
info.GlobHeaders("include/flatbuffers");
123-
// TODO, Add PCH
124109
}
125110

126111
} // namespace buildcc

bootstrap/src/build_taskflow.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ void taskflow_ho_cb(TargetInfo &info) {
2323
info.GlobHeaders("taskflow");
2424
info.GlobHeaders("taskflow/core");
2525
info.GlobHeaders("taskflow/core/algorithm");
26-
// TODO, Track more header files
26+
info.GlobHeaders("taskflow/cuda");
27+
info.GlobHeaders("taskflow/cuda/cuda_algorithm");
28+
info.GlobHeaders("taskflow/dsl");
29+
info.GlobHeaders("taskflow/sycl");
30+
info.GlobHeaders("taskflow/sycl/sycl_algorithm");
31+
info.GlobHeaders("taskflow/utility");
2732
}
2833

2934
} // namespace buildcc

bootstrap/src/build_tpl.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,22 @@
1818

1919
namespace buildcc {
2020

21-
void tpl_cb(BaseTarget &target) {
21+
void tpl_cb(BaseTarget &target, const TplConfig &config) {
2222
target.AddSource("process.cpp");
2323
target.AddIncludeDir("");
2424
target.AddHeader("process.hpp");
2525

26-
if constexpr (env::is_win()) {
26+
switch (config.os_id) {
27+
case OsId::Win:
2728
target.AddSource("process_win.cpp");
28-
} else {
29+
break;
30+
case OsId::Linux:
31+
case OsId::Unix:
32+
case OsId::Mac:
2933
target.AddSource("process_unix.cpp");
34+
break;
35+
default:
36+
break;
3037
}
3138

3239
target.Build();

buildcc/lib/args/include/args/persistent_storage.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class PersistentStorage {
4848
metadata.ptr = (void *)ptr;
4949
metadata.typeid_name = typeid(T).name();
5050
metadata.destructor = [this, identifier, ptr]() {
51-
env::log_info("Cleaning", identifier);
51+
env::log_trace("Cleaning", identifier);
5252
Remove<T>(ptr);
5353
};
5454
ptrs_.emplace(identifier, metadata);

buildcc/lib/args/src/args.cpp

+14-15
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ const std::unordered_map<const char *, buildcc::env::LogLevel> kLogLevelMap{
7777

7878
const std::unordered_map<const char *, buildcc::base::Toolchain::Id>
7979
kToolchainIdMap{
80-
{"gcc", buildcc::base::Toolchain::Id::Gcc},
81-
{"msvc", buildcc::base::Toolchain::Id::Msvc},
82-
{"clang", buildcc::base::Toolchain::Id::Clang},
83-
{"custom", buildcc::base::Toolchain::Id::Custom},
84-
{"undefined", buildcc::base::Toolchain::Id::Undefined},
80+
{"gcc", buildcc::ToolchainId::Gcc},
81+
{"msvc", buildcc::ToolchainId::Msvc},
82+
{"mingw", buildcc::ToolchainId::MinGW},
83+
{"clang", buildcc::ToolchainId::Clang},
84+
{"custom", buildcc::ToolchainId::Custom},
85+
{"undefined", buildcc::ToolchainId::Undefined},
8586
};
8687

8788
} // namespace
@@ -136,19 +137,17 @@ void Args::RootArgs() {
136137
->expected(kMinFiles, kMaxFiles);
137138

138139
// Root flags
140+
auto *root_group = app_.add_option_group(kRootGroup);
139141

140-
app_.add_flag(kCleanParam, clean_, kCleanDesc)->group(kRootGroup);
141-
app_.add_option(kLoglevelParam, loglevel_, kLoglevelDesc)
142-
->transform(CLI::CheckedTransformer(kLogLevelMap, CLI::ignore_case))
143-
->group(kRootGroup);
142+
root_group->add_flag(kCleanParam, clean_, kCleanDesc);
143+
root_group->add_option(kLoglevelParam, loglevel_, kLoglevelDesc)
144+
->transform(CLI::CheckedTransformer(kLogLevelMap, CLI::ignore_case));
144145

145146
// Dir flags
146-
app_.add_option(kRootDirParam, project_root_dir_, kRootDirDesc)
147-
->required()
148-
->group(kRootGroup);
149-
app_.add_option(kBuildDirParam, project_build_dir_, kBuildDirDesc)
150-
->required()
151-
->group(kRootGroup);
147+
root_group->add_option(kRootDirParam, project_root_dir_, kRootDirDesc)
148+
->required();
149+
root_group->add_option(kBuildDirParam, project_build_dir_, kBuildDirDesc)
150+
->required();
152151
}
153152

154153
} // namespace buildcc

buildcc/lib/env/include/env/host_os.h

+33
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,37 @@ inline constexpr bool is_unix() {
5656

5757
} // namespace buildcc::env
5858

59+
namespace buildcc {
60+
61+
enum class OsId {
62+
Linux,
63+
Win,
64+
Mac,
65+
Unix,
66+
Undefined,
67+
};
68+
69+
inline constexpr OsId get_host_os() {
70+
OsId os_id = OsId::Undefined;
71+
if constexpr (env::is_linux()) {
72+
os_id = OsId::Linux;
73+
}
74+
75+
if constexpr (env::is_unix()) {
76+
os_id = OsId::Unix;
77+
}
78+
79+
if constexpr (env::is_win()) {
80+
os_id = OsId::Win;
81+
}
82+
83+
if constexpr (env::is_mac()) {
84+
os_id = OsId::Mac;
85+
}
86+
87+
return os_id;
88+
}
89+
90+
} // namespace buildcc
91+
5992
#endif

buildcc/lib/target/src/api/include_api.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ void IncludeApi<T>::GlobHeadersAbsolute(const fs::path &absolute_path) {
5454

5555
for (const auto &p : fs::directory_iterator(absolute_path)) {
5656
if (t.config_.IsValidHeader(p.path())) {
57-
env::log_trace(__FUNCTION__, fmt::format("Added header {}", p.path()));
5857
AddHeaderAbsolute(p.path());
5958
}
6059
}

buildcc/lib/target/src/target/build.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ void Target::Build() {
8686
{kLinkFlags, internal::aggregate(GetLinkFlags())},
8787

8888
// Toolchain executables here
89-
{kAsmCompiler, toolchain_.GetAsmCompiler()},
90-
{kCCompiler, toolchain_.GetCCompiler()},
91-
{kCppCompiler, toolchain_.GetCppCompiler()},
92-
{kArchiver, toolchain_.GetArchiver()},
93-
{kLinker, toolchain_.GetLinker()},
89+
{kAsmCompiler, fmt::format("{}", fs::path(toolchain_.GetAsmCompiler()))},
90+
{kCCompiler, fmt::format("{}", fs::path(toolchain_.GetCCompiler()))},
91+
{kCppCompiler, fmt::format("{}", fs::path(toolchain_.GetCppCompiler()))},
92+
{kArchiver, fmt::format("{}", fs::path(toolchain_.GetArchiver()))},
93+
{kLinker, fmt::format("{}", fs::path(toolchain_.GetLinker()))},
9494
});
9595

9696
// Load the serialized file

buildcc/lib/target/src/target/friend/compile_object.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void CompileObject::CacheCompileCommands() {
5050
const std::string selected_aggregated_compile_flags =
5151
target_.SelectCompileFlags(type).value_or("");
5252
const std::string selected_compiler =
53-
target_.SelectCompiler(type).value_or("");
53+
fmt::format("{}", fs::path(target_.SelectCompiler(type).value_or("")));
5454
object_iter.second.command = target_.command_.Construct(
5555
target_.GetConfig().compile_command,
5656
{

buildcc/lib/target/src/target/friend/compile_pch.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,10 @@ fs::path CompilePch::ConstructObjectPath() const {
136136
}
137137

138138
std::string CompilePch::ConstructCompileCommand() const {
139-
const std::string compiler = target_.GetState().contains_cpp
140-
? target_.GetToolchain().GetCppCompiler()
141-
: target_.GetToolchain().GetCCompiler();
139+
std::string compiler = target_.GetState().contains_cpp
140+
? target_.GetToolchain().GetCppCompiler()
141+
: target_.GetToolchain().GetCCompiler();
142+
compiler = fmt::format("{}", fs::path(compiler));
142143
const TargetFileExt file_ext_type =
143144
target_.GetState().contains_cpp ? TargetFileExt::Cpp : TargetFileExt::C;
144145
const std::string compile_flags =

0 commit comments

Comments
 (0)