Skip to content

Commit a9a6194

Browse files
authored
Toolchain ID (#63)
Added Toolchain Id to identify Toolchain family
1 parent d969a08 commit a9a6194

26 files changed

+67
-51
lines changed

buildcc/lib/target/test/target/test_base_target.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ TEST_GROUP(TargetBaseTestGroup)
1515
{
1616
};
1717
// clang-format on
18-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
18+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
19+
"gcc", "as", "gcc", "g++", "ar",
1920
"ld");
2021

2122
TEST(TargetBaseTestGroup, InvalidTargetType) {

buildcc/lib/target/test/target/test_target_c_compile_flags.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ TEST_GROUP(TargetTestCCompileFlagsGroup)
2727
};
2828
// clang-format on
2929

30-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
30+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
31+
"gcc", "as", "gcc", "g++", "ar",
3132
"ld");
33+
3234
static const fs::path target_source_intermediate_path =
3335
fs::path(BUILD_TARGET_C_COMPILE_INTERMEDIATE_DIR) / gcc.GetName();
3436

buildcc/lib/target/test/target/test_target_cpp_compile_flags.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ TEST_GROUP(TargetTestCppCompileFlagsGroup)
2727
};
2828
// clang-format on
2929

30-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
30+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
31+
"gcc", "as", "gcc", "g++", "ar",
3132
"ld");
33+
3234
static const fs::path target_source_intermediate_path =
3335
fs::path(BUILD_TARGET_CPP_COMPILE_INTERMEDIATE_DIR) / gcc.GetName();
3436

buildcc/lib/target/test/target/test_target_external_lib.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ TEST_GROUP(TargetTestExternalLib)
2828
};
2929
// clang-format on
3030

31-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
31+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
32+
"gcc", "as", "gcc", "g++", "ar",
3233
"ld");
34+
3335
static const fs::path intermediate_path =
3436
fs::path(BUILD_TARGET_EXTERNAL_LIB_INTERMEDIATE_DIR) / gcc.GetName();
3537

buildcc/lib/target/test/target/test_target_include_dir.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ TEST_GROUP(TargetTestIncludeDirGroup)
2424
};
2525
// clang-format on
2626

27-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
27+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
28+
"gcc", "as", "gcc", "g++", "ar",
2829
"ld");
30+
2931
static const fs::path target_include_dir_intermediate_path =
3032
fs::path(BUILD_TARGET_INCLUDE_DIR_INTERMEDIATE_DIR) / gcc.GetName();
3133

buildcc/lib/target/test/target/test_target_lib_dep.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ TEST_GROUP(TargetTestLibDep)
2929
};
3030
// clang-format on
3131

32-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
32+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
33+
"gcc", "as", "gcc", "g++", "ar",
3334
"ld");
35+
3436
static const fs::path intermediate_path =
3537
fs::path(BUILD_TARGET_LIB_DEP_INTERMEDIATE_DIR) / gcc.GetName();
3638

buildcc/lib/target/test/target/test_target_link_flags.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ TEST_GROUP(TargetTestLinkFlagsGroup)
2727
};
2828
// clang-format on
2929

30-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
30+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
31+
"gcc", "as", "gcc", "g++", "ar",
3132
"ld");
33+
3234
static const fs::path target_source_intermediate_path =
3335
fs::path(BUILD_TARGET_LINK_INTERMEDIATE_DIR) / gcc.GetName();
3436

buildcc/lib/target/test/target/test_target_preprocessor_flags.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ TEST_GROUP(TargetTestPreprocessorFlagGroup)
2727
};
2828
// clang-format on
2929

30-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
30+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
31+
"gcc", "as", "gcc", "g++", "ar",
3132
"ld");
33+
3234
static const fs::path target_source_intermediate_path =
3335
fs::path(BUILD_TARGET_PREPROCESSOR_INTERMEDIATE_DIR) / gcc.GetName();
3436

buildcc/lib/target/test/target/test_target_source.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ TEST_GROUP(TargetTestSourceGroup)
2424
};
2525
// clang-format on
2626

