From fba632e745c2deb4c112c0e6c60ebb9e3e409544 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Mon, 2 Mar 2026 21:10:22 +0100 Subject: [PATCH] windows fix --- implementations/Crafter.Build-Command.cpp | 33 +++++------------------ 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/implementations/Crafter.Build-Command.cpp b/implementations/Crafter.Build-Command.cpp index 6332a54..b28269c 100644 --- a/implementations/Crafter.Build-Command.cpp +++ b/implementations/Crafter.Build-Command.cpp @@ -123,40 +123,21 @@ namespace Crafter { void BuildMsvcStdPcm(const Project& project, const Configuration& config) { fs::path exeDir = GetPath(); fs::create_directories(exeDir/config.target); - std::string stdPcm = std::format("{}\\{}\\std.pcm", exeDir.string(), config.target); - std::string stdcppm = std::format("{}\\{}\\std.cppm", exeDir.string(), config.target); - std::string directoryPath = RunCommand("\"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -latest -property installationPath"); - - directoryPath.pop_back(); - - directoryPath += "\\VC\\Tools"; - - std::vector folders; - - // Iterate through the directory and collect all subdirectories - for (const auto& entry : fs::directory_iterator(directoryPath+"\\MSVC")) { - if (entry.is_directory()) { - folders.push_back(entry.path().filename().string()); - } + const char* libcxx = std::getenv("LIBCXX_DIR"); + if (!libcxx) { + std::cout << "LIBCXX_DIR environment variable not set" << std::endl; + throw std::runtime_error("LIBCXX_DIR environment variable not set"); } - // Sort the folders by version in descending order - std::sort(folders.begin(), folders.end(), [](const std::string& a, const std::string& b) { - return std::lexicographical_compare(b.begin(), b.end(), a.begin(), a.end()); - }); - - std::string msvcVersion = folders.front(); - - std::string sourceFilePath = directoryPath + "\\MSVC\\" + msvcVersion + "\\modules\\std.ixx"; + std::string stdPcm = std::format("{}\\{}\\std.pcm", exeDir.string(), config.target); + std::string stdcppm = std::format("{}\\modules\\c++\v1\\std.cppm", libcxx) if(!fs::exists(stdPcm) || fs::last_write_time(stdPcm) < fs::last_write_time(sourceFilePath)) { - fs::copy(sourceFilePath, stdcppm, fs::copy_options::overwrite_existing); - std::string result = RunCommand(std::format("cd {}\\{} && {} && clang-cl.exe /EHsc /MD /std:c++latest --target=x86_64-pc-windows-msvc -Wno-include-angled-in-module-purview -Wno-reserved-identifier -Wno-reserved-module-identifier --precompile std.cppm -o std.pcm", exeDir.string(), config.target, vsVars, stdPcm)); + std::string result = RunCommand(std::format("clang++ --target={} -march=native -mtune=native -isystem %LIBCXX_DIR%\\include\\c++\\v1 -nostdinc++ -nostdlib++ -std=c++26 -Wno-reserved-identifier -Wno-reserved-module-identifier --precompile %LIBCXX_DIR%\\modules\\c++\v1\\std.cppm -o {}", config.target stdPcm)); if(result != "") { throw std::runtime_error(result); } - result = RunCommand(std::format("cd {}\\{} && {} && cl.exe /std:c++latest /EHsc /nologo /W4 /MD /c \"{}\"", exeDir.string(), config.target, vsVars, sourceFilePath)); } }