mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into xc7dsp
This commit is contained in:
		
						commit
						ed303b07b7
					
				
					 25 changed files with 219 additions and 86 deletions
				
			
		|  | @ -25,6 +25,26 @@ | |||
| #include <stdio.h> | ||||
| #include <errno.h> | ||||
| 
 | ||||
| #ifdef YOSYS_ENABLE_ZLIB | ||||
| #include <zlib.h> | ||||
| 
 | ||||
| PRIVATE_NAMESPACE_BEGIN | ||||
| #define GZ_BUFFER_SIZE 8192 | ||||
| void decompress_gzip(const std::string &filename, std::stringstream &out) | ||||
| { | ||||
| 	char buffer[GZ_BUFFER_SIZE]; | ||||
| 	int bytes_read; | ||||
| 	gzFile gzf = gzopen(filename.c_str(), "rb"); | ||||
| 	while(!gzeof(gzf)) { | ||||
| 		bytes_read = gzread(gzf, reinterpret_cast<void *>(buffer), GZ_BUFFER_SIZE); | ||||
| 		out.write(buffer, bytes_read); | ||||
| 	} | ||||
| 	gzclose(gzf); | ||||
| } | ||||
| PRIVATE_NAMESPACE_END | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| YOSYS_NAMESPACE_BEGIN | ||||
| 
 | ||||
