diff --git a/implementations/Crafter.Build-Configuration.cpp b/implementations/Crafter.Build-Configuration.cpp index 794f0c4..cc748b7 100644 --- a/implementations/Crafter.Build-Configuration.cpp +++ b/implementations/Crafter.Build-Configuration.cpp @@ -82,6 +82,21 @@ namespace Crafter { libs.push_back(it.get()); } } + if(config.contains("include_dirs")) { + for (auto it : config["include_dirs"]) { + includeDirs.push_back(it.get()); + } + } + if(config.contains("lib_dirs")) { + for (auto it : config["lib_dirs"]) { + libDirs.push_back(it.get()); + } + } + if(config.contains("cuda")) { + for (auto it : config["cuda"]) { + cuda.push_back(it.get()); + } + } if(config.contains("interfaces")) { const std::vector tempModuleFiles = config["interfaces"].get>(); std::vector> tempModulePaths = std::vector>(tempModuleFiles.size()); diff --git a/implementations/Crafter.Build-Project.cpp b/implementations/Crafter.Build-Project.cpp index 901236e..31a2248 100644 --- a/implementations/Crafter.Build-Project.cpp +++ b/implementations/Crafter.Build-Project.cpp @@ -250,6 +250,10 @@ namespace Crafter { command += " -O3"; } + for(const std::string& dir : config.includeDirs) { + command += std::format(" -I{}", dir); + } + if(config.target != "wasm32-wasi") { const std::string stdPcm = std::format("{}/std.pcm", exeDir); std::string gccVersion = RunCommand("g++ -dumpversion"); @@ -337,12 +341,19 @@ namespace Crafter { for(const fs::path& cFile: config.c_files) { - files+=std::format("{}_source.o ",(buildDir/cFile.filename()).string()); + files+=std::format(" {}_source.o ",(buildDir/cFile.filename()).string()); if(!fs::exists((buildDir/cFile.filename()).string()+"_source.o") || fs::last_write_time(cFile.string()+".c") > fs::last_write_time((buildDir/cFile.filename()).string()+"_source.o")) { threads.emplace_back(&RunClang, std::format("clang {}.c -c -o {}_source.o", cFile.string(), (buildDir/cFile.filename()).string())); } } + for(const fs::path& cFile: config.cuda) { + files+=std::format(" {}_source.o ",(buildDir/cFile.filename()).string()); + if(!fs::exists((buildDir/cFile.filename()).string()+"_source.o") || fs::last_write_time(cFile.string()+".cu") > fs::last_write_time((buildDir/cFile.filename()).string()+"_source.o")) { + threads.emplace_back(&RunClang, std::format("nvcc {}.cu -c -o {}_source.o", cFile.string(), (buildDir/cFile.filename()).string())); + } + } + std::vector resultInterfaces(config.interfaces.size()); for(uint_fast32_t i = 0; i < config.interfaces.size(); i++) { @@ -393,6 +404,10 @@ namespace Crafter { command += std::format(" -l{}", lib); } + for(const std::string& dir : config.libDirs) { + command += std::format(" -L{}", dir); + } + fileThread.join(); if(config.dependencies.size() > 0){ diff --git a/interfaces/Crafter.Build-Configuration.cppm b/interfaces/Crafter.Build-Configuration.cppm index 5b9eb30..dd5ccde 100644 --- a/interfaces/Crafter.Build-Configuration.cppm +++ b/interfaces/Crafter.Build-Configuration.cppm @@ -46,7 +46,10 @@ namespace Crafter { std::string standard; std::vector> interfaces; std::vector implementations; + std::vector includeDirs; + std::vector libDirs; std::vector c_files; + std::vector cuda; std::vector, Configuration&>> dependencies; std::vector shaders; std::vector additionalFiles;