diff --git a/buildcc/lib/args/include/args/args.h b/buildcc/lib/args/include/args/args.h index b57e2a6a..05311272 100644 --- a/buildcc/lib/args/include/args/args.h +++ b/buildcc/lib/args/include/args/args.h @@ -48,33 +48,32 @@ struct ArgToolchainState { struct ArgToolchain { ArgToolchain(){}; ArgToolchain(ToolchainId initial_id, const std::string &initial_name, - const std::string &initial_asm_compiler, + const ToolchainBinaries &initial_binaries) + : id(initial_id), name(initial_name), binaries(initial_binaries) {} + ArgToolchain(ToolchainId initial_id, const std::string &initial_name, + const std::string &initial_assembler, const std::string &initial_c_compiler, const std::string &initial_cpp_compiler, const std::string &initial_archiver, const std::string &initial_linker) - : id(initial_id), name(initial_name), asm_compiler(initial_asm_compiler), - c_compiler(initial_c_compiler), cpp_compiler(initial_cpp_compiler), - archiver(initial_archiver), linker(initial_linker) {} + : ArgToolchain(initial_id, initial_name, + ToolchainBinaries(initial_assembler, initial_c_compiler, + initial_cpp_compiler, initial_archiver, + initial_linker)) {} /** * @brief Construct a BaseToolchain from the arguments supplied through the * command line information */ + // TODO, Update this for lock and ToolchainConfig BaseToolchain ConstructToolchain() const { - BaseToolchain toolchain(id, name, asm_compiler, c_compiler, cpp_compiler, - archiver, linker); - return toolchain; + return BaseToolchain(id, name, binaries); } ArgToolchainState state; ToolchainId id{ToolchainId::Undefined}; std::string name{""}; - std::string asm_compiler{""}; - std::string c_compiler{""}; - std::string cpp_compiler{""}; - std::string archiver{""}; - std::string linker{""}; + ToolchainBinaries binaries; }; // NOTE, Incomplete without pch_compile_command diff --git a/buildcc/lib/args/src/args.cpp b/buildcc/lib/args/src/args.cpp index ad1605b0..9c95eb5c 100644 --- a/buildcc/lib/args/src/args.cpp +++ b/buildcc/lib/args/src/args.cpp @@ -75,7 +75,7 @@ const std::unordered_map kLogLevelMap{ {"critical", buildcc::env::LogLevel::Critical}, }; -const std::unordered_map kToolchainIdMap{ +const std::unordered_map kToolchainIdMap{ {"gcc", buildcc::ToolchainId::Gcc}, {"msvc", buildcc::ToolchainId::Msvc}, {"mingw", buildcc::ToolchainId::MinGW}, @@ -99,16 +99,16 @@ void Args::AddToolchain(const std::string &name, const std::string &description, ->transform(CLI::CheckedTransformer(kToolchainIdMap, CLI::ignore_case)) ->default_val(initial.id); t_user->add_option(kToolchainNameParam, out.name)->default_val(initial.name); - t_user->add_option(kToolchainAsmCompilerParam, out.asm_compiler) - ->default_val(initial.asm_compiler); - t_user->add_option(kToolchainCCompilerParam, out.c_compiler) - ->default_val(initial.c_compiler); - t_user->add_option(kToolchainCppCompilerParam, out.cpp_compiler) - ->default_val(initial.cpp_compiler); - t_user->add_option(kToolchainArchiverParam, out.archiver) - ->default_val(initial.archiver); - t_user->add_option(kToolchainLinkerParam, out.linker) - ->default_val(initial.linker); + t_user->add_option(kToolchainAsmCompilerParam, out.binaries.assembler) + ->default_val(initial.binaries.assembler); + t_user->add_option(kToolchainCCompilerParam, out.binaries.c_compiler) + ->default_val(initial.binaries.c_compiler); + t_user->add_option(kToolchainCppCompilerParam, out.binaries.cpp_compiler) + ->default_val(initial.binaries.cpp_compiler); + t_user->add_option(kToolchainArchiverParam, out.binaries.archiver) + ->default_val(initial.binaries.archiver); + t_user->add_option(kToolchainLinkerParam, out.binaries.linker) + ->default_val(initial.binaries.linker); } void Args::AddTarget(const std::string &name, const std::string &description, diff --git a/buildcc/lib/args/test/test_args.cpp b/buildcc/lib/args/test/test_args.cpp index 7a686577..b52179cf 100644 --- a/buildcc/lib/args/test/test_args.cpp +++ b/buildcc/lib/args/test/test_args.cpp @@ -66,13 +66,13 @@ TEST(ArgsTestGroup, Args_CustomToolchain) { // Toolchain CHECK_TRUE(gcc_toolchain.state.build); CHECK_FALSE(gcc_toolchain.state.test); - CHECK(gcc_toolchain.id == buildcc::Toolchain::Id::Gcc); + CHECK(gcc_toolchain.id == buildcc::ToolchainId::Gcc); STRCMP_EQUAL(gcc_toolchain.name.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.asm_compiler.c_str(), "as"); - STRCMP_EQUAL(gcc_toolchain.c_compiler.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.cpp_compiler.c_str(), "g++"); - STRCMP_EQUAL(gcc_toolchain.archiver.c_str(), "ar"); - STRCMP_EQUAL(gcc_toolchain.linker.c_str(), "ld"); + STRCMP_EQUAL(gcc_toolchain.binaries.assembler.c_str(), "as"); + STRCMP_EQUAL(gcc_toolchain.binaries.c_compiler.c_str(), "gcc"); + STRCMP_EQUAL(gcc_toolchain.binaries.cpp_compiler.c_str(), "g++"); + STRCMP_EQUAL(gcc_toolchain.binaries.archiver.c_str(), "ar"); + STRCMP_EQUAL(gcc_toolchain.binaries.linker.c_str(), "ld"); } TEST(ArgsTestGroup, Args_MultipleCustomToolchain) { @@ -104,24 +104,24 @@ TEST(ArgsTestGroup, Args_MultipleCustomToolchain) { // GCC CHECK_TRUE(gcc_toolchain.state.build); CHECK_FALSE(gcc_toolchain.state.test); - CHECK(gcc_toolchain.id == buildcc::Toolchain::Id::Gcc); + CHECK(gcc_toolchain.id == buildcc::ToolchainId::Gcc); STRCMP_EQUAL(gcc_toolchain.name.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.asm_compiler.c_str(), "as"); - STRCMP_EQUAL(gcc_toolchain.c_compiler.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.cpp_compiler.c_str(), "g++"); - STRCMP_EQUAL(gcc_toolchain.archiver.c_str(), "ar"); - STRCMP_EQUAL(gcc_toolchain.linker.c_str(), "ld"); + STRCMP_EQUAL(gcc_toolchain.binaries.assembler.c_str(), "as"); + STRCMP_EQUAL(gcc_toolchain.binaries.c_compiler.c_str(), "gcc"); + STRCMP_EQUAL(gcc_toolchain.binaries.cpp_compiler.c_str(), "g++"); + STRCMP_EQUAL(gcc_toolchain.binaries.archiver.c_str(), "ar"); + STRCMP_EQUAL(gcc_toolchain.binaries.linker.c_str(), "ld"); // MSVC CHECK_TRUE(msvc_toolchain.state.build); CHECK_TRUE(msvc_toolchain.state.test); - CHECK(msvc_toolchain.id == buildcc::Toolchain::Id::Msvc); + CHECK(msvc_toolchain.id == buildcc::ToolchainId::Msvc); STRCMP_EQUAL(msvc_toolchain.name.c_str(), "msvc"); - STRCMP_EQUAL(msvc_toolchain.asm_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.c_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.cpp_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.archiver.c_str(), "lib"); - STRCMP_EQUAL(msvc_toolchain.linker.c_str(), "link"); + STRCMP_EQUAL(msvc_toolchain.binaries.assembler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.c_compiler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.cpp_compiler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.archiver.c_str(), "lib"); + STRCMP_EQUAL(msvc_toolchain.binaries.linker.c_str(), "link"); } TEST(ArgsTestGroup, Args_DuplicateCustomToolchain) { @@ -165,13 +165,13 @@ TEST(ArgsTestGroup, Args_CustomTarget) { // Toolchain CHECK_TRUE(gcc_toolchain.state.build); CHECK_FALSE(gcc_toolchain.state.test); - CHECK(gcc_toolchain.id == buildcc::Toolchain::Id::Gcc); + CHECK(gcc_toolchain.id == buildcc::ToolchainId::Gcc); STRCMP_EQUAL(gcc_toolchain.name.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.asm_compiler.c_str(), "as"); - STRCMP_EQUAL(gcc_toolchain.c_compiler.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.cpp_compiler.c_str(), "g++"); - STRCMP_EQUAL(gcc_toolchain.archiver.c_str(), "ar"); - STRCMP_EQUAL(gcc_toolchain.linker.c_str(), "ld"); + STRCMP_EQUAL(gcc_toolchain.binaries.assembler.c_str(), "as"); + STRCMP_EQUAL(gcc_toolchain.binaries.c_compiler.c_str(), "gcc"); + STRCMP_EQUAL(gcc_toolchain.binaries.cpp_compiler.c_str(), "g++"); + STRCMP_EQUAL(gcc_toolchain.binaries.archiver.c_str(), "ar"); + STRCMP_EQUAL(gcc_toolchain.binaries.linker.c_str(), "ld"); // Target STRCMP_EQUAL(gcc_target.compile_command.c_str(), @@ -219,13 +219,13 @@ TEST(ArgsTestGroup, Args_MultipleCustomTarget) { // Toolchain CHECK_TRUE(gcc_toolchain.state.build); CHECK_FALSE(gcc_toolchain.state.test); - CHECK(gcc_toolchain.id == buildcc::Toolchain::Id::Gcc); + CHECK(gcc_toolchain.id == buildcc::ToolchainId::Gcc); STRCMP_EQUAL(gcc_toolchain.name.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.asm_compiler.c_str(), "as"); - STRCMP_EQUAL(gcc_toolchain.c_compiler.c_str(), "gcc"); - STRCMP_EQUAL(gcc_toolchain.cpp_compiler.c_str(), "g++"); - STRCMP_EQUAL(gcc_toolchain.archiver.c_str(), "ar"); - STRCMP_EQUAL(gcc_toolchain.linker.c_str(), "ld"); + STRCMP_EQUAL(gcc_toolchain.binaries.assembler.c_str(), "as"); + STRCMP_EQUAL(gcc_toolchain.binaries.c_compiler.c_str(), "gcc"); + STRCMP_EQUAL(gcc_toolchain.binaries.cpp_compiler.c_str(), "g++"); + STRCMP_EQUAL(gcc_toolchain.binaries.archiver.c_str(), "ar"); + STRCMP_EQUAL(gcc_toolchain.binaries.linker.c_str(), "ld"); // Target STRCMP_EQUAL(gcc_target.compile_command.c_str(), @@ -240,13 +240,13 @@ TEST(ArgsTestGroup, Args_MultipleCustomTarget) { // Toolchain CHECK_TRUE(msvc_toolchain.state.build); CHECK_TRUE(msvc_toolchain.state.test); - CHECK(msvc_toolchain.id == buildcc::Toolchain::Id::Msvc); + CHECK(msvc_toolchain.id == buildcc::ToolchainId::Msvc); STRCMP_EQUAL(msvc_toolchain.name.c_str(), "msvc"); - STRCMP_EQUAL(msvc_toolchain.asm_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.c_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.cpp_compiler.c_str(), "cl"); - STRCMP_EQUAL(msvc_toolchain.archiver.c_str(), "lib"); - STRCMP_EQUAL(msvc_toolchain.linker.c_str(), "link"); + STRCMP_EQUAL(msvc_toolchain.binaries.assembler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.c_compiler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.cpp_compiler.c_str(), "cl"); + STRCMP_EQUAL(msvc_toolchain.binaries.archiver.c_str(), "lib"); + STRCMP_EQUAL(msvc_toolchain.binaries.linker.c_str(), "link"); // Target STRCMP_EQUAL(msvc_target.compile_command.c_str(), diff --git a/buildcc/lib/args/test/test_register.cpp b/buildcc/lib/args/test/test_register.cpp index 62e4ad38..0ccea4bc 100644 --- a/buildcc/lib/args/test/test_register.cpp +++ b/buildcc/lib/args/test/test_register.cpp @@ -100,7 +100,7 @@ TEST(RegisterTestGroup, Register_Build) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -148,7 +148,7 @@ TEST(RegisterTestGroup, Register_NoBuildAndDep) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -232,7 +232,7 @@ TEST(RegisterTestGroup, Register_BuildAndDep) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -327,7 +327,7 @@ TEST(RegisterTestGroup, Register_DepDuplicate) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -403,7 +403,7 @@ TEST(RegisterTestGroup, Register_DepCyclic) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -479,7 +479,7 @@ TEST(RegisterTestGroup, Register_Test) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); @@ -564,7 +564,7 @@ TEST(RegisterTestGroup, Register_TestWithOutput) { // Make dummy toolchain and target buildcc::env::init(fs::current_path(), fs::current_path()); - buildcc::Toolchain toolchain(buildcc::Toolchain::Id::Gcc, "", "", "", "", "", + buildcc::Toolchain toolchain(buildcc::ToolchainId::Gcc, "", "", "", "", "", ""); buildcc::BaseTarget target("dummyT", buildcc::TargetType::Executable, toolchain, ""); diff --git a/buildcc/lib/target/include/target/api/target_getter.h b/buildcc/lib/target/include/target/api/target_getter.h index 3c8f0f88..3ffdca5e 100644 --- a/buildcc/lib/target/include/target/api/target_getter.h +++ b/buildcc/lib/target/include/target/api/target_getter.h @@ -24,6 +24,7 @@ #include "toolchain/toolchain.h" +#include "target/common/target_config.h" #include "target/common/target_state.h" #include "taskflow/taskflow.hpp" @@ -39,6 +40,9 @@ template class TargetGetter { bool IsBuilt() const; bool IsLocked() const; + // Target Config + const TargetConfig &GetConfig() const; + const std::string &GetName() const; const Toolchain &GetToolchain() const; TargetType GetType() const; diff --git a/buildcc/lib/target/include/target/api/target_info_getter.h b/buildcc/lib/target/include/target/api/target_info_getter.h index 1640c19c..814a8238 100644 --- a/buildcc/lib/target/include/target/api/target_info_getter.h +++ b/buildcc/lib/target/include/target/api/target_info_getter.h @@ -19,7 +19,6 @@ #include "schema/path.h" -#include "target/common/target_config.h" #include "target/common/target_state.h" namespace buildcc::internal { @@ -34,9 +33,6 @@ template class TargetInfoGetter { const fs::path &GetTargetRootDir() const; const fs::path &GetTargetBuildDir() const; - // Target Config - const TargetConfig &GetConfig() const; - // Target Storer const fs_unordered_set &GetSourceFiles() const; const fs_unordered_set &GetHeaderFiles() const; diff --git a/buildcc/lib/target/include/target/target.h b/buildcc/lib/target/include/target/target.h index adea83ed..cb9b1049 100644 --- a/buildcc/lib/target/include/target/target.h +++ b/buildcc/lib/target/include/target/target.h @@ -69,12 +69,10 @@ class Target : public internal::BuilderInterface, explicit Target(const std::string &name, TargetType type, const Toolchain &toolchain, const TargetEnv &env, const TargetConfig &config = TargetConfig()) - : TargetInfo( - toolchain, - TargetEnv(env.GetTargetRootDir(), - env.GetTargetBuildDir() / toolchain.GetName() / name), - config), - name_(name), type_(type), + : TargetInfo(toolchain, TargetEnv(env.GetTargetRootDir(), + env.GetTargetBuildDir() / + toolchain.GetName() / name)), + name_(name), type_(type), config_(config), serialization_(env_.GetTargetBuildDir() / fmt::format("{}.bin", name)), compile_pch_(*this), compile_object_(*this), link_target_(*this) { Initialize(); @@ -139,6 +137,7 @@ class Target : public internal::BuilderInterface, private: std::string name_; TargetType type_; + TargetConfig config_; internal::TargetSerialization serialization_; internal::CompilePch compile_pch_; internal::CompileObject compile_object_; diff --git a/buildcc/lib/target/include/target/target_info.h b/buildcc/lib/target/include/target/target_info.h index 0b85bac2..4b9f6746 100644 --- a/buildcc/lib/target/include/target/target_info.h +++ b/buildcc/lib/target/include/target/target_info.h @@ -61,9 +61,8 @@ class TargetInfo : public internal::SourceApi, public internal::SyncApi, public internal::TargetInfoGetter { public: - TargetInfo(const BaseToolchain &toolchain, const TargetEnv &env, - const TargetConfig &config = TargetConfig()) - : toolchain_(toolchain), env_(env), config_(config) { + TargetInfo(const BaseToolchain &toolchain, const TargetEnv &env) + : toolchain_(toolchain), env_(env) { Initialize(); } @@ -85,11 +84,10 @@ class TargetInfo : public internal::SourceApi, protected: const BaseToolchain &toolchain_; TargetEnv env_; - TargetConfig config_; // - UserTargetSchema user_; FunctionLock lock_; + UserTargetSchema user_; private: void Initialize(); diff --git a/buildcc/lib/target/src/api/target_getter.cpp b/buildcc/lib/target/src/api/target_getter.cpp index b5c45fd9..61540bff 100644 --- a/buildcc/lib/target/src/api/target_getter.cpp +++ b/buildcc/lib/target/src/api/target_getter.cpp @@ -33,6 +33,13 @@ template bool TargetGetter::IsBuilt() const { return t.state_.IsBuilt(); } +// Target Config +template const TargetConfig &TargetGetter::GetConfig() const { + const T &t = static_cast(*this); + + return t.config_; +} + template bool TargetGetter::IsLocked() const { const T &t = static_cast(*this); diff --git a/buildcc/lib/target/src/api/target_info_getter.cpp b/buildcc/lib/target/src/api/target_info_getter.cpp index 75c0d28b..7083fa48 100644 --- a/buildcc/lib/target/src/api/target_info_getter.cpp +++ b/buildcc/lib/target/src/api/target_info_getter.cpp @@ -35,14 +35,6 @@ const fs::path &TargetInfoGetter::GetTargetBuildDir() const { return t.env_.GetTargetBuildDir(); } -// Target Config -template -const TargetConfig &TargetInfoGetter::GetConfig() const { - const T &t = static_cast(*this); - - return t.config_; -} - // Target Storer template const fs_unordered_set &TargetInfoGetter::GetSourceFiles() const { diff --git a/buildcc/lib/target/src/target/build.cpp b/buildcc/lib/target/src/target/build.cpp index 7435e7a5..43a1572e 100644 --- a/buildcc/lib/target/src/target/build.cpp +++ b/buildcc/lib/target/src/target/build.cpp @@ -54,7 +54,7 @@ namespace buildcc { void Target::Build() { env::log_trace(name_, __FUNCTION__); - lock_.ExpectsUnlock(__FUNCTION__); + lock_.ExpectsUnlock("Target::Build"); lock_.Lock(); // PCH state @@ -87,7 +87,7 @@ void Target::Build() { {kLinkFlags, internal::aggregate(GetLinkFlags())}, // Toolchain executables here - {kAsmCompiler, fmt::format("{}", fs::path(toolchain_.GetAsmCompiler()))}, + {kAsmCompiler, fmt::format("{}", fs::path(toolchain_.GetAssembler()))}, {kCCompiler, fmt::format("{}", fs::path(toolchain_.GetCCompiler()))}, {kCppCompiler, fmt::format("{}", fs::path(toolchain_.GetCppCompiler()))}, {kArchiver, fmt::format("{}", fs::path(toolchain_.GetArchiver()))}, diff --git a/buildcc/lib/target/src/target/target.cpp b/buildcc/lib/target/src/target/target.cpp index dd4aedbe..ab5532bd 100644 --- a/buildcc/lib/target/src/target/target.cpp +++ b/buildcc/lib/target/src/target/target.cpp @@ -109,7 +109,7 @@ std::optional Target::SelectCompileFlags(FileExt ext) const { std::optional Target::SelectCompiler(FileExt ext) const { switch (ext) { case FileExt::Asm: - return GetToolchain().GetAsmCompiler(); + return GetToolchain().GetAssembler(); break; case FileExt::C: return GetToolchain().GetCCompiler(); diff --git a/buildcc/lib/target/src/target_info/target_info.cpp b/buildcc/lib/target/src/target_info/target_info.cpp index 34dec92f..c338d9f6 100644 --- a/buildcc/lib/target/src/target_info/target_info.cpp +++ b/buildcc/lib/target/src/target_info/target_info.cpp @@ -21,7 +21,8 @@ namespace buildcc { // PRIVATE void TargetInfo::Initialize() { - toolchain_.GetLockInfo().ExpectsLock("TargetInfo with Toolchain"); + toolchain_.GetLockInfo().ExpectsLock( + "Toolchain should be locked before usage through `Toolchain::Lock`"); std::for_each(toolchain_.GetPreprocessorFlags().begin(), toolchain_.GetPreprocessorFlags().end(), diff --git a/buildcc/lib/target/test/target/test_base_target.cpp b/buildcc/lib/target/test/target/test_base_target.cpp index 4f8d7639..6f772d7d 100644 --- a/buildcc/lib/target/test/target/test_base_target.cpp +++ b/buildcc/lib/target/test/target/test_base_target.cpp @@ -21,7 +21,7 @@ TEST_GROUP(TargetBaseTestGroup) } }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetBaseTestGroup, InvalidTargetType) { diff --git a/buildcc/lib/target/test/target/test_compile_object.cpp b/buildcc/lib/target/test/target/test_compile_object.cpp index 0284b395..1819509d 100644 --- a/buildcc/lib/target/test/target/test_compile_object.cpp +++ b/buildcc/lib/target/test/target/test_compile_object.cpp @@ -15,7 +15,7 @@ TEST_GROUP(TargetCompileObjectTestGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetCompileObjectTestGroup, CacheCompileCommand_Invalid) { 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 ec6bfcc5..6c04a79c 100644 --- a/buildcc/lib/target/test/target/test_target_external_lib.cpp +++ b/buildcc/lib/target/test/target/test_target_external_lib.cpp @@ -27,7 +27,7 @@ TEST_GROUP(TargetTestExternalLib) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path intermediate_path = diff --git a/buildcc/lib/target/test/target/test_target_failure_states.cpp b/buildcc/lib/target/test/target/test_target_failure_states.cpp index 5f64f4d9..20a2aa74 100644 --- a/buildcc/lib/target/test/target/test_target_failure_states.cpp +++ b/buildcc/lib/target/test/target/test_target_failure_states.cpp @@ -25,7 +25,7 @@ TEST_GROUP(TargetTestFailureStates) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetTestFailureStates, StartTaskEnvFailure) { diff --git a/buildcc/lib/target/test/target/test_target_flags.cpp b/buildcc/lib/target/test/target/test_target_flags.cpp index 54434648..5a177930 100644 --- a/buildcc/lib/target/test/target/test_target_flags.cpp +++ b/buildcc/lib/target/test/target/test_target_flags.cpp @@ -21,7 +21,7 @@ // Constants -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); // ------------- PREPROCESSOR FLAGS --------------- 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 e3a23dc7..91fa44b4 100644 --- a/buildcc/lib/target/test/target/test_target_include_dir.cpp +++ b/buildcc/lib/target/test/target/test_target_include_dir.cpp @@ -26,7 +26,7 @@ TEST_GROUP(TargetTestIncludeDirGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path target_include_dir_intermediate_path = 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 9b71856a..5b0815da 100644 --- a/buildcc/lib/target/test/target/test_target_lib_dep.cpp +++ b/buildcc/lib/target/test/target/test_target_lib_dep.cpp @@ -30,7 +30,7 @@ TEST_GROUP(TargetTestLibDep) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path intermediate_path = diff --git a/buildcc/lib/target/test/target/test_target_lock.cpp b/buildcc/lib/target/test/target/test_target_lock.cpp index 5bd6b2c8..3987d2c3 100644 --- a/buildcc/lib/target/test/target/test_target_lock.cpp +++ b/buildcc/lib/target/test/target/test_target_lock.cpp @@ -25,7 +25,7 @@ TEST_GROUP(TargetTestLock) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetTestLock, LockState) { diff --git a/buildcc/lib/target/test/target/test_target_pch.cpp b/buildcc/lib/target/test/target/test_target_pch.cpp index 38833475..4cfbac1f 100644 --- a/buildcc/lib/target/test/target/test_target_pch.cpp +++ b/buildcc/lib/target/test/target/test_target_pch.cpp @@ -30,7 +30,7 @@ TEST_GROUP(TargetPchTestGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); TEST(TargetPchTestGroup, Target_AddPch) { diff --git a/buildcc/lib/target/test/target/test_target_source.cpp b/buildcc/lib/target/test/target/test_target_source.cpp index 389dda74..58c9f2d2 100644 --- a/buildcc/lib/target/test/target/test_target_source.cpp +++ b/buildcc/lib/target/test/target/test_target_source.cpp @@ -27,7 +27,7 @@ TEST_GROUP(TargetTestSourceGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path target_source_intermediate_path = 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 478b104e..6491950d 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 @@ -26,7 +26,7 @@ TEST_GROUP(TargetTestSourceOutOfRootGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path target_source_intermediate_path = diff --git a/buildcc/lib/target/test/target/test_target_sync.cpp b/buildcc/lib/target/test/target/test_target_sync.cpp index 2b813406..cbb55d3e 100644 --- a/buildcc/lib/target/test/target/test_target_sync.cpp +++ b/buildcc/lib/target/test/target/test_target_sync.cpp @@ -19,7 +19,7 @@ TEST_GROUP(TargetTestSyncGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ldd"); TEST(TargetTestSyncGroup, CopyByConstRef) { diff --git a/buildcc/lib/target/test/target/test_target_user_deps.cpp b/buildcc/lib/target/test/target/test_target_user_deps.cpp index 237da156..8a4bb451 100644 --- a/buildcc/lib/target/test/target/test_target_user_deps.cpp +++ b/buildcc/lib/target/test/target/test_target_user_deps.cpp @@ -27,7 +27,7 @@ TEST_GROUP(TargetTestUserDepsGroup) }; // clang-format on -static buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", +static buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); static const fs::path target_source_intermediate_path = diff --git a/buildcc/lib/toolchain/include/toolchain/common/function_lock.h b/buildcc/lib/toolchain/include/toolchain/common/function_lock.h index 246b8ee7..bef3ee34 100644 --- a/buildcc/lib/toolchain/include/toolchain/common/function_lock.h +++ b/buildcc/lib/toolchain/include/toolchain/common/function_lock.h @@ -34,15 +34,13 @@ class FunctionLock { void Unlock() { SetLock(false); } bool IsLocked() const { return lock_; } - // TODO, Make this better - void ExpectsUnlock(std::string_view tag) const { + + void ExpectsUnlock(std::string_view message) const { env::assert_fatal(!lock_, - fmt::format("Cannot use {} when lock == true", tag)); + fmt::format("Expects lock == false. {}", message)); } - // TODO, Make this better - void ExpectsLock(std::string_view tag) const { - env::assert_fatal(lock_, - fmt::format("Cannot use {} when lock == false", tag)); + void ExpectsLock(std::string_view message) const { + env::assert_fatal(lock_, fmt::format("Expects lock == true. {}", message)); } private: diff --git a/buildcc/lib/toolchain/include/toolchain/toolchain.h b/buildcc/lib/toolchain/include/toolchain/toolchain.h index b58bf968..f46cc2ad 100644 --- a/buildcc/lib/toolchain/include/toolchain/toolchain.h +++ b/buildcc/lib/toolchain/include/toolchain/toolchain.h @@ -29,44 +29,66 @@ namespace buildcc { +enum class ToolchainId { + Gcc = 0, ///< GCC Toolchain + Msvc, ///< MSVC Toolchain + Clang, ///< Clang Toolchain + MinGW, ///< MinGW Toolchain (Similar to GCC, but for Windows) + Custom, ///< Custom Toolchain not defined in this list + Undefined, ///< Default value when unknown +}; + +struct ToolchainBinaries { + explicit ToolchainBinaries() = default; + explicit ToolchainBinaries(std::string_view as, std::string_view c, + std::string_view cpp, std::string_view ar, + std::string_view link) + : assembler(as), c_compiler(c), cpp_compiler(cpp), archiver(ar), + linker(link) {} + std::string assembler; + std::string c_compiler; + std::string cpp_compiler; + std::string archiver; + std::string linker; +}; + // Base toolchain class class Toolchain : public internal::FlagApi, public ToolchainVerify { public: - enum class Id { - Gcc = 0, ///< GCC Toolchain - Msvc, ///< MSVC Toolchain - Clang, ///< Clang Toolchain - MinGW, ///< MinGW Toolchain (Similar to GCC, but for Windows) - Custom, ///< Custom Toolchain not defined in this list - Undefined, ///< Default value when unknown - }; - 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, bool lock = true, - const ToolchainConfig &config = ToolchainConfig()) - : id_(id), name_(name), asm_compiler_(asm_compiler), - c_compiler_(c_compiler), cpp_compiler_(cpp_compiler), - archiver_(archiver), linker_(linker), config_(config), lock_(lock) { + Toolchain(ToolchainId id, std::string_view name, + const ToolchainBinaries &binaries, bool lock = true, + const ToolchainConfig &config = ToolchainConfig()) + : id_(id), name_(name), binaries_(binaries), lock_(lock), + config_(config) { Initialize(); } - - Toolchain(Toolchain &&toolchain) = default; - Toolchain(const Toolchain &toolchain) = delete; + Toolchain(ToolchainId id, std::string_view name, std::string_view assembler, + std::string_view c_compiler, std::string_view cpp_compiler, + std::string_view archiver, std::string_view linker, + bool lock = true, const ToolchainConfig &config = ToolchainConfig()) + : Toolchain(id, name, + ToolchainBinaries(assembler, c_compiler, cpp_compiler, + archiver, linker), + lock, config) {} + + Toolchain(Toolchain &&) = default; + Toolchain &operator=(Toolchain &&) = default; + Toolchain(const Toolchain &) = delete; + Toolchain &operator=(const Toolchain &) = delete; void Lock(); // Getters - Id GetId() const { return id_; } + ToolchainId GetId() const { return id_; } const std::string &GetName() const { return name_; } - const std::string &GetAsmCompiler() const { return asm_compiler_; } - const std::string &GetCCompiler() const { return c_compiler_; } - const std::string &GetCppCompiler() const { return cpp_compiler_; } - const std::string &GetArchiver() const { return archiver_; } - const std::string &GetLinker() const { return linker_; } + const std::string &GetAssembler() const { return binaries_.assembler; } + const std::string &GetCCompiler() const { return binaries_.c_compiler; } + const std::string &GetCppCompiler() const { return binaries_.cpp_compiler; } + const std::string &GetArchiver() const { return binaries_.archiver; } + const std::string &GetLinker() const { return binaries_.linker; } + const ToolchainBinaries &GetToolchainBinaries() const { return binaries_; } const FunctionLock &GetLockInfo() const { return lock_; } const ToolchainConfig &GetConfig() const { return config_; } @@ -89,28 +111,19 @@ class Toolchain : public internal::FlagApi, private: friend class internal::FlagApi; - - // TODO, Remove this and have a virtual `Verify` function instead - // Anti-pattern: ToolchainVerify contains GCC and MSVC specific - // implementations in a "Base" toolchain class friend class ToolchainVerify; private: - Id id_; + ToolchainId id_; std::string name_; - std::string asm_compiler_; - std::string c_compiler_; - std::string cpp_compiler_; - std::string archiver_; - std::string linker_; - ToolchainConfig config_; + ToolchainBinaries binaries_; FunctionLock lock_; + ToolchainConfig config_; // UserSchema user_; }; -typedef Toolchain::Id ToolchainId; typedef Toolchain BaseToolchain; } // namespace buildcc diff --git a/buildcc/lib/toolchain/src/api/toolchain_verify.cpp b/buildcc/lib/toolchain/src/api/toolchain_verify.cpp index 44ce6021..157a7c1e 100644 --- a/buildcc/lib/toolchain/src/api/toolchain_verify.cpp +++ b/buildcc/lib/toolchain/src/api/toolchain_verify.cpp @@ -78,12 +78,12 @@ GetCompilerVersion(const fs::path &absolute_path, std::optional compiler_version; switch (toolchain.GetId()) { - case buildcc::Toolchain::Id::Gcc: - case buildcc::Toolchain::Id::MinGW: - case buildcc::Toolchain::Id::Clang: + case buildcc::ToolchainId::Gcc: + case buildcc::ToolchainId::MinGW: + case buildcc::ToolchainId::Clang: compiler_version = GetGccCompilerVersion(command); break; - case buildcc::Toolchain::Id::Msvc: + case buildcc::ToolchainId::Msvc: compiler_version = GetMsvcCompilerVersion(); break; default: @@ -127,12 +127,12 @@ GetCompilerArchitecture(const fs::path &absolute_path, (absolute_path / toolchain.GetCppCompiler()).make_preferred().string()); std::optional target_arch; switch (toolchain.GetId()) { - case buildcc::Toolchain::Id::Gcc: - case buildcc::Toolchain::Id::MinGW: - case buildcc::Toolchain::Id::Clang: + case buildcc::ToolchainId::Gcc: + case buildcc::ToolchainId::MinGW: + case buildcc::ToolchainId::Clang: target_arch = GetGccTargetArchitecture(command); break; - case buildcc::Toolchain::Id::Msvc: + case buildcc::ToolchainId::Msvc: target_arch = GetMsvcTargetArchitecture(); break; default: @@ -157,7 +157,7 @@ class ToolchainMatcher { matcher_.clear(); matcher_.insert( - fmt::format("{}{}", toolchain_.GetAsmCompiler(), os_executable_ext)); + fmt::format("{}{}", toolchain_.GetAssembler(), os_executable_ext)); matcher_.insert( fmt::format("{}{}", toolchain_.GetCCompiler(), os_executable_ext)); matcher_.insert( @@ -258,26 +258,31 @@ ToolchainVerify::Verify(const VerifyToolchainConfig &config) { "OS not supported"); verified_toolchain_ = verified_toolchains[0]; - t.asm_compiler_ = (verified_toolchain_.path / - fmt::format("{}{}", t.asm_compiler_, os_executable_ext)) - .make_preferred() - .string(); - t.c_compiler_ = (verified_toolchain_.path / - fmt::format("{}{}", t.c_compiler_, os_executable_ext)) - .make_preferred() - .string(); - t.cpp_compiler_ = (verified_toolchain_.path / - fmt::format("{}{}", t.cpp_compiler_, os_executable_ext)) - .make_preferred() - .string(); - t.archiver_ = (verified_toolchain_.path / - fmt::format("{}{}", t.archiver_, os_executable_ext)) - .make_preferred() - .string(); - t.linker_ = (verified_toolchain_.path / - fmt::format("{}{}", t.linker_, os_executable_ext)) - .make_preferred() - .string(); + t.binaries_.assembler = + (verified_toolchain_.path / + fmt::format("{}{}", t.binaries_.assembler, os_executable_ext)) + .make_preferred() + .string(); + t.binaries_.c_compiler = + (verified_toolchain_.path / + fmt::format("{}{}", t.binaries_.c_compiler, os_executable_ext)) + .make_preferred() + .string(); + t.binaries_.cpp_compiler = + (verified_toolchain_.path / + fmt::format("{}{}", t.binaries_.cpp_compiler, os_executable_ext)) + .make_preferred() + .string(); + t.binaries_.archiver = + (verified_toolchain_.path / + fmt::format("{}{}", t.binaries_.archiver, os_executable_ext)) + .make_preferred() + .string(); + t.binaries_.linker = + (verified_toolchain_.path / + fmt::format("{}{}", t.binaries_.linker, os_executable_ext)) + .make_preferred() + .string(); } return verified_toolchains; diff --git a/buildcc/lib/toolchain/test/test_toolchain_verify.cpp b/buildcc/lib/toolchain/test/test_toolchain_verify.cpp index 9e12df5e..0fce266c 100644 --- a/buildcc/lib/toolchain/test/test_toolchain_verify.cpp +++ b/buildcc/lib/toolchain/test/test_toolchain_verify.cpp @@ -27,7 +27,7 @@ TEST_GROUP(ToolchainTestGroup) // NOTE, We are mocking the environment instead of actually querying it TEST(ToolchainTestGroup, VerifyToolchain_Gcc) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); std::vector version_stdout_data{"version"}; @@ -56,7 +56,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_Gcc) { } TEST(ToolchainTestGroup, VerifyToolchain_Clang) { - buildcc::Toolchain clang(buildcc::Toolchain::Id::Clang, "clang", "llvm-as", + buildcc::Toolchain clang(buildcc::ToolchainId::Clang, "clang", "llvm-as", "clang", "clang++", "llvm-ar", "lld"); std::vector version_stdout_data{"version"}; @@ -85,8 +85,8 @@ TEST(ToolchainTestGroup, VerifyToolchain_Clang) { } TEST(ToolchainTestGroup, VerifyToolchain_Msvc) { - buildcc::Toolchain msvc(buildcc::Toolchain::Id::Msvc, "msvc", "cl", "cl", - "cl", "lib", "link"); + buildcc::Toolchain msvc(buildcc::ToolchainId::Msvc, "msvc", "cl", "cl", "cl", + "lib", "link"); // Setup ENV // VSCMD_VER std::string vscmd_ver = std::string("VSCMD_VER=version"); @@ -122,8 +122,8 @@ TEST(ToolchainTestGroup, VerifyToolchain_Msvc) { } TEST(ToolchainTestGroup, VerifyToolchain_BadCompilerId) { - buildcc::Toolchain gcc((buildcc::Toolchain::Id)65535, "gcc", "as", "gcc", - "g++", "ar", "ld"); + buildcc::Toolchain gcc((buildcc::ToolchainId)65535, "gcc", "as", "gcc", "g++", + "ar", "ld"); std::string putenv_str = fmt::format("CUSTOM_BUILDCC_PATH={}/toolchains/gcc", fs::current_path().string()); @@ -146,7 +146,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_BadCompilerId) { } TEST(ToolchainTestGroup, VerifyToolchain_BadAbsolutePath) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -161,7 +161,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_BadAbsolutePath) { } TEST(ToolchainTestGroup, VerifyToolchain_PathContainsDir) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -176,7 +176,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_PathContainsDir) { } TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_CompilerVersion) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -198,7 +198,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_CompilerVersion) { TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_CompilerVersionFailure) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -219,7 +219,7 @@ TEST(ToolchainTestGroup, } TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArch) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -240,7 +240,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArch) { } TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArchFailure) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -261,7 +261,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArchFailure) { } TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_BothFailure) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -283,7 +283,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_ConditionalAdd_BothFailure) { } TEST(ToolchainTestGroup, VerifyToolchain_UpdateFalse) { - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; @@ -315,7 +315,7 @@ TEST(ToolchainTestGroup, VerifyToolchain_LockedFolder) { FAIL_TEST("Could not set file permissions"); } - buildcc::Toolchain gcc(buildcc::Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", + buildcc::Toolchain gcc(buildcc::ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld"); buildcc::VerifyToolchainConfig config; diff --git a/buildcc/toolchains/include/toolchains/toolchain_gcc.h b/buildcc/toolchains/include/toolchains/toolchain_gcc.h index ebf4be40..9e54351f 100644 --- a/buildcc/toolchains/include/toolchains/toolchain_gcc.h +++ b/buildcc/toolchains/include/toolchains/toolchain_gcc.h @@ -40,7 +40,7 @@ constexpr const char *const kGccPrefixLibDir = "-L"; class Toolchain_gcc : public Toolchain { public: Toolchain_gcc() - : Toolchain(Toolchain::Id::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld") {} + : Toolchain(ToolchainId::Gcc, "gcc", "as", "gcc", "g++", "ar", "ld") {} Toolchain_gcc(const Toolchain_gcc &gcc) = delete; private: diff --git a/buildcc/toolchains/include/toolchains/toolchain_msvc.h b/buildcc/toolchains/include/toolchains/toolchain_msvc.h index 6a5a8ceb..db40a8d6 100644 --- a/buildcc/toolchains/include/toolchains/toolchain_msvc.h +++ b/buildcc/toolchains/include/toolchains/toolchain_msvc.h @@ -41,8 +41,7 @@ constexpr const char *const kMsvcPrefixLibDir = "/LIBPATH:"; class Toolchain_msvc : public Toolchain { public: Toolchain_msvc() - : Toolchain(Toolchain::Id::Msvc, "msvc", "cl", "cl", "cl", "lib", - "link") {} + : Toolchain(ToolchainId::Msvc, "msvc", "cl", "cl", "cl", "lib", "link") {} Toolchain_msvc(const Toolchain_msvc &gcc) = delete; private: diff --git a/docs/source/user_api/toolchain.rst b/docs/source/user_api/toolchain.rst index a3710106..4fd1b5ae 100644 --- a/docs/source/user_api/toolchain.rst +++ b/docs/source/user_api/toolchain.rst @@ -6,8 +6,6 @@ toolchain.h .. doxygenclass:: buildcc::Toolchain -.. doxygentypedef:: ToolchainId - .. doxygentypedef:: BaseToolchain toolchain_verify.h diff --git a/docs/source/user_api/toolchain_utils.rst b/docs/source/user_api/toolchain_utils.rst index 8c2dfcd7..3a2976ae 100644 --- a/docs/source/user_api/toolchain_utils.rst +++ b/docs/source/user_api/toolchain_utils.rst @@ -17,3 +17,10 @@ toolchain_config.h -------------------- .. doxygenstruct:: buildcc::ToolchainConfig + +toolchain.h +-------------- + +.. doxygenenum:: buildcc::ToolchainId + +.. doxygenstruct:: buildcc::ToolchainBinaries