2013-04-18 01:46:47 +02:00
|
|
|
#!/usr/bin/python
|
2013-04-21 22:17:47 +02:00
|
|
|
import lutinDebug as debug
|
2013-04-18 22:09:45 +02:00
|
|
|
import datetime
|
2013-04-21 22:17:47 +02:00
|
|
|
import lutinTools
|
|
|
|
import lutinModule
|
2013-04-18 01:46:47 +02:00
|
|
|
|
2013-04-18 22:09:45 +02:00
|
|
|
class Target:
|
2013-04-21 22:17:47 +02:00
|
|
|
def __init__(self, name, typeCompilator, debugMode):
|
|
|
|
self.name=name
|
2013-04-18 22:09:45 +02:00
|
|
|
debug.info("create board target : "+self.name);
|
2013-04-21 22:17:47 +02:00
|
|
|
if "clang"==typeCompilator:
|
2013-04-18 22:09:45 +02:00
|
|
|
self.cc='clang'
|
|
|
|
self.xx='clang++'
|
|
|
|
else:
|
|
|
|
self.cc='gcc'
|
|
|
|
self.xx='g++'
|
|
|
|
self.ar='ar'
|
|
|
|
self.ld='ld'
|
|
|
|
self.nm='nm'
|
|
|
|
self.strip='strip'
|
|
|
|
self.ranlib='ranlib'
|
|
|
|
self.dlltool='dlltool'
|
|
|
|
###############################################################################
|
|
|
|
# Target global variables.
|
|
|
|
###############################################################################
|
|
|
|
self.global_include_cc=''
|
|
|
|
self.global_flags_cc=['-D__TARGET_OS__Linux', "-DBUILD_TIME=\"\\\""+str(datetime.datetime.now())+"\\\"\""]
|
|
|
|
self.global_flags_xx=''
|
|
|
|
self.global_flags_mm=''
|
|
|
|
self.global_flags_m=''
|
|
|
|
self.global_flags_ar='rcs'
|
|
|
|
self.global_flags_ld=''
|
|
|
|
self.global_flags_ld_shared=''
|
|
|
|
self.global_libs_ld=''
|
|
|
|
self.global_libs_ld_shared=''
|
|
|
|
|
2013-04-19 22:06:05 +02:00
|
|
|
self.suffix_dependence='.d'
|
2013-04-18 22:09:45 +02:00
|
|
|
self.suffix_obj='.o'
|
|
|
|
self.suffix_lib_static='.a'
|
|
|
|
self.suffix_lib_dynamic='.so'
|
|
|
|
self.suffix_binary=''
|
|
|
|
self.suffix_package='.deb'
|
|
|
|
|
|
|
|
self.folder_arch="/" + self.name
|
|
|
|
|
2013-04-21 22:17:47 +02:00
|
|
|
if "debug"==debugMode:
|
2013-04-18 22:09:45 +02:00
|
|
|
self.buildMode = "debug"
|
|
|
|
else:
|
|
|
|
self.buildMode = "release"
|
|
|
|
self.folder_out="/out" + self.folder_arch + "/" + self.buildMode
|
|
|
|
self.folder_final="/final"
|
|
|
|
self.folder_staging="/staging"
|
|
|
|
self.folder_build="/build"
|
|
|
|
self.folder_bin="/usr/bin"
|
|
|
|
self.folder_lib="/usr/lib"
|
|
|
|
self.folder_data="/usr/share"
|
|
|
|
self.folder_doc="/usr/share/doc"
|
|
|
|
self.buildDone=[]
|
|
|
|
self.buildTreeDone=[]
|
2013-04-21 22:17:47 +02:00
|
|
|
self.moduleList=[]
|
2013-04-18 22:09:45 +02:00
|
|
|
|
|
|
|
"""
|
|
|
|
return a list of 3 elements :
|
|
|
|
0 : sources files (can be a list)
|
|
|
|
1 : destination file
|
|
|
|
2 : dependence files module (*.d)
|
|
|
|
"""
|
2013-04-19 22:06:05 +02:00
|
|
|
def GenerateFile(self,binaryName,moduleName,basePath,file,type):
|
2013-04-18 22:09:45 +02:00
|
|
|
list=[]
|
|
|
|
if (type=="bin"):
|
|
|
|
list.append(file)
|
2013-04-19 22:06:05 +02:00
|
|
|
list.append(self.GetStagingFolder(binaryName) + self.folder_bin + "/" + moduleName + self.suffix_binary)
|
|
|
|
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
|
2013-04-18 22:09:45 +02:00
|
|
|
elif (type=="obj"):
|
|
|
|
list.append(basePath + "/" + file)
|
2013-04-19 22:06:05 +02:00
|
|
|
list.append(self.GetBuildFolder(moduleName) + file + self.suffix_obj)
|
|
|
|
list.append(self.GetBuildFolder(moduleName) + file + self.suffix_dependence)
|
2013-04-18 22:09:45 +02:00
|
|
|
elif (type=="lib-shared"):
|
|
|
|
list.append(file)
|
2013-04-19 22:06:05 +02:00
|
|
|
list.append(self.GetStagingFolder(binaryName) + self.folder_lib + "/" + moduleName + self.suffix_lib_dynamic)
|
|
|
|
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
|
2013-04-18 22:09:45 +02:00
|
|
|
elif (type=="lib-static"):
|
|
|
|
list.append(file)
|
2013-04-19 22:06:05 +02:00
|
|
|
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_lib_static)
|
|
|
|
list.append(self.GetBuildFolder(moduleName) + moduleName + self.suffix_dependence)
|
2013-04-18 22:09:45 +02:00
|
|
|
else:
|
|
|
|
debug.error("unknow type : " + type)
|
|
|
|
return list
|
|
|
|
|
2013-04-19 22:06:05 +02:00
|
|
|
def GetStagingFolder(self, binaryName):
|
2013-04-21 22:17:47 +02:00
|
|
|
return lutinTools.GetRunFolder() + self.folder_out + self.folder_staging + "/" + binaryName + "/"
|
2013-04-19 22:06:05 +02:00
|
|
|
|
|
|
|
def GetStagingFolderData(self, binaryName):
|
|
|
|
return self.GetStagingFolder(binaryName) + self.folder_data + "/"
|
|
|
|
|
|
|
|
def GetBuildFolder(self, moduleName):
|
2013-04-21 22:17:47 +02:00
|
|
|
return lutinTools.GetRunFolder() + self.folder_out + self.folder_build + "/" + moduleName + "/"
|
2013-04-18 22:09:45 +02:00
|
|
|
|
|
|
|
def IsModuleBuild(self,module):
|
|
|
|
for mod in self.buildDone:
|
|
|
|
if mod == module:
|
|
|
|
return True
|
|
|
|
self.buildDone.append(module)
|
|
|
|
return False
|
|
|
|
|
|
|
|
def IsModuleBuildTree(self,module):
|
|
|
|
for mod in self.buildTreeDone:
|
|
|
|
if mod == module:
|
|
|
|
return True
|
|
|
|
self.buildTreeDone.append(module)
|
|
|
|
return False
|
|
|
|
|
2013-04-21 22:17:47 +02:00
|
|
|
def AddModule(self, newModule):
|
|
|
|
debug.debug("Import nodule for Taget : " + newModule.name)
|
|
|
|
self.moduleList.append(newModule)
|
|
|
|
|
|
|
|
|
|
|
|
# return inherit packages ...
|
|
|
|
"""
|
|
|
|
def Build(self, name, packagesName):
|
|
|
|
for module in self.moduleList:
|
|
|
|
if module.name == name:
|
|
|
|
return module.Build(self, packagesName)
|
|
|
|
debug.error("request to build an un-existant module name : '" + name + "'")
|
|
|
|
"""
|
|
|
|
|
|
|
|
def BuildTree(self, name, packagesName):
|
|
|
|
for module in self.moduleList:
|
|
|
|
if module.name == name:
|
|
|
|
module.BuildTree(self, packagesName)
|
|
|
|
return
|
|
|
|
debug.error("request to build tree on un-existant module name : '" + name + "'")
|
|
|
|
|
|
|
|
def Clean(self, name):
|
|
|
|
for module in self.moduleList:
|
|
|
|
if module.name == name:
|
|
|
|
module.Clean(self)
|
|
|
|
return
|
|
|
|
debug.error("request to clean an un-existant module name : '" + name + "'")
|
|
|
|
|
|
|
|
def LoadIfNeeded(self, name):
|
|
|
|
for elem in self.moduleList:
|
|
|
|
if elem.name == name:
|
|
|
|
return
|
|
|
|
lutinModule.LoadModule(self, name)
|
|
|
|
|
|
|
|
def LoadAll(self):
|
|
|
|
listOfAllTheModule = lutinModule.ListAllModule()
|
|
|
|
for modName in listOfAllTheModule:
|
|
|
|
self.LoadIfNeeded(modName)
|
|
|
|
|
|
|
|
def Build(self, name, packagesName=None):
|
|
|
|
if name == "dump":
|
|
|
|
debug.info("dump all")
|
|
|
|
self.LoadAll()
|
|
|
|
print 'Dump all module properties'
|
|
|
|
for mod in self.moduleList:
|
|
|
|
mod.Display(self)
|
|
|
|
elif name == "all":
|
|
|
|
debug.info("Build all")
|
|
|
|
self.LoadAll()
|
|
|
|
for mod in self.moduleList:
|
|
|
|
if mod.type == 'BINARY':
|
|
|
|
mod.Build(self, None)
|
|
|
|
elif name == "clean":
|
|
|
|
debug.info("Clean all")
|
|
|
|
self.LoadAll()
|
|
|
|
for mod in self.moduleList:
|
|
|
|
mod.Clean(self)
|
|
|
|
else:
|
|
|
|
myLen = len(name)
|
|
|
|
if name[myLen-5:] == "-dump":
|
|
|
|
tmpName = name[:myLen-5]
|
|
|
|
self.LoadIfNeeded(tmpName)
|
|
|
|
# clean requested
|
|
|
|
for mod in self.moduleList:
|
|
|
|
if mod.name == tmpName:
|
|
|
|
debug.info("dump module '" + tmpName + "'")
|
|
|
|
mod.Display(self)
|
|
|
|
return
|
|
|
|
debug.error("not know module name : '" + cleanName + "' to clean it")
|
|
|
|
elif name[myLen-6:] == "-clean":
|
|
|
|
cleanName = name[:myLen-6]
|
|
|
|
self.LoadIfNeeded(cleanName)
|
|
|
|
# clean requested
|
|
|
|
for mod in self.moduleList:
|
|
|
|
if mod.name == cleanName:
|
|
|
|
debug.info("Clean module '" + cleanName + "'")
|
|
|
|
mod.Clean(self)
|
|
|
|
return
|
|
|
|
debug.error("not know module name : '" + cleanName + "' to clean it")
|
|
|
|
else:
|
|
|
|
# Build requested
|
|
|
|
self.LoadIfNeeded(name)
|
|
|
|
for mod in self.moduleList:
|
|
|
|
if mod.name == name:
|
|
|
|
debug.info("Build module '" + name + "'")
|
|
|
|
return mod.Build(self, None)
|
|
|
|
debug.error("not know module name : '" + name + "' to build it")
|
2013-04-18 22:09:45 +02:00
|
|
|
|
2013-04-18 01:46:47 +02:00
|
|
|
|