import os import re from string import Template import rtconfig cproject_temp = """ """ project_temp = """ __project_name_flag__ org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder full,incremental, org.eclipse.cdt.core.cnature org.rt-thread.studio.rttnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature """ projcfg_ini_temp = """#RT-Thread Studio Project Configuration #Sat Jan 16 15:18:32 CST 2021 project_type=rtt chip_name=${chip_name} cpu_name=None target_freq= clock_source= dvendor_name= rx_pin_name= rtt_path= source_freq= csp_path= sub_series_name= selected_rtt_version=latest cfg_version=v3.0 tool_chain=gcc uart_name= tx_pin_name= rtt_nano_path= output_project_path= hardware_adapter=J-Link project_name=${project_name}""" eclipse_core_runtime_temp = """content-types/enabled=true content-types/org.eclipse.cdt.core.asmSource/file-extensions=s eclipse.preferences.version=1""" makefile_targets_temp = """clean2: \t-$(RM) $(CC_DEPS)$(C++_DEPS)$(C_UPPER_DEPS)$(CXX_DEPS)$(SECONDARY_FLASH)$(SECONDARY_SIZE)$(ASM_DEPS)$(S_UPPER_DEPS)$(C_DEPS)$(CPP_DEPS) \t-$(RM) $(OBJS) *.elf \t-@echo ' ' *.elf: $(wildcard ../linkscripts/*/*.lds) $(wildcard ../linkscripts/*/*/*.lds)""" def get_mcu_info(uvproj_file_path): if os.path.exists(uvproj_file_path): with open(uvproj_file_path, mode='r') as f: data = f.read() result = re.search("(.*)", data) if result: return result.group(1) else: return "" else: return "" def gen_makefile_targets(output_file_path): try: w_str = makefile_targets_temp dir_name = os.path.dirname(output_file_path) if not os.path.exists(dir_name): os.makedirs(dir_name) with open(output_file_path, 'w') as f: f.write(w_str) return True except Exception as e: print(e) return False def gen_org_eclipse_core_runtime_prefs(output_file_path): try: w_str = eclipse_core_runtime_temp dir_name = os.path.dirname(output_file_path) if not os.path.exists(dir_name): os.makedirs(dir_name) with open(output_file_path, 'w') as f: f.write(w_str) return True except Exception as e: print(e) return False def gen_cproject_file(output_file_path): CFLAGS = rtconfig.CFLAGS AFLAGS = rtconfig.AFLAGS LFLAGS = rtconfig.LFLAGS if 'CXXFLAGS' in dir(rtconfig): CXXFLAGS = rtconfig.CXXFLAGS else: CXXFLAGS = "" if "-T" in LFLAGS: items = str(LFLAGS).split() t_index = items.index("-T") items[t_index] = "" items[t_index + 1] = "" LFLAGS = " ".join(items) try: w_str = cproject_temp if "a_misc_flag" in w_str: w_str = w_str.replace("a_misc_flag", AFLAGS) if "c_misc_flag" in w_str: w_str = w_str.replace("c_misc_flag", CFLAGS) if "cpp_misc_flag" in w_str: w_str = w_str.replace("cpp_misc_flag", CXXFLAGS) if "c_link_misc_flag" in w_str: w_str = w_str.replace("c_link_misc_flag", LFLAGS) if "cpp_link_misc_flag" in w_str: w_str = w_str.replace("cpp_link_misc_flag", LFLAGS) dir_name = os.path.dirname(output_file_path) if not os.path.exists(dir_name): os.makedirs(dir_name) with open(output_file_path, 'w') as f: f.write(w_str) return True except Exception as e: return False def gen_project_file(output_file_path): try: w_str = project_temp dir_name = os.path.dirname(output_file_path) if not os.path.exists(dir_name): os.makedirs(dir_name) with open(output_file_path, 'w') as f: f.write(w_str) return True except Exception as e: return False def gen_projcfg_ini_file(chip_name, project_name, output_file_path): try: projcfg_file_tmp = Template(projcfg_ini_temp) w_str = projcfg_file_tmp.substitute(project_name=project_name, chip_name=(chip_name)) dir_name = os.path.dirname(output_file_path) if not os.path.exists(dir_name): os.makedirs(dir_name) with open(output_file_path, 'w') as f: f.write(w_str) return True except Exception as e: return False