From 1ca387f9c0028599fc2a1495680bcb72cac73cb8 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 2 Apr 2025 21:54:55 +0200 Subject: WIP --- src/rebuild.cc | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src/rebuild.cc') diff --git a/src/rebuild.cc b/src/rebuild.cc index d62e998..afa1b6d 100644 --- a/src/rebuild.cc +++ b/src/rebuild.cc @@ -145,6 +145,8 @@ bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[ config.flags.cxxflags.emplace_back(ctor::cxx_opt::optimization, "3"); config.flags.cxxflags.emplace_back(ctor::cxx_opt::cpp_std, "c++20"); + config.flags.cxxflags.push_back({ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"}); + const auto& c = ctor::get_configuration(); if(c.has(ctor::cfg::ctor_includedir)) { @@ -156,13 +158,32 @@ bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[ config.flags.ldflags.emplace_back(ctor::ld_opt::library_path, c.get(ctor::cfg::ctor_libdir)); } - config.flags.ldflags.emplace_back(ctor::ld_opt::link, "ctor"); + + // Static linking with the ctor lib is toolchain specific but to compiler + // enforce support for all toolchains a switch is used instead of a per + // target ldflags. + auto toolchain = getToolChain(config.system); + switch(toolchain) + { + case ctor::toolchain::msvc: + config.flags.ldflags.emplace_back(ctor::ld_opt::link, "libctor.lib"); + break; + case ctor::toolchain::gcc: + case ctor::toolchain::clang: + case ctor::toolchain::any: + case ctor::toolchain::none: + config.flags.ldflags.emplace_back(ctor::ld_opt::link, "ctor"); + break; + } + config.flags.ldflags.emplace_back(ctor::ld_opt::threads); + config.flags.ldflags.push_back({ctor::toolchain::msvc, ctor::ld_opt::custom, "/subsystem:console"}); + ctor::settings settings{global_settings}; settings.verbose = -1; // Make check completely silent. - // override builddir to use ctor subdir + // Override builddir to use ctor subdir auto ctor_builddir = std::filesystem::path(settings.builddir) / "ctor"; settings.builddir = ctor_builddir.string(); -- cgit v1.2.3