[DEV] update model
This commit is contained in:
parent
6a6961fb3d
commit
2c5642d5c8
@ -73,24 +73,28 @@ class HeritageList:
|
|||||||
listHeritage = self.list_heritage
|
listHeritage = self.list_heritage
|
||||||
self.list_heritage = []
|
self.list_heritage = []
|
||||||
# first step : add all lib with no dependency:
|
# first step : add all lib with no dependency:
|
||||||
debug.extreme_verbose(" add element with no dependency:")
|
debug.warning(" add element with no dependency:")
|
||||||
for herit in listHeritage:
|
for herit in listHeritage:
|
||||||
if len(herit.depends) == 0:
|
if len(herit.depends) == 0:
|
||||||
debug.extreme_verbose(" add: " + str(herit.name))
|
debug.warning(" add: " + str(herit.name) + " => " + str(herit));
|
||||||
self.list_heritage.append(copy.deepcopy(herit))
|
self.list_heritage.append(copy.deepcopy(herit));
|
||||||
listHeritage.remove(herit)
|
listHeritage.remove(herit);
|
||||||
debug.extreme_verbose(" add element with dependency:")
|
debug.warning(" add element with dependency:")
|
||||||
while len(listHeritage) > 0:
|
while len(listHeritage) > 0:
|
||||||
currentHeritageSize = len(listHeritage)
|
currentHeritageSize = len(listHeritage)
|
||||||
debug.verbose(" list heritage = " + str([[x.name, x.depends] for x in listHeritage]))
|
debug.warning(" list heritage = " + str([[x.name, x.depends] for x in listHeritage]))
|
||||||
debug.extreme_verbose(" list heritage (rest):")
|
debug.warning(" list heritage (rest):")
|
||||||
for tmppp_herit in listHeritage:
|
for tmppp_herit in listHeritage:
|
||||||
debug.extreme_verbose(" elem= " + str(tmppp_herit.name) + " : " + str(tmppp_herit.depends))
|
debug.warning(" elem= " + str(tmppp_herit.name) + " : " + str(tmppp_herit.depends))
|
||||||
# Add element only when all dependence are resolved
|
# Add element only when all dependence are resolved
|
||||||
for herit in listHeritage:
|
for herit in listHeritage:
|
||||||
listDependsName = [y.name for y in self.list_heritage]
|
listDependsName = [y.name for y in self.list_heritage]
|
||||||
|
debug.warning(" self.list_heritage= " + str(self.list_heritage))
|
||||||
|
debug.warning(" inHeritance= " + str(herit.depends))
|
||||||
|
debug.warning(" listDependsName= " + str(listDependsName))
|
||||||
|
debug.warning(" check in = " + str([listDependsName for x in herit.depends]))
|
||||||
if all(x in listDependsName for x in herit.depends) == True:
|
if all(x in listDependsName for x in herit.depends) == True:
|
||||||
debug.extreme_verbose(" add: " + str(herit.name))
|
debug.warning(" add: " + str(herit.name))
|
||||||
listHeritage.remove(herit)
|
listHeritage.remove(herit)
|
||||||
self.list_heritage.append(copy.deepcopy(herit))
|
self.list_heritage.append(copy.deepcopy(herit))
|
||||||
# check if nothing is include in heritage...
|
# check if nothing is include in heritage...
|
||||||
|
@ -104,6 +104,8 @@ class Module:
|
|||||||
self._isbuild = False
|
self._isbuild = False
|
||||||
# add include install path after building package
|
# add include install path after building package
|
||||||
self._include_header_after = False
|
self._include_header_after = False
|
||||||
|
# Export visibility of the package. when set, need to add "-Wl,--version-script=" flags (for .so only)
|
||||||
|
self._visibility_map = None
|
||||||
# configure default heritage
|
# configure default heritage
|
||||||
self._local_heritage = None
|
self._local_heritage = None
|
||||||
# TODO : Do a better dynamic property system => not really versatile
|
# TODO : Do a better dynamic property system => not really versatile
|
||||||
@ -153,10 +155,17 @@ class Module:
|
|||||||
##
|
##
|
||||||
## @brief set the header not used for the compilation, thay are copied in the include folder, but they are only used for external library include.
|
## @brief set the header not used for the compilation, thay are copied in the include folder, but they are only used for external library include.
|
||||||
## @param[in] self (handle) Class handle.
|
## @param[in] self (handle) Class handle.
|
||||||
## @param[in] calue (boolean) Value of the variable.
|
## @param[in] value (boolean) Value of the variable.
|
||||||
##
|
##
|
||||||
def set_include_header_after(self, value):
|
def set_include_header_after(self, value):
|
||||||
self._include_header_after = value;
|
self._include_header_after = value;
|
||||||
|
##
|
||||||
|
## @brief set the visibility map of the application to control what it is exposed ouside the program.
|
||||||
|
## @param[in] self (handle) Class handle.
|
||||||
|
## @param[in] file (string) path of the visibility file.
|
||||||
|
##
|
||||||
|
def set_visibility_map(self, file):
|
||||||
|
self._visibility_map = file;
|
||||||
|
|
||||||
##
|
##
|
||||||
## @brief Generate a string representing the class (for str(xxx))
|
## @brief Generate a string representing the class (for str(xxx))
|
||||||
@ -804,13 +813,17 @@ class Module:
|
|||||||
tmp_builder = builder.get_builder_with_output("so");
|
tmp_builder = builder.get_builder_with_output("so");
|
||||||
list_file = tools.filter_extention(list_sub_file_needed_to_build, tmp_builder.get_input_type())
|
list_file = tools.filter_extention(list_sub_file_needed_to_build, tmp_builder.get_input_type())
|
||||||
if len(list_file) > 0:
|
if len(list_file) > 0:
|
||||||
|
tmp_visibility = self._visibility_map;
|
||||||
|
if tmp_visibility != None:
|
||||||
|
tmp_visibility = os.path.join(self.get_origin_path(), tmp_visibility);
|
||||||
res_file = tmp_builder.link(list_file,
|
res_file = tmp_builder.link(list_file,
|
||||||
package_name,
|
package_name,
|
||||||
target,
|
target,
|
||||||
self._sub_heritage_list,
|
self._sub_heritage_list,
|
||||||
flags = self._flags,
|
flags = self._flags,
|
||||||
name = self._name,
|
name = self._name,
|
||||||
basic_path = self._origin_path)
|
basic_path = self._origin_path,
|
||||||
|
visibility_file = tmp_visibility)
|
||||||
self._local_heritage.add_lib_dynamic(res_file)
|
self._local_heritage.add_lib_dynamic(res_file)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
debug.error(" UN-SUPPORTED link format: '.so'/'.dynlib'/'.dll'")
|
debug.error(" UN-SUPPORTED link format: '.so'/'.dynlib'/'.dll'")
|
||||||
@ -957,7 +970,7 @@ class Module:
|
|||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# -- install data --
|
# -- install data --
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
debug.debug("install datas")
|
debug.debug("install data")
|
||||||
copy_list={}
|
copy_list={}
|
||||||
self.image_to_build(target, copy_list)
|
self.image_to_build(target, copy_list)
|
||||||
self.files_to_build(target, copy_list)
|
self.files_to_build(target, copy_list)
|
||||||
@ -1078,13 +1091,13 @@ class Module:
|
|||||||
and elem[0] == '/':
|
and elem[0] == '/':
|
||||||
# unix case
|
# unix case
|
||||||
debug.warning(" add_path(" + str(list) + ")")
|
debug.warning(" add_path(" + str(list) + ")")
|
||||||
debug.warning("[" + self._name + "] Not permited to add a path that start in / directory (only relative path) (compatibility until 2.x)")
|
debug.warning("[" + self._name + "] Not permitted to add a path that start in / directory (only relative path) (compatibility until 2.x)")
|
||||||
add_list.append(elem)
|
add_list.append(elem)
|
||||||
elif len(elem) > 2 \
|
elif len(elem) > 2 \
|
||||||
and elem[1] == ':':
|
and elem[1] == ':':
|
||||||
# windows case :
|
# windows case :
|
||||||
debug.warning(" add_path(" + str(list) + ")")
|
debug.warning(" add_path(" + str(list) + ")")
|
||||||
debug.warning("[" + self._name + "] Not permited to add a path that start in '" + elem[0] + ":' directory (only relative path) (compatibility until 2.x)")
|
debug.warning("[" + self._name + "] Not permitted to add a path that start in '" + elem[0] + ":' directory (only relative path) (compatibility until 2.x)")
|
||||||
add_list.append(elem)
|
add_list.append(elem)
|
||||||
if elem == ".":
|
if elem == ".":
|
||||||
add_list.append(tools.get_current_path(self._origin_file))
|
add_list.append(tools.get_current_path(self._origin_file))
|
||||||
@ -1095,13 +1108,13 @@ class Module:
|
|||||||
and list[0] == '/':
|
and list[0] == '/':
|
||||||
# unix case
|
# unix case
|
||||||
debug.warning(" add_path(" + str(list) + ")")
|
debug.warning(" add_path(" + str(list) + ")")
|
||||||
debug.warning("[" + self._name + "] Not permited to add a path that start in / directory (only relative path) (compatibility until 2.x)")
|
debug.warning("[" + self._name + "] Not permitted to add a path that start in / directory (only relative path) (compatibility until 2.x)")
|
||||||
add_list = list
|
add_list = list
|
||||||
elif len(list) > 2 \
|
elif len(list) > 2 \
|
||||||
and list[1] == ':':
|
and list[1] == ':':
|
||||||
# windows case :
|
# windows case :
|
||||||
debug.warning(" add_path(" + str(list) + ")")
|
debug.warning(" add_path(" + str(list) + ")")
|
||||||
debug.warning("[" + self._name + "] Not permited to add a path that start in '" + list[0] + ":' directory (only relative path) (compatibility until 2.x)")
|
debug.warning("[" + self._name + "] Not permitted to add a path that start in '" + list[0] + ":' directory (only relative path) (compatibility until 2.x)")
|
||||||
add_list = list
|
add_list = list
|
||||||
elif list == ".":
|
elif list == ".":
|
||||||
add_list = tools.get_current_path(self._origin_file)
|
add_list = tools.get_current_path(self._origin_file)
|
||||||
|
@ -55,6 +55,7 @@ list_of_property_module=[
|
|||||||
"version",
|
"version",
|
||||||
"version-id",
|
"version-id",
|
||||||
"code-quality",
|
"code-quality",
|
||||||
|
"visibility-map",
|
||||||
"header-install-mode",
|
"header-install-mode",
|
||||||
"package" # package is for specifie some right in LUTIN
|
"package" # package is for specifie some right in LUTIN
|
||||||
];
|
];
|
||||||
@ -141,6 +142,7 @@ list_of_element_availlable=[
|
|||||||
...
|
...
|
||||||
] ...
|
] ...
|
||||||
},
|
},
|
||||||
|
"visibility-map": "libbsd/src/libbsd.map", # for application that need to control the visibility of the exports: -Wl,--version-script=/src/libbsd.map"
|
||||||
"header-install-mode": "AFTER", # or "BEFORE"<< default is before ==> better to isolate the include folder...
|
"header-install-mode": "AFTER", # or "BEFORE"<< default is before ==> better to isolate the include folder...
|
||||||
"header": [
|
"header": [
|
||||||
"xxx/Yyy.hpp",
|
"xxx/Yyy.hpp",
|
||||||
@ -237,7 +239,8 @@ list_of_element_availlable=[
|
|||||||
"c": [
|
"c": [
|
||||||
"-DAPPL_VERSION={{{project.version}}}",
|
"-DAPPL_VERSION={{{project.version}}}",
|
||||||
"-DAPPL_NAME={{{project.name}}}",
|
"-DAPPL_NAME={{{project.name}}}",
|
||||||
"-DAPPL_TYPE={{{project.type}}}"
|
"-DAPPL_TYPE={{{project.type}}}",
|
||||||
|
"-DAPPL_PATH={{{project.path}}}"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"arch": {
|
"arch": {
|
||||||
@ -390,6 +393,7 @@ def replace_dynamic_tags(my_module, data):
|
|||||||
out = out.replace("{{{project.version}}}", tools.version_to_string(my_module.get_version()));
|
out = out.replace("{{{project.version}}}", tools.version_to_string(my_module.get_version()));
|
||||||
out = out.replace("{{{project.name}}}", my_module.get_name());
|
out = out.replace("{{{project.name}}}", my_module.get_name());
|
||||||
out = out.replace("{{{project.type}}}", my_module.get_type());
|
out = out.replace("{{{project.type}}}", my_module.get_type());
|
||||||
|
out = out.replace("{{{project.path}}}", my_module.get_origin_path());
|
||||||
out = out.replace("{{{quote}}}", "\\'");
|
out = out.replace("{{{quote}}}", "\\'");
|
||||||
out = out.replace("{{{quote2}}}", "\\\""); # "
|
out = out.replace("{{{quote2}}}", "\\\""); # "
|
||||||
return out;
|
return out;
|
||||||
@ -573,6 +577,12 @@ def load_module_from_GLD(target, name, path, json_path):
|
|||||||
my_module._pkg_set_if_default("VERSION", property["version"])
|
my_module._pkg_set_if_default("VERSION", property["version"])
|
||||||
|
|
||||||
|
|
||||||
|
if "visibility-map" in data.keys():
|
||||||
|
if type(data["visibility-map"]) == str:
|
||||||
|
my_module.set_visibility_map(data["visibility-map"]);
|
||||||
|
else:
|
||||||
|
debug.warning("can not support for element: 'visibility-map' must be a string (representing a file)");
|
||||||
|
|
||||||
if "header-install-mode" in data.keys():
|
if "header-install-mode" in data.keys():
|
||||||
if data["header-install-mode"] == "AFTER":
|
if data["header-install-mode"] == "AFTER":
|
||||||
my_module.set_include_header_after(True);
|
my_module.set_include_header_after(True);
|
||||||
|
@ -63,7 +63,7 @@ def get_support_multithreading():
|
|||||||
##
|
##
|
||||||
## @brief Commands for running gcc to link a shared library.
|
## @brief Commands for running gcc to link a shared library.
|
||||||
##
|
##
|
||||||
def link(file, binary, target, depancy, flags, name, basic_path, static=False):
|
def link(file, binary, target, depancy, flags, name, basic_path, static=False, visibility_file = None):
|
||||||
file_src = file
|
file_src = file
|
||||||
file_dst = target.get_build_file_dynamic(name)
|
file_dst = target.get_build_file_dynamic(name)
|
||||||
file_depend = file_dst + target.suffix_dependence
|
file_depend = file_dst + target.suffix_dependence
|
||||||
@ -150,6 +150,9 @@ def link(file, binary, target, depancy, flags, name, basic_path, static=False):
|
|||||||
cmd.append("-Wl,-R$ORIGIN/../lib/")
|
cmd.append("-Wl,-R$ORIGIN/../lib/")
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
if visibility_file != None:
|
||||||
|
cmd.append("-Wl,--version-script=" + visibility_file);
|
||||||
|
|
||||||
for view in ["local", "export"]:
|
for view in ["local", "export"]:
|
||||||
if view not in flags:
|
if view not in flags:
|
||||||
continue
|
continue
|
||||||
@ -168,6 +171,8 @@ def link(file, binary, target, depancy, flags, name, basic_path, static=False):
|
|||||||
and depend.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False:
|
and depend.need_re_package(file_dst, depancy.src, False, file_cmd, cmdLine) == False:
|
||||||
return file_dst
|
return file_dst
|
||||||
tools.create_directory_of_file(file_dst)
|
tools.create_directory_of_file(file_dst)
|
||||||
|
|
||||||
|
|
||||||
debug.print_element("SharedLib", name, "==>", os.path.relpath(file_dst))
|
debug.print_element("SharedLib", name, "==>", os.path.relpath(file_dst))
|
||||||
multiprocess.run_command(cmdLine, store_output_file=file_warning)
|
multiprocess.run_command(cmdLine, store_output_file=file_warning)
|
||||||
# strip the output file:
|
# strip the output file:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user