Exemple #1
0
	def build_job(self, board_type, sheets, meta) :

		if board_type is None :
			self.__messages.put(("status", (("build", False, "board_type_not_set"), {})))
			return None

		board_info = build.get_board_types()[board_type]
		variant = board_info["build.variant"] if "build.variant" in board_info else "standard" 

		self.__messages.put(("status", (("build", True, "build_started"), {})))

		w_data = serializer.get_workbench_data(self)#TODO refac build invocation

		out_fobj = StringIO()
		try :
			w = Workbench(passive=True, do_create_block_factory=False,
				blockfactory=self.blockfactory)
			local_lib = core.BasicBlocksFactory(load_basic_blocks=False)
			local_lib.load_standalone_workbench_lib(None, "<local>",
				library=w.blockfactory,
				w_data=w_data)
			library = core.SuperLibrary([w.blockfactory, local_lib])
			serializer.restore_workbench(w_data, w,
				use_cached_proto=False,
				library=library)
			libs_used, = implement.implement_workbench(w, w.sheets, w.get_meta(),
				ccodegen, core.KNOWN_TYPES, library, out_fobj)
		except Exception as e:
			print(here(), traceback.format_exc())
			self.__messages.put(("status", (("build", False, str(e)), {})))
			return None

		if out_fobj.tell() < 1 :
			self.__messages.put(("status", (("build", False, "no_code_generated"), {})))
			return None

		source = out_fobj.getvalue()
		print(source)

		all_in_one_arduino_dir = self.config.get("Path", "all_in_one_arduino_dir")
		libc_dir, tools_dir, boards_txt, target_files_dir = build.get_avr_arduino_paths(
			all_in_one_arduino_dir=all_in_one_arduino_dir)

		source_dirs = set()
		for l in library.libs :
			if l.name in libs_used :
				for src_file in l.source_files :
					source_dirs.add(os.path.dirname(src_file))

		install_path = os.getcwd()#XXX replace os.getcwd() with path to dir with executable file
		blob_stream = StringIO()

#		term_stream = StringIO()
#		term_stream = sys.stdout
		term_stream = Workbench.TermStream(self.__messages)


		try :
			rc, = build.build_source(board_type, source,
				aux_src_dirs=(
					(os.path.join(target_files_dir, "cores", "arduino"), False),
					(os.path.join(target_files_dir, "variants", variant), False),
	#				(os.path.join(install_path, "library", "arduino"), False),
				) + tuple( (path, True) for path in source_dirs ),#TODO derive from libraries used
				aux_idirs=[ os.path.join(install_path, "target", "arduino", "include") ],
				boards_txt=boards_txt,
				libc_dir=libc_dir,
	#			board_db={},
				ignore_file=None,#"amkignore",
	#			ignore_lines=( "*.cpp", "*.hpp", "*" + os.path.sep + "main.cpp", ), #TODO remove this filter with adding cpp support to build.py
				ignore_lines=( "*" + os.path.sep + "main.cpp", ),
	#			prog_port=None,
	#			prog_driver="avrdude", # or "dfu-programmer"
	#			prog_adapter="arduino", #None for dfu-programmer
				optimization="-Os",
				verbose=False,
				skip_programming=True,#False,
	#			dry_run=False,
				blob_stream=blob_stream,
				term=term_stream)
		except Exception as e :
			self.__messages.put(("status", (("build", False, "compilation_failed"), {"term_stream":str(e)})))
			return None

		msg_info = {}
#		if term_stream != sys.stdout :
#			msg_info["term_stream"] = term_stream

		if rc :
			self.__blob = blob_stream.getvalue()
			self.__blob_time = time.time()
		else :
			self.__messages.put(("status", (("build", False, "compilation_failed"), msg_info)))
			return None
#			return (False, "build_failed")

		self.__messages.put(("status", (("build", True, ""), msg_info)))
Exemple #2
0
			"build.f_cpu" : "8000000L",
			"upload.maximum_size" : "16000"#XXX
		}
	}