27-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
27+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
28+
"gcc", "as", "gcc", "g++", "ar",
2829
"ld");
30+
2931
static const fs::path target_source_intermediate_path =
3032
fs::path(BUILD_TARGET_SOURCE_INTERMEDIATE_DIR) / gcc.GetName();
3133

buildcc/lib/target/test/target/test_target_source_out_of_root.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ TEST_GROUP(TargetTestSourceOutOfRootGroup)
2525
};
2626
// clang-format on
2727

28-
static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar",
28+
static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc,
29+
"gcc", "as", "gcc", "g++", "ar",
2930
"ld");
31+
3032
static const fs::path target_source_intermediate_path =
3133
fs::path(BUILD_TARGET_SOURCE_OUT_OF_ROOT_INTERMEDIATE_DIR) / gcc.GetName();
3234

buildcc/lib/toolchain/CMakeLists.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
# Toolchain lib
22
m_clangtidy("toolchain")
3-
add_library(toolchain
4-
toolchain.cpp
3+
add_library(toolchain INTERFACE
54
toolchain.h
65
)
7-
target_include_directories(toolchain PUBLIC
6+
target_include_directories(toolchain INTERFACE
87
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
98
$<INSTALL_INTERFACE:${BUILDCC_INSTALL_HEADER_PREFIX}>
109
)
11-
target_compile_options(toolchain PRIVATE ${BUILD_COMPILE_FLAGS})
12-
target_link_options(toolchain PRIVATE ${BUILD_LINK_FLAGS})
1310

1411
# TODO, Add Mocks here if required
1512

buildcc/lib/toolchain/toolchain.cpp

Lines changed: 0 additions & 17 deletions
This file was deleted.

buildcc/lib/toolchain/toolchain.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,20 @@ namespace buildcc::base {
2626
// Base toolchain class
2727
class Toolchain {
2828
public:
29-
explicit Toolchain(std::string_view name, std::string_view asm_compiler,
30-
std::string_view c_compiler, std::string_view cpp_compiler,
31-
std::string_view archiver, std::string_view linker)
32-
: name_(name), asm_compiler_(asm_compiler), c_compiler_(c_compiler),
33-
cpp_compiler_(cpp_compiler), archiver_(archiver), linker_(linker) {}
29+
enum class Id {
30+
Gcc = 0,
31+
Msvc,
32+
Clang,
33+
};
34+
35+
public:
36+
explicit Toolchain(Id id, std::string_view name,
37+
std::string_view asm_compiler, std::string_view c_compiler,
38+
std::string_view cpp_compiler, std::string_view archiver,
39+
std::string_view linker)
40+
: id_(id), name_(name), asm_compiler_(asm_compiler),
41+
c_compiler_(c_compiler), cpp_compiler_(cpp_compiler),
42+
archiver_(archiver), linker_(linker) {}
3443

3544
Toolchain(const Toolchain &toolchain) = delete;
3645

@@ -43,6 +52,7 @@ class Toolchain {
4352
const std::string &GetLinker() const { return linker_; }
4453

4554
private:
55+
Id id_;
4656
std::string name_;
4757
std::string asm_compiler_;
4858
std::string c_compiler_;

buildcc/toolchains/toolchain_gcc.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ namespace buildcc {
2323

2424
class Toolchain_gcc : public base::Toolchain {
2525
public:
26-
Toolchain_gcc() : Toolchain("gcc", "as", "gcc", "g++", "ar", "ld") {}
26+
Toolchain_gcc()
27+
: Toolchain(Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld") {}
2728
Toolchain_gcc(const Toolchain_gcc &gcc) = delete;
2829
};
2930

buildcc/toolchains/toolchain_msvc.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ namespace buildcc {
2323

2424
class Toolchain_msvc : public base::Toolchain {
2525
public:
26-
Toolchain_msvc() : Toolchain("msvc", "cl", "cl", "cl", "lib", "link") {}
26+
Toolchain_msvc()
27+
: Toolchain(Toolchain::Id::Msvc, "msvc", "cl", "cl", "cl", "lib",
28+
"link") {}
2729
Toolchain_msvc(const Toolchain_msvc &gcc) = delete;
2830
};
2931

example/gcc/AfterInstall/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ int main(void) {
1616
env::set_log_level(env::LogLevel::Trace);
1717

1818
// Stored as a const & in target
19-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
19+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
20+
"ld");
2021

2122
// CppTarget
2223
ExecutableTarget_gcc cpptarget("CppFlags.exe", gcc, "files");

example/gcc/DynamicLib/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ int main(void) {
2424
env::init(BUILD_ROOT, BUILD_INTERMEDIATE_DIR);
2525
env::set_log_level(env::LogLevel::Trace);
2626

27-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
27+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
28+
"ld");
2829

2930
// Linux GCC
3031
#if OS == LINUX

example/gcc/Flags/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ int main(void) {
1616
env::set_log_level(env::LogLevel::Trace);
1717

1818
// Stored as a const & in target
19-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
19+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
20+
"ld");
2021

2122
// CppTarget
2223
ExecutableTarget_gcc cpptarget("CppFlags.exe", gcc, "files");

example/gcc/IncludeDir/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ int main(void) {
1616
env::set_log_level(env::LogLevel::Trace);
1717

1818
// Stored as const & in target
19-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
19+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
20+
"ld");
2021

2122
ExecutableTarget_gcc target("IncludeDir.exe", gcc, "files");
2223
target.AddSource("main.cpp", "src");

example/gcc/Plugins/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ int main(void) {
1818
env::set_log_level(env::LogLevel::Trace);
1919

2020
// CppTarget
21-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
21+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
22+
"ld");
2223
ExecutableTarget_gcc cppflags("CppFlags.exe", gcc, "files");
2324

2425
cppflags.AddSource("main.cpp", "src");

example/gcc/Simple/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ int main(void) {
1616
env::set_log_level(env::LogLevel::Trace);
1717

1818
// Stored as const & in target
19-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
19+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
20+
"ld");
2021

2122
ExecutableTarget_gcc target("Simple.exe", gcc, "");
2223
target.AddSource("main.cpp");

example/gcc/StaticLib/build.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ int main(void) {
1515
env::init(BUILD_ROOT, BUILD_INTERMEDIATE_DIR);
1616
env::set_log_level(env::LogLevel::Trace);
1717

18-
base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld");
18+
base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar",
19+
"ld");
1920

2021
StaticTarget_gcc randomLib("libran.a", gcc, "files");
2122
randomLib.AddSource("src/random.cpp");

example/hybrid/custom_target/build.main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ int main(int argc, char **argv) {
8585
reg.Build(args.GetMsvcToolchain(), m_foolib, mfoolib_build_cb);
8686

8787
// * NOTE, This is how we add our custom toolchain
88-
base::Toolchain clang("clang_gnu", "llvm-as", "clang", "clang++", "llvm-ar",
89-
"ld");
88+
base::Toolchain clang(base::Toolchain::Id::Clang, "clang_gnu", "llvm-as",
89+
"clang", "clang++", "llvm-ar", "ld");
9090
// * NOTE, Custom clang target added above
9191
ExecutableTarget_clang c_foolib("CFoolib.exe", clang, "");
9292
reg.Build(clang_gnu, c_foolib, cfoolib_build_cb);

example/msvc/DynamicLib/build.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ int main(void) {
1717
env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER);
1818
env::set_log_level(env::LogLevel::Debug);
1919

20-
// base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link");
2120
Toolchain_msvc msvc;
2221

2322
DynamicTarget_msvc dynamictarget("librandom.lib", msvc, "");

example/msvc/Executable/build.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ int main(void) {
1717
env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER);
1818
env::set_log_level(env::LogLevel::Trace);
1919

20-
// base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link");
2120
Toolchain_msvc msvc;
2221

2322
ExecutableTarget_msvc target_msvc("Simple.exe", msvc, "");

example/msvc/StaticLib/build.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ int main(void) {
1717
env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER);
1818
env::set_log_level(env::LogLevel::Trace);
1919

20-
// base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link");
2120
Toolchain_msvc msvc;
2221

2322
StaticTarget_msvc statictarget_msvc("librandom.lib", msvc, "");

0 commit comments

Comments
 (0)