From c602b1efc13fbb31e8f972954e56013799d80371 Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 17:36:49 -0700 Subject: [PATCH 1/7] Update toolchain.h --- buildcc/lib/toolchain/toolchain.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/buildcc/lib/toolchain/toolchain.h b/buildcc/lib/toolchain/toolchain.h index 377a3714..c2263132 100644 --- a/buildcc/lib/toolchain/toolchain.h +++ b/buildcc/lib/toolchain/toolchain.h @@ -26,11 +26,20 @@ namespace buildcc::base { // Base toolchain class class Toolchain { public: - explicit Toolchain(std::string_view name, std::string_view asm_compiler, - std::string_view c_compiler, std::string_view cpp_compiler, - std::string_view archiver, std::string_view linker) - : name_(name), asm_compiler_(asm_compiler), c_compiler_(c_compiler), - cpp_compiler_(cpp_compiler), archiver_(archiver), linker_(linker) {} + enum class Id { + Gcc = 0, + Msvc, + Clang, + }; + +public: + explicit Toolchain(Id id, std::string_view name, + std::string_view asm_compiler, std::string_view c_compiler, + std::string_view cpp_compiler, std::string_view archiver, + std::string_view linker) + : id_(id), name_(name), asm_compiler_(asm_compiler), + c_compiler_(c_compiler), cpp_compiler_(cpp_compiler), + archiver_(archiver), linker_(linker) {} Toolchain(const Toolchain &toolchain) = delete; @@ -43,6 +52,7 @@ class Toolchain { const std::string &GetLinker() const { return linker_; } private: + Id id_; std::string name_; std::string asm_compiler_; std::string c_compiler_; From cca9537f447e6d1e534029131c64cffe8f3b6ebc Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 17:39:48 -0700 Subject: [PATCH 2/7] Updated specialized toolchains --- buildcc/toolchains/toolchain_gcc.h | 3 ++- buildcc/toolchains/toolchain_msvc.h | 4 +++- example/hybrid/custom_target/build.main.cpp | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/buildcc/toolchains/toolchain_gcc.h b/buildcc/toolchains/toolchain_gcc.h index d514d41e..25247171 100644 --- a/buildcc/toolchains/toolchain_gcc.h +++ b/buildcc/toolchains/toolchain_gcc.h @@ -23,7 +23,8 @@ namespace buildcc { class Toolchain_gcc : public base::Toolchain { public: - Toolchain_gcc() : Toolchain("gcc", "as", "gcc", "g++", "ar", "ld") {} + Toolchain_gcc() + : Toolchain(Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld") {} Toolchain_gcc(const Toolchain_gcc &gcc) = delete; }; diff --git a/buildcc/toolchains/toolchain_msvc.h b/buildcc/toolchains/toolchain_msvc.h index 6c3496dc..9dcc7ca8 100644 --- a/buildcc/toolchains/toolchain_msvc.h +++ b/buildcc/toolchains/toolchain_msvc.h @@ -23,7 +23,9 @@ namespace buildcc { class Toolchain_msvc : public base::Toolchain { public: - Toolchain_msvc() : Toolchain("msvc", "cl", "cl", "cl", "lib", "link") {} + Toolchain_msvc() + : Toolchain(Toolchain::Id::Msvc, "msvc", "cl", "cl", "cl", "lib", + "link") {} Toolchain_msvc(const Toolchain_msvc &gcc) = delete; }; diff --git a/example/hybrid/custom_target/build.main.cpp b/example/hybrid/custom_target/build.main.cpp index 943f546a..b33bad36 100644 --- a/example/hybrid/custom_target/build.main.cpp +++ b/example/hybrid/custom_target/build.main.cpp @@ -85,8 +85,8 @@ int main(int argc, char **argv) { reg.Build(args.GetMsvcToolchain(), m_foolib, mfoolib_build_cb); // * NOTE, This is how we add our custom toolchain - base::Toolchain clang("clang_gnu", "llvm-as", "clang", "clang++", "llvm-ar", - "ld"); + base::Toolchain clang(base::Toolchain::Id::Clang, "clang_gnu", "llvm-as", + "clang", "clang++", "llvm-ar", "ld"); // * NOTE, Custom clang target added above ExecutableTarget_clang c_foolib("CFoolib.exe", clang, ""); reg.Build(clang_gnu, c_foolib, cfoolib_build_cb); From 5659420bfb03d10a9fd77b90aa70be90b7bb8df9 Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 18:06:31 -0700 Subject: [PATCH 3/7] Updated toolchain to the INTERFACE library --- buildcc/lib/toolchain/CMakeLists.txt | 7 ++----- buildcc/lib/toolchain/toolchain.cpp | 17 ----------------- 2 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 buildcc/lib/toolchain/toolchain.cpp diff --git a/buildcc/lib/toolchain/CMakeLists.txt b/buildcc/lib/toolchain/CMakeLists.txt index c7a12a6e..5c8c1efb 100644 --- a/buildcc/lib/toolchain/CMakeLists.txt +++ b/buildcc/lib/toolchain/CMakeLists.txt @@ -1,15 +1,12 @@ # Toolchain lib m_clangtidy("toolchain") -add_library(toolchain - toolchain.cpp +add_library(toolchain INTERFACE toolchain.h ) -target_include_directories(toolchain PUBLIC +target_include_directories(toolchain INTERFACE $ $ ) -target_compile_options(toolchain PRIVATE ${BUILD_COMPILE_FLAGS}) -target_link_options(toolchain PRIVATE ${BUILD_LINK_FLAGS}) # TODO, Add Mocks here if required diff --git a/buildcc/lib/toolchain/toolchain.cpp b/buildcc/lib/toolchain/toolchain.cpp deleted file mode 100644 index 1b982d75..00000000 --- a/buildcc/lib/toolchain/toolchain.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2021 Niket Naidu. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "toolchain.h" From 811655eead21892c66529b7a0a8acb2a2a925c8b Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 18:32:14 -0700 Subject: [PATCH 4/7] Updated low level gcc examples --- example/gcc/DynamicLib/build.cpp | 3 ++- example/gcc/Flags/build.cpp | 3 ++- example/gcc/IncludeDir/build.cpp | 3 ++- example/gcc/Plugins/build.cpp | 3 ++- example/gcc/Simple/build.cpp | 3 ++- example/gcc/StaticLib/build.cpp | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/example/gcc/DynamicLib/build.cpp b/example/gcc/DynamicLib/build.cpp index dcc59e6b..3f2829c6 100644 --- a/example/gcc/DynamicLib/build.cpp +++ b/example/gcc/DynamicLib/build.cpp @@ -24,7 +24,8 @@ int main(void) { env::init(BUILD_ROOT, BUILD_INTERMEDIATE_DIR); env::set_log_level(env::LogLevel::Trace); - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); // Linux GCC #if OS == LINUX diff --git a/example/gcc/Flags/build.cpp b/example/gcc/Flags/build.cpp index 8428f59e..27c7e8c3 100644 --- a/example/gcc/Flags/build.cpp +++ b/example/gcc/Flags/build.cpp @@ -16,7 +16,8 @@ int main(void) { env::set_log_level(env::LogLevel::Trace); // Stored as a const & in target - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); // CppTarget ExecutableTarget_gcc cpptarget("CppFlags.exe", gcc, "files"); diff --git a/example/gcc/IncludeDir/build.cpp b/example/gcc/IncludeDir/build.cpp index 027f7b6f..1ee76259 100644 --- a/example/gcc/IncludeDir/build.cpp +++ b/example/gcc/IncludeDir/build.cpp @@ -16,7 +16,8 @@ int main(void) { env::set_log_level(env::LogLevel::Trace); // Stored as const & in target - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); ExecutableTarget_gcc target("IncludeDir.exe", gcc, "files"); target.AddSource("main.cpp", "src"); diff --git a/example/gcc/Plugins/build.cpp b/example/gcc/Plugins/build.cpp index 5757174a..22b69c8d 100644 --- a/example/gcc/Plugins/build.cpp +++ b/example/gcc/Plugins/build.cpp @@ -18,7 +18,8 @@ int main(void) { env::set_log_level(env::LogLevel::Trace); // CppTarget - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); ExecutableTarget_gcc cppflags("CppFlags.exe", gcc, "files"); cppflags.AddSource("main.cpp", "src"); diff --git a/example/gcc/Simple/build.cpp b/example/gcc/Simple/build.cpp index 05570d5b..96d08ece 100644 --- a/example/gcc/Simple/build.cpp +++ b/example/gcc/Simple/build.cpp @@ -16,7 +16,8 @@ int main(void) { env::set_log_level(env::LogLevel::Trace); // Stored as const & in target - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); ExecutableTarget_gcc target("Simple.exe", gcc, ""); target.AddSource("main.cpp"); diff --git a/example/gcc/StaticLib/build.cpp b/example/gcc/StaticLib/build.cpp index 55f5c526..eb31deed 100644 --- a/example/gcc/StaticLib/build.cpp +++ b/example/gcc/StaticLib/build.cpp @@ -15,7 +15,8 @@ int main(void) { env::init(BUILD_ROOT, BUILD_INTERMEDIATE_DIR); env::set_log_level(env::LogLevel::Trace); - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); StaticTarget_gcc randomLib("libran.a", gcc, "files"); randomLib.AddSource("src/random.cpp"); From 217efb1b9354b3122f46610a085d942b692570e5 Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 19:10:02 -0700 Subject: [PATCH 5/7] Updated tests --- buildcc/lib/target/test/target/test_base_target.cpp | 3 ++- .../lib/target/test/target/test_target_c_compile_flags.cpp | 4 +++- .../lib/target/test/target/test_target_cpp_compile_flags.cpp | 4 +++- buildcc/lib/target/test/target/test_target_external_lib.cpp | 4 +++- buildcc/lib/target/test/target/test_target_include_dir.cpp | 4 +++- buildcc/lib/target/test/target/test_target_lib_dep.cpp | 4 +++- buildcc/lib/target/test/target/test_target_link_flags.cpp | 4 +++- .../lib/target/test/target/test_target_preprocessor_flags.cpp | 4 +++- buildcc/lib/target/test/target/test_target_source.cpp | 4 +++- .../lib/target/test/target/test_target_source_out_of_root.cpp | 4 +++- 10 files changed, 29 insertions(+), 10 deletions(-) diff --git a/buildcc/lib/target/test/target/test_base_target.cpp b/buildcc/lib/target/test/target/test_base_target.cpp index 01007393..e645580e 100644 --- a/buildcc/lib/target/test/target/test_base_target.cpp +++ b/buildcc/lib/target/test/target/test_base_target.cpp @@ -15,7 +15,8 @@ TEST_GROUP(TargetBaseTestGroup) { }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetBaseTestGroup, InvalidTargetType) { diff --git a/buildcc/lib/target/test/target/test_target_c_compile_flags.cpp b/buildcc/lib/target/test/target/test_target_c_compile_flags.cpp index 2e9bb227..7e900674 100644 --- a/buildcc/lib/target/test/target/test_target_c_compile_flags.cpp +++ b/buildcc/lib/target/test/target/test_target_c_compile_flags.cpp @@ -27,8 +27,10 @@ TEST_GROUP(TargetTestCCompileFlagsGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_C_COMPILE_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_cpp_compile_flags.cpp b/buildcc/lib/target/test/target/test_target_cpp_compile_flags.cpp index e2565149..2528a10e 100644 --- a/buildcc/lib/target/test/target/test_target_cpp_compile_flags.cpp +++ b/buildcc/lib/target/test/target/test_target_cpp_compile_flags.cpp @@ -27,8 +27,10 @@ TEST_GROUP(TargetTestCppCompileFlagsGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_CPP_COMPILE_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_external_lib.cpp b/buildcc/lib/target/test/target/test_target_external_lib.cpp index 3fa49bd4..6cd7e774 100644 --- a/buildcc/lib/target/test/target/test_target_external_lib.cpp +++ b/buildcc/lib/target/test/target/test_target_external_lib.cpp @@ -28,8 +28,10 @@ TEST_GROUP(TargetTestExternalLib) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path intermediate_path = fs::path(BUILD_TARGET_EXTERNAL_LIB_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_include_dir.cpp b/buildcc/lib/target/test/target/test_target_include_dir.cpp index 18b5a890..d25c7126 100644 --- a/buildcc/lib/target/test/target/test_target_include_dir.cpp +++ b/buildcc/lib/target/test/target/test_target_include_dir.cpp @@ -24,8 +24,10 @@ TEST_GROUP(TargetTestIncludeDirGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_include_dir_intermediate_path = fs::path(BUILD_TARGET_INCLUDE_DIR_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_lib_dep.cpp b/buildcc/lib/target/test/target/test_target_lib_dep.cpp index 7bc43f67..d43e3a0b 100644 --- a/buildcc/lib/target/test/target/test_target_lib_dep.cpp +++ b/buildcc/lib/target/test/target/test_target_lib_dep.cpp @@ -29,8 +29,10 @@ TEST_GROUP(TargetTestLibDep) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path intermediate_path = fs::path(BUILD_TARGET_LIB_DEP_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_link_flags.cpp b/buildcc/lib/target/test/target/test_target_link_flags.cpp index 66452422..430a901b 100644 --- a/buildcc/lib/target/test/target/test_target_link_flags.cpp +++ b/buildcc/lib/target/test/target/test_target_link_flags.cpp @@ -27,8 +27,10 @@ TEST_GROUP(TargetTestLinkFlagsGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_LINK_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_preprocessor_flags.cpp b/buildcc/lib/target/test/target/test_target_preprocessor_flags.cpp index 5a72a99b..fafb7689 100644 --- a/buildcc/lib/target/test/target/test_target_preprocessor_flags.cpp +++ b/buildcc/lib/target/test/target/test_target_preprocessor_flags.cpp @@ -27,8 +27,10 @@ TEST_GROUP(TargetTestPreprocessorFlagGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_PREPROCESSOR_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_source.cpp b/buildcc/lib/target/test/target/test_target_source.cpp index 7c84f07e..8c0e74ff 100644 --- a/buildcc/lib/target/test/target/test_target_source.cpp +++ b/buildcc/lib/target/test/target/test_target_source.cpp @@ -24,8 +24,10 @@ TEST_GROUP(TargetTestSourceGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_SOURCE_INTERMEDIATE_DIR) / gcc.GetName(); diff --git a/buildcc/lib/target/test/target/test_target_source_out_of_root.cpp b/buildcc/lib/target/test/target/test_target_source_out_of_root.cpp index e0413a1c..4b69a39b 100644 --- a/buildcc/lib/target/test/target/test_target_source_out_of_root.cpp +++ b/buildcc/lib/target/test/target/test_target_source_out_of_root.cpp @@ -25,8 +25,10 @@ TEST_GROUP(TargetTestSourceOutOfRootGroup) }; // clang-format on -static const buildcc::base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", +static const buildcc::base::Toolchain gcc(buildcc::base::Toolchain::Id::Gcc, + "gcc", "as", "gcc", "g++", "ar", "ld"); + static const fs::path target_source_intermediate_path = fs::path(BUILD_TARGET_SOURCE_OUT_OF_ROOT_INTERMEDIATE_DIR) / gcc.GetName(); From 099152ab8cffb0830cec7ee1a4f33313d960d1f8 Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 19:10:20 -0700 Subject: [PATCH 6/7] Updated msvc examples --- example/msvc/DynamicLib/build.cpp | 1 - example/msvc/Executable/build.cpp | 1 - example/msvc/StaticLib/build.cpp | 1 - 3 files changed, 3 deletions(-) diff --git a/example/msvc/DynamicLib/build.cpp b/example/msvc/DynamicLib/build.cpp index c7fc1816..7c7d6553 100644 --- a/example/msvc/DynamicLib/build.cpp +++ b/example/msvc/DynamicLib/build.cpp @@ -17,7 +17,6 @@ int main(void) { env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER); env::set_log_level(env::LogLevel::Debug); - // base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link"); Toolchain_msvc msvc; DynamicTarget_msvc dynamictarget("librandom.lib", msvc, ""); diff --git a/example/msvc/Executable/build.cpp b/example/msvc/Executable/build.cpp index 033a8ae7..ba8a6df5 100644 --- a/example/msvc/Executable/build.cpp +++ b/example/msvc/Executable/build.cpp @@ -17,7 +17,6 @@ int main(void) { env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER); env::set_log_level(env::LogLevel::Trace); - // base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link"); Toolchain_msvc msvc; ExecutableTarget_msvc target_msvc("Simple.exe", msvc, ""); diff --git a/example/msvc/StaticLib/build.cpp b/example/msvc/StaticLib/build.cpp index 5aa8cb20..01443406 100644 --- a/example/msvc/StaticLib/build.cpp +++ b/example/msvc/StaticLib/build.cpp @@ -17,7 +17,6 @@ int main(void) { env::init(BUILD_SCRIPT_SOURCE, BUILD_SCRIPT_FOLDER); env::set_log_level(env::LogLevel::Trace); - // base::Toolchain msvc("msvc", "cl", "cl", "cl", "lib", "link"); Toolchain_msvc msvc; StaticTarget_msvc statictarget_msvc("librandom.lib", msvc, ""); From dbbd68ad7765bb8f007f03ee59dbab34c7adbf9e Mon Sep 17 00:00:00 2001 From: Niket Naidu Date: Wed, 16 Jun 2021 19:10:32 -0700 Subject: [PATCH 7/7] Updated AfterInstall example --- example/gcc/AfterInstall/build.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example/gcc/AfterInstall/build.cpp b/example/gcc/AfterInstall/build.cpp index 40e01260..88672e14 100644 --- a/example/gcc/AfterInstall/build.cpp +++ b/example/gcc/AfterInstall/build.cpp @@ -16,7 +16,8 @@ int main(void) { env::set_log_level(env::LogLevel::Trace); // Stored as a const & in target - base::Toolchain gcc("gcc", "as", "gcc", "g++", "ar", "ld"); + base::Toolchain gcc(base::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", + "ld"); // CppTarget ExecutableTarget_gcc cpptarget("CppFlags.exe", gcc, "files");