#	AUX_SRC_DIR = "/usr/share/arduino/hardware/arduino/cores/arduino"
	x = 0
	if x == 0 :
		source = "void main() { for (;;); }"
		hexstream = StringIO()
		rc, = build_source("16u2@8M", source,
			aux_src_dirs = [],#[ src_dir_t(AUX_SRC_DIR, False) ],
			boards_txt = None, #BOARDS_TXT,
			ignore_file = "amkignore",
			prog_port = "/dev/ttyACM0",
			prog_driver = "avrdude",
			prog_adapter = None, #"arduino", #None for dfu-programmer
			optimization = "-Os",#default "-Os",
			verbose = True,
			skip_programming = True,
			dry_run = True,
			board_db=boards,
			blob_stream=hexstream)
		print(hexstream.getvalue())
	elif x == 1 :
		rc, = build("16u2@8M", os.getcwd(),
			wdir_recurse = True,
			aux_src_dirs = [],#[ src_dir_t(AUX_SRC_DIR, False) ],
			aux_src_files=[],
			boards_txt = None, #BOARDS_TXT,
			ignore_file = "amkignore",
			prog_port = "/dev/ttyACM0",
Exemple #3
0
    source = out_fobj.getvalue()
    print source

    blob_stream = StringIO()
    rc, = build.build_source(
        w.get_board(),
        source,
        aux_src_dirs=[
            ("/usr/share/arduino/hardware/arduino/cores/arduino", False),
            (os.path.join(os.getcwd(), "library", "arduino"), False)
        ],  #TODO derive from libraries used
        boards_txt=build.BOARDS_TXT,
        #		board_db={},
        ignore_file=None,  #"amkignore",
        ignore_lines=[
            "*.cpp", "*.hpp"
        ],  #TODO remove this filter with adding cpp support to build.py
        #		prog_port=None,
        #		prog_driver="avrdude", # or "dfu-programmer"
        #		prog_adapter="arduino", #None for dfu-programmer
        optimization="-Os",
        verbose=False,
        skip_programming=True,  #False,
        #		dry_run=False,
        blob_stream=blob_stream)

    blob = blob_stream.getvalue()
    #	print blob

    board_info = w.get_board_types()[w.get_board()]
Exemple #4
0
         "upload.maximum_size": "16000"  #XXX
     }
 }
 #	AUX_SRC_DIR = "/usr/share/arduino/hardware/arduino/cores/arduino"
 x = 0
 if x == 0:
     source = "void main() { for (;;); }"
     hexstream = StringIO()
     rc, = build_source(
         "16u2@8M",
         source,
         aux_src_dirs=[],  #[ src_dir_t(AUX_SRC_DIR, False) ],
         boards_txt=None,  #BOARDS_TXT,
         ignore_file="amkignore",
         prog_port="/dev/ttyACM0",
         prog_driver="avrdude",
         prog_adapter=None,  #"arduino", #None for dfu-programmer
         optimization="-Os",  #default "-Os",
         verbose=True,
         skip_programming=True,
         dry_run=True,
         board_db=boards,
         blob_stream=hexstream)
     print(hexstream.getvalue())
 elif x == 1:
     rc, = build(
         "16u2@8M",
         os.getcwd(),
         wdir_recurse=True,
         aux_src_dirs=[],  #[ src_dir_t(AUX_SRC_DIR, False) ],
         aux_src_files=[],
Exemple #5
0
def main() :
	started = time.time()

	files = get_files("./examples")
#	print here(), files

	main_lib = core.create_block_factory(scan_dir=os.path.join(os.getcwd(), "library"))

#	all_in_one_arduino_dir = self.config.get("Path", "all_in_one_arduino_dir")
	libc_dir, tools_dir, boards_txt, target_files_dir = build.get_avr_arduino_paths()

	failed = []
	succeeded = []

	for fname in files :

		print here(), "loading:", fname

		local_lib = core.BasicBlocksFactory(load_basic_blocks=False)

		try :
			local_lib.load_standalone_workbench_lib(fname, "<local>")
		except Exception :
			print(here())
			traceback.print_exc()
			failed.append((fname, "loading_as_library"))
			continue

		library = core.SuperLibrary([main_lib, local_lib])

		w = dfs.Workbench(passive=True)

		try :
			with open(fname, "rb") as f :
				serializer.unpickle_workbench(f, w, use_cached_proto=False, library=library)
		except Exception :
			print(here())
			traceback.print_exc()
			failed.append((fname, "loading_worbench"))
			continue

		sheets = w.sheets
		global_meta = w.get_meta()

		out_fobj = StringIO()

		try :
			libs_used, = implement.implement_workbench(w, sheets, global_meta,
				ccodegen, core.KNOWN_TYPES, library, out_fobj)#sys.stdout)
		except Exception :
			print(here())
			traceback.print_exc()
			failed.append((fname, "implementing"))
			continue

		if out_fobj.tell() < 1 :
			print(here())
			failed.append((fname, "no_code_generated"))
			continue

		source = out_fobj.getvalue()

		source_dirs = set()
		for l in library.libs :
			if l.name in libs_used :
				for src_file in l.source_files :
					source_dirs.add(os.path.dirname(src_file))

		install_path = os.getcwd()
		blob_stream = StringIO()
		term_stream = StringIO()

		board_type = w.get_board()

		try :
			board_info = build.get_board_types()[board_type]
			variant = board_info["build.variant"] if "build.variant" in board_info else "standard" 
		except Exception :
			print(here())
			traceback.print_exc()
			failed.append((fname, "get_target_info"))
			continue


		try :
			rc, = build.build_source(board_type, source,
				aux_src_dirs=(
					(os.path.join(target_files_dir, "cores", "arduino"), False),
					(os.path.join(target_files_dir, "variants", variant), False),
	#				(os.path.join(install_path, "library", "arduino"), False),
				) + tuple( (path, True) for path in source_dirs ),#TODO derive from libraries used
				aux_idirs=[ os.path.join(install_path, "target", "arduino", "include") ],
				boards_txt=boards_txt,
				libc_dir=libc_dir,
	#			board_db={},
				ignore_file=None,#"amkignore",
	#			ignore_lines=( "*.cpp", "*.hpp", "*" + os.path.sep + "main.cpp", ), #TODO remove this filter with adding cpp support to build.py
				ignore_lines=( "*" + os.path.sep + "main.cpp", ),
	#			prog_port=None,
	#			prog_driver="avrdude", # or "dfu-programmer"
	#			prog_adapter="arduino", #None for dfu-programmer
				optimization="-Os",
				verbose=False,
				skip_programming=True,#False,
	#			dry_run=False,
				blob_stream=blob_stream,
				term=term_stream)
		except Exception :
			print(here())
			failed.append((fname, "build_failed"))
			continue



		succeeded.append((fname, ))

	finished = time.time()


	assert(len(failed) + len(succeeded) == len(files))

	print("")
	print("done in {:.3}s, {} of {} failed".format(finished - started, len(failed), len(files)))
	print("")
	print("failed files:")
	pprint(failed)
Exemple #6
0
	implement_workbench(sheets, global_meta,
		ccodegen, KNOWN_TYPES, blockfactory, out_fobj)

	source = out_fobj.getvalue()
	print source

	blob_stream = StringIO()
	rc, = build.build_source(w.get_board(), source,
		aux_src_dirs=[
			("/usr/share/arduino/hardware/arduino/cores/arduino", False),
			(os.path.join(os.getcwd(), "library", "arduino"), False)
		],#TODO derive from libraries used
		boards_txt=build.BOARDS_TXT,
#		board_db={},
		ignore_file=None,#"amkignore",
		ignore_lines=[ "*.cpp", "*.hpp" ], #TODO remove this filter with adding cpp support to build.py
#		prog_port=None,
#		prog_driver="avrdude", # or "dfu-programmer"
#		prog_adapter="arduino", #None for dfu-programmer
		optimization="-Os",
		verbose=False,
		skip_programming=True,#False,
#		dry_run=False,
		blob_stream=blob_stream)

	blob = blob_stream.getvalue()
#	print blob

	board_info = w.get_board_types()[w.get_board()]
	prog_mcu = board_info["build.mcu"]
	rc = build.program("avrdude", w.get_port(), "arduino", prog_mcu, None,