| #define MAX_REG_COUNT 1000 | ||||
|  | @ -436,6 +456,28 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<s | |||
| 				delete ff; | ||||
| 			else | ||||
| 				f = ff; | ||||
| 			if (f != NULL) { | ||||
| 				// Check for gzip magic
 | ||||
| 				unsigned char magic[3]; | ||||
| 				int n = readsome(*ff, reinterpret_cast<char*>(magic), 3); | ||||
| 				if (n == 3 && magic[0] == 0x1f && magic[1] == 0x8b) { | ||||
| 	#ifdef YOSYS_ENABLE_ZLIB | ||||
| 					log("Found gzip magic in file `%s', decompressing using zlib.\n", filename.c_str()); | ||||
| 					if (magic[2] != 8) | ||||
| 						log_cmd_error("gzip file `%s' uses unsupported compression type %02x\n", | ||||
| 							filename.c_str(), unsigned(magic[2])); | ||||
| 					delete ff; | ||||
| 					std::stringstream *df = new std::stringstream(); | ||||
| 					decompress_gzip(filename, *df); | ||||
| 					f = df; | ||||
| 	#else | ||||
| 					log_cmd_error("File `%s' is a gzip file, but Yosys is compiled without zlib.\n", filename.c_str()); | ||||
| 	#endif | ||||
| 				} else { | ||||
| 					ff->clear(); | ||||
| 					ff->seekg(0, std::ios::beg); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (f == NULL) | ||||
| 			log_cmd_error("Can't open input file `%s' for reading: %s\n", filename.c_str(), strerror(errno)); | ||||
|  |  | |||
|  | @ -420,8 +420,12 @@ namespace RTLIL | |||
| 	// It maintains a reference counter that is used to make sure that the container is not modified while being iterated over.
 | ||||
| 
 | ||||
| 	template<typename T> | ||||
| 	struct ObjIterator | ||||
| 	{ | ||||
| 	struct ObjIterator { | ||||
| 		using iterator_category = std::forward_iterator_tag; | ||||
| 		using value_type = T; | ||||
| 		using difference_type = ptrdiff_t; | ||||
| 		using pointer = T*; | ||||
| 		using reference = T&; | ||||
| 		typename dict<RTLIL::IdString, T>::iterator it; | ||||
| 		dict<RTLIL::IdString, T> *list_p; | ||||
| 		int *refcount_p; | ||||
|  | @ -474,13 +478,25 @@ namespace RTLIL | |||
| 			return it != other.it; | ||||
| 		} | ||||
| 
 | ||||
| 		inline void operator++() { | ||||
| 
 | ||||
| 		inline bool operator==(const RTLIL::ObjIterator<T> &other) const { | ||||
| 			return !(*this != other); | ||||
| 		} | ||||
| 
 | ||||
| 		inline ObjIterator<T>& operator++() { | ||||
| 			log_assert(list_p != nullptr); | ||||
| 			if (++it == list_p->end()) { | ||||
| 				(*refcount_p)--; | ||||
| 				list_p = nullptr; | ||||
| 				refcount_p = nullptr; | ||||
| 			} | ||||
| 			return *this; | ||||
| 		} | ||||
| 
 | ||||
| 		inline const ObjIterator<T> operator++(int) { | ||||
| 			ObjIterator<T> result(*this); | ||||
| 			++(*this); | ||||
| 			return result; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -894,23 +894,26 @@ void run_frontend(std::string filename, std::string command, std::string *backen | |||
| 		design = yosys_design; | ||||
| 
 | ||||
| 	if (command == "auto") { | ||||
| 		if (filename.size() > 2 && filename.substr(filename.size()-2) == ".v") | ||||
| 		std::string filename_trim = filename; | ||||
| 		if (filename_trim.size() > 3 && filename_trim.substr(filename_trim.size()-3) == ".gz") | ||||
| 			filename_trim.erase(filename_trim.size()-3); | ||||
| 		if (filename_trim.size() > 2 && filename_trim.substr(filename_trim.size()-2) == ".v") | ||||
| 			command = "verilog"; | ||||
| 		else if (filename.size() > 2 && filename.substr(filename.size()-3) == ".sv") | ||||
| 		else if (filename_trim.size() > 2 && filename_trim.substr(filename_trim.size()-3) == ".sv") | ||||
| 			command = "verilog -sv"; | ||||
| 		else if (filename.size() > 3 && filename.substr(filename.size()-4) == ".vhd") | ||||
| 		else if (filename_trim.size() > 3 && filename_trim.substr(filename_trim.size()-4) == ".vhd") | ||||
| 			command = "vhdl"; | ||||
| 		else if (filename.size() > 4 && filename.substr(filename.size()-5) == ".blif") | ||||
| 		else if (filename_trim.size() > 4 && filename_trim.substr(filename_trim.size()-5) == ".blif") | ||||
| 			command = "blif"; | ||||
| 		else if (filename.size() > 5 && filename.substr(filename.size()-6) == ".eblif") | ||||
| 		else if (filename_trim.size() > 5 && filename_trim.substr(filename_trim.size()-6) == ".eblif") | ||||
| 			command = "blif"; | ||||
| 		else if (filename.size() > 4 && filename.substr(filename.size()-5) == ".json") | ||||
| 		else if (filename_trim.size() > 4 && filename_trim.substr(filename_trim.size()-5) == ".json") | ||||
| 			command = "json"; | ||||
| 		else if (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") | ||||
| 		else if (filename_trim.size() > 3 && filename_trim.substr(filename_trim.size()-3) == ".il") | ||||
| 			command = "ilang"; | ||||
| 		else if (filename.size() > 3 && filename.substr(filename.size()-3) == ".ys") | ||||
| 		else if (filename_trim.size() > 3 && filename_trim.substr(filename_trim.size()-3) == ".ys") | ||||
| 			command = "script"; | ||||
| 		else if (filename.size() > 3 && filename.substr(filename.size()-4) == ".tcl") | ||||
| 		else if (filename_trim.size() > 3 && filename_trim.substr(filename_trim.size()-4) == ".tcl") | ||||
| 			command = "tcl"; | ||||
| 		else if (filename == "-") | ||||
| 			command = "script"; | ||||
|  |  | |||
|  | @ -52,6 +52,7 @@ | |||
| #include <stdexcept> | ||||
| #include <memory> | ||||
| #include <cmath> | ||||
| #include <cstddef> | ||||
| 
 | ||||
| #include <sstream> | ||||
| #include <fstream> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue