import os import sys import xml.etree.ElementTree as ET from sys import argv as arg # # the goal is to parse SW4STM32 project configs files to get # list of files to compile # cflags # ldflags print "start" # arg1: path of the project prj=arg[1] # arg2: name of the build configuration buildconfig=arg[2] # arg3: root of the compilation myroot=arg[3] confdir=myroot+"/out/"+buildconfig+"/conf" print "prj: "+prj print "myroot: "+myroot print "confdir: "+confdir print "buildconfig: "+buildconfig os.chdir(prj) proj_tree = ET.parse(".project") cproj_tree = ET.parse(".cproject") #os.chdir(myroot) if os.path.exists(confdir)!=True: os.mkdir(confdir) if prj.find("(")!=-1: print "bad prj path" sys.stderr.write("bad prj path: "+prj+"\n") exit(1) # # convert path and checks that path is valid # def fullpath(filename): # get absolute path p=os.path.abspath(filename); # workaround: there is a mistake in some projects p=p.replace("STM32_USB_HOST_Library","STM32_USB_Host_Library") # some path contain windows style p=p.replace("\\","/") # containts space at the end p=p.replace(" ","") # check if path is valid #print "check path: "+p if os.path.exists(p)!=True: print "prj: "+prj print "original path: "+filename sys.stderr.write("error check path: "+p+" fails\n") exit(1); return p # # get the source code file list # print "file list" f=open(confdir+"/config.in", 'w') root = proj_tree.getroot() f.write("CSRC += \\\n") for i in root.iter('link'): a=i.find('locationURI') if a==None: a=i.find('location') if a==None: print "could not find any file" exit(1) if a.text is None: print "no text" else: #print "text:"+a.text temp=a.text if ((temp.find(".txt")==-1) & (temp.find(".gdb")==-1) & (temp.find(".launch")==-1) & (temp.find(".sh")==-1) & (temp.find("README")==-1)): temp=temp.replace("PARENT-1-PROJECT_LOC/", "../") temp=temp.replace("PARENT-2-PROJECT_LOC/", "../../") temp=temp.replace("PARENT-3-PROJECT_LOC/", "../../../") temp=temp.replace("PARENT-4-PROJECT_LOC/", "../../../../") temp=temp.replace("PARENT-5-PROJECT_LOC/", "../../../../../") temp=temp.replace("PARENT-6-PROJECT_LOC/", "../../../../../../") temp=temp.replace("PARENT-7-PROJECT_LOC/", "../../../../../../../") temp=temp.replace("PROJECT_LOC/", "../") #print temp temp=fullpath(temp) f.write(temp+" \\\n") f.write("\n") cflags="" ldlibs="" ldscript="" root = cproj_tree.getroot() count=0 for j in root.iter('configuration'): temp=j.get('name') if temp == buildconfig: for i in j.iter('option'): a=i.get('superClass') if a == 'gnu.c.compiler.option.include.paths': for j in i.iter('listOptionValue'): temp=j.get('value') if temp != "": temp=temp.replace("\\","/") #workaround remove first occurency of "../" temp=temp.replace("../", "",1) temp=fullpath(temp) #print temp cflags=cflags+" -I"+temp+" \\\n" if a == 'gnu.c.compiler.option.preprocessor.def.symbols': for j in i.iter('listOptionValue'): temp=j.get('value') if temp != "": #print temp cflags=cflags+" -D"+temp+" \\\n" if a == 'fr.ac6.managedbuild.tool.gnu.cross.c.linker.script': temp=i.get('value') temp=temp.replace("../", "",1) temp=fullpath(temp) #print temp ldscript=temp if a == 'gnu.c.link.option.paths': for j in i.iter('listOptionValue'): temp=j.get('value') temp=temp.replace("../", "",1) temp=fullpath(temp) ldlibs=ldlibs+" -L"+temp+"/" if a == 'gnu.c.link.option.libs': for j in i.iter('listOptionValue'): temp=j.get('value') ldlibs=ldlibs+" -l"+temp #workaround for STM327x6G_EVAL #cflags=cflags+" -DUSE_IOEXPANDER" print "cflags="+cflags f.write("CFLAGS += "+cflags+"\n") f.write("\n") print "ldlibs="+ldlibs f.write("LDLIBS += "+ldlibs+"\n") f.write("\n") f.write("LDSCRIPT += "+ldscript+"\n") f.write("\n") f.close(); print "exit"