diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-06-20 14:27:31 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-06-20 14:27:31 +0200 | 
| commit | 94b0690973a460c86e36a7935adbe201e4f66361 (patch) | |
| tree | 5aff5bc33e92d356dd8c4b4bd7a69a472f5c8e3a | |
| parent | e43c5e6f856ad583579384e1f9509f66e3e0537e (diff) | |
Add explicit target types (with 'auto' being the default)
| -rw-r--r-- | cppbuild.cc | 2 | ||||
| -rw-r--r-- | libcppbuild.cc | 42 | ||||
| -rw-r--r-- | libcppbuild.h | 9 | 
3 files changed, 43 insertions, 10 deletions
diff --git a/cppbuild.cc b/cppbuild.cc index b0f3eae..50c364f 100644 --- a/cppbuild.cc +++ b/cppbuild.cc @@ -7,6 +7,7 @@ BuildConfigurations myConfigs()  	return  	{  		{ +			.type = TargetType::Executable,  			.target = "plugingui",  			.sources = {  				"drumgizmo/zita-resampler/libs/cresampler.cc", @@ -56,6 +57,7 @@ BuildConfigurations myConfigs2()  	return  	{  		{ +			.type = TargetType::DynamicLibrary,  			.target = "libplugingui.so",  			.sources = {  				"drumgizmo/plugingui/abouttab.cc", diff --git a/libcppbuild.cc b/libcppbuild.cc index 441ba00..c18d725 100644 --- a/libcppbuild.cc +++ b/libcppbuild.cc @@ -33,6 +33,29 @@ std::list<std::shared_ptr<Task>> taskFactory(const BuildConfiguration& config,  {  	std::filesystem::path targetFile(config.target); +	TargetType target_type{config.type}; +	if(target_type == TargetType::Auto) +	{ +		if(targetFile.extension() == ".a") +		{ +			target_type = TargetType::StaticLibrary; +		} +		else if(targetFile.extension() == ".so") +		{ +			target_type = TargetType::DynamicLibrary; +		} +		else if(targetFile.extension() == "") +		{ +			target_type = TargetType::Executable; +		} +		else +		{ +			std::cerr << "Could not deduce target type from target " << +				targetFile.string() << " please specify.\n"; +			exit(1); +		} +	} +  	std::vector<std::string> objects;  	std::list<std::shared_ptr<Task>> tasks;  	for(const auto& file : config.sources) @@ -42,28 +65,27 @@ std::list<std::shared_ptr<Task>> taskFactory(const BuildConfiguration& config,  		objects.push_back(tasks.back()->target());  	} -	if(targetFile.extension() == ".a") +	switch(target_type)  	{ -		// static lib +	case TargetType::StaticLibrary:  		tasks.emplace_back(std::make_shared<TaskAR>(config, settings, config.target,  		                                            objects)); -	} -	else if(targetFile.extension() == ".so") -	{ +		break; + +	case TargetType::DynamicLibrary:  		if(targetFile.stem().string().substr(0, 3) != "lib")  		{  			std::cerr << "Dynamic library target must have 'lib' prefix\n";  			exit(1);  		} -		// dynamic lib  		tasks.emplace_back(std::make_shared<TaskSO>(config, settings, config.target,  		                                            objects)); -	} -	else -	{ -		// executable +		break; + +	case TargetType::Executable:  		tasks.emplace_back(std::make_shared<TaskLD>(config, settings, config.target,  		                                            objects)); +		break;  	}  	return tasks; diff --git a/libcppbuild.h b/libcppbuild.h index a052ac8..5b442f8 100644 --- a/libcppbuild.h +++ b/libcppbuild.h @@ -5,8 +5,17 @@  #include <vector>  //#include <source_location> +enum class TargetType +{ +	Auto, // Default - deduce from target name +	Executable, +	StaticLibrary, +	DynamicLibrary, +}; +  struct BuildConfiguration  { +	TargetType type{TargetType::Auto};  	std::string target;  	std::vector<std::string> sources;  	std::vector<std::string> depends;  | 
