diff options
Diffstat (limited to 'task_ld.cc')
| -rw-r--r-- | task_ld.cc | 23 | 
1 files changed, 21 insertions, 2 deletions
@@ -40,10 +40,12 @@ TaskLD::TaskLD(const BuildConfiguration& config,                 const Settings& settings,                 const std::string& target,                 const std::vector<std::string>& objects) -	: Task(addPrefix(config.depends, settings)) +	: Task(config, addPrefix(config.depends, settings))  	, config(config)  	, settings(settings)  { +	target_type = TargetType::Executable; +  	targetFile = settings.builddir;  	targetFile /= target;  	for(const auto& object : objects) @@ -62,6 +64,17 @@ TaskLD::TaskLD(const BuildConfiguration& config,  	flagsFile = settings.builddir / targetFile.stem();  	flagsFile += ".flags"; + +	target_type = TargetType::Executable; +	_language = Language::C; +	for(const auto& source : config.sources) +	{ +		std::filesystem::path sourceFile(source); +		if(sourceFile.extension().string() != ".c") +		{ +			_language = Language::Cpp; +		} +	}  }  bool TaskLD::dirtyInner() @@ -146,7 +159,13 @@ int TaskLD::runInner()  		std::cout << "LD => " << targetFile.string() << "\n";  	} -	return execute("/usr/bin/g++", args, settings.verbose > 0); +	auto tool = getConfiguration("host-cpp", "/usr/bin/g++"); +	if(language() == Language::C) +	{ +		tool = getConfiguration("host-cc", "/usr/bin/gcc"); +	} + +	return execute(tool, args, settings.verbose > 0);  }  int TaskLD::clean()  | 
