mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-09-13 09:01:12 +02:00
Make kernel build maximal cross-platform.
This commit is contained in:
parent
31c8ed75f6
commit
481b7ba028
@ -51,40 +51,7 @@
|
|||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% BL31=%{out_dir}%/bl31.bin"
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% BL31=%{out_dir}%/bl31.bin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"parent": "kernel",
|
"parent": "kernel"
|
||||||
"version": "v6.16-rc2",
|
|
||||||
"version_type": "tag",
|
|
||||||
"patch_dir": [ "kernel", "kernel/sunxi-6.16", "kernel/rockchip64-6.16" ],
|
|
||||||
"config_def": "printer_defconfig",
|
|
||||||
"target": [ "clean", "Image", "modules", "dtbs", "modules_install" ],
|
|
||||||
"artifacts":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/Image",
|
|
||||||
"store_type": "boot"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/dts/%{DTB_FILE}%",
|
|
||||||
"store_type": "boot",
|
|
||||||
"subdir": "dtb/allwinner",
|
|
||||||
"destdir": "dtb"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/dts/allwinner/overlay/%{DTO_FILES}%",
|
|
||||||
"store_type": "none",
|
|
||||||
"subdir": "dtb/allwinner/overlay"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods/usr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"parent": "rtl8189ES_linux",
|
|
||||||
"version": "rtl8189fs",
|
|
||||||
"version_type": "branch",
|
|
||||||
"target": [ "modules", "install" ],
|
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 MODDESTDIR=%{out_dir}%/kmods/usr/lib/modules/*/kernel/drivers/net/wireless KSRC=%{common_dir}%/kernel",
|
|
||||||
"artifacts":
|
|
||||||
[]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"install":
|
"install":
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"build":
|
"build":
|
||||||
[
|
[
|
||||||
"rkbin", "uboot", "kernel"
|
"uboot", "kernel"
|
||||||
],
|
],
|
||||||
"variables":
|
"variables":
|
||||||
[
|
[
|
||||||
@ -38,6 +38,10 @@
|
|||||||
"version": "@",
|
"version": "@",
|
||||||
"version_type": "head",
|
"version_type": "head",
|
||||||
"patch_dir": "uboot/btt",
|
"patch_dir": "uboot/btt",
|
||||||
|
"deps":
|
||||||
|
[
|
||||||
|
"rkbin"
|
||||||
|
],
|
||||||
"artifacts":
|
"artifacts":
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
@ -61,31 +65,7 @@
|
|||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCHV=%{ARCH}% ROCKCHIP_TPL=%{out_dir}%/%{TPL_BIN}% BL31=%{out_dir}%/%{BL31_BIN}%"
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCHV=%{ARCH}% ROCKCHIP_TPL=%{out_dir}%/%{TPL_BIN}% BL31=%{out_dir}%/%{BL31_BIN}%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"parent": "kernel",
|
"parent": "kernel"
|
||||||
"version": "v6.16-rc2",
|
|
||||||
"version_type": "tag",
|
|
||||||
"patch_dir": [ "kernel", "kernel/sunxi-6.16", "kernel/rockchip64-6.16" ],
|
|
||||||
"config_def": "printer_defconfig",
|
|
||||||
"target": [ "Image", "modules", "dtbs", "modules_install" ],
|
|
||||||
"artifacts":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/Image",
|
|
||||||
"store_type": "boot"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/dts/%{DTB_FILE}%",
|
|
||||||
"store_type": "boot",
|
|
||||||
"subdir": "dtb/rockchip",
|
|
||||||
"destdir": "dtb"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "arch/arm64/boot/dts/%{DTO_FILES}%",
|
|
||||||
"store_type": "none",
|
|
||||||
"subdir": "dtb/rockchip/overlays"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods/usr"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"install":
|
"install":
|
||||||
|
@ -22,7 +22,51 @@
|
|||||||
"url": "https://github.com/torvalds/linux.git",
|
"url": "https://github.com/torvalds/linux.git",
|
||||||
"config": true,
|
"config": true,
|
||||||
"config_target": "menuconfig",
|
"config_target": "menuconfig",
|
||||||
"is_shared": true
|
"is_shared": true,
|
||||||
|
"version": "v6.16-rc2",
|
||||||
|
"version_type": "tag",
|
||||||
|
"patch_dir": [ "kernel", "kernel/sunxi-6.16", "kernel/rockchip64-6.16" ],
|
||||||
|
"config_def": "printer_defconfig",
|
||||||
|
"target": [ "Image", "modules", "dtbs", "modules_install" ],
|
||||||
|
"common": true,
|
||||||
|
"artifacts":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"file": "",
|
||||||
|
"kmods": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "arch/arm64/boot/Image",
|
||||||
|
"store_type": "boot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "arch/arm64/boot/dts/rockchip/rk3566-bigtreetech-pi2.dtb",
|
||||||
|
"store_type": "boot",
|
||||||
|
"subdir": "dtb/rockchip",
|
||||||
|
"destdir": "dtb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "arch/arm64/boot/dts/rockchip/rk3566-*.dtbo",
|
||||||
|
"store_type": "none",
|
||||||
|
"subdir": "dtb/rockchip/overlays"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1*.dtb",
|
||||||
|
"store_type": "boot",
|
||||||
|
"subdir": "dtb/allwinner",
|
||||||
|
"destdir": "dtb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
||||||
|
"store_type": "none",
|
||||||
|
"subdir": "dtb/allwinner/overlay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_sh}%/kmods/usr",
|
||||||
|
"modules":
|
||||||
|
[
|
||||||
|
"rtl8189ES_linux"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -39,7 +83,13 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/jwrdegoede/rtl8189ES_linux.git",
|
"url": "https://github.com/jwrdegoede/rtl8189ES_linux.git",
|
||||||
"config": false,
|
"config": false,
|
||||||
"is_shared": false
|
"is_shared": true,
|
||||||
|
"version": "rtl8189fs",
|
||||||
|
"version_type": "branch",
|
||||||
|
"target": [ "modules", "install" ],
|
||||||
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 MODDESTDIR=%{out_sh}%/kmods/usr/lib/modules/*/kernel/drivers/net/wireless KSRC=%{common_dir}%/kernel",
|
||||||
|
"artifacts":
|
||||||
|
[]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,12 @@ class Board:
|
|||||||
Logger.error("Unable to find parent for package!")
|
Logger.error("Unable to find parent for package!")
|
||||||
t.load_detail(self.name, target, self.parse_variables)
|
t.load_detail(self.name, target, self.parse_variables)
|
||||||
self.targets.append(t)
|
self.targets.append(t)
|
||||||
|
for module in t.modules:
|
||||||
|
m = self.__find_meta(targets_meta, module)
|
||||||
|
if (m == 0):
|
||||||
|
Logger.error("Unable to find parent for module!")
|
||||||
|
m.load_detail(self.name, None, self.parse_variables)
|
||||||
|
self.targets.append(m)
|
||||||
self.__scan_deps()
|
self.__scan_deps()
|
||||||
|
|
||||||
def __scan_deps(self):
|
def __scan_deps(self):
|
||||||
@ -74,6 +80,26 @@ class Board:
|
|||||||
for target in self.targets:
|
for target in self.targets:
|
||||||
target.source_sync()
|
target.source_sync()
|
||||||
|
|
||||||
|
def __build(self, target_list, sub_target):
|
||||||
|
is_finded = False
|
||||||
|
for t_name in target_list:
|
||||||
|
for target in self.targets:
|
||||||
|
if (t_name == target.name):
|
||||||
|
is_finded = True
|
||||||
|
if (target.is_shared):
|
||||||
|
out_dir = self.out_sh
|
||||||
|
else:
|
||||||
|
out_dir = self.out_dir
|
||||||
|
for dep in target.depends:
|
||||||
|
if (sub_target == ""):
|
||||||
|
#when run sub-target - not need to check a deps
|
||||||
|
dep.build("", out_dir)
|
||||||
|
target.build(sub_target, out_dir)
|
||||||
|
for module in target.modules:
|
||||||
|
self.__build([module], "")
|
||||||
|
break
|
||||||
|
return is_finded
|
||||||
|
|
||||||
def build(self, target_name):
|
def build(self, target_name):
|
||||||
sub_target = ""
|
sub_target = ""
|
||||||
if (target_name == "all"):
|
if (target_name == "all"):
|
||||||
@ -83,16 +109,6 @@ class Board:
|
|||||||
target_list = [ targets[0] ]
|
target_list = [ targets[0] ]
|
||||||
if (len(targets) > 1):
|
if (len(targets) > 1):
|
||||||
sub_target = targets[1]
|
sub_target = targets[1]
|
||||||
is_finded = False
|
is_finded = self.__build(target_list, sub_target)
|
||||||
for t_name in target_list:
|
|
||||||
for target in self.targets:
|
|
||||||
if (t_name == target.name):
|
|
||||||
is_finded = True
|
|
||||||
for dep in target.depends:
|
|
||||||
if (sub_target == ""):
|
|
||||||
#when run sub-target - not need to check a deps
|
|
||||||
dep.build("", self.out_dir)
|
|
||||||
target.build(sub_target, self.out_dir)
|
|
||||||
break
|
|
||||||
if (not is_finded):
|
if (not is_finded):
|
||||||
Logger.error("Don't find target!")
|
Logger.error("Don't find target!")
|
||||||
|
@ -5,17 +5,27 @@ from . import *
|
|||||||
class Target:
|
class Target:
|
||||||
def __init__(self, meta_js):
|
def __init__(self, meta_js):
|
||||||
self.name = ''
|
self.name = ''
|
||||||
|
self.config_target = ""
|
||||||
|
self.patch_dir = ""
|
||||||
|
self.dep_names = []
|
||||||
|
self.makeopts = ""
|
||||||
|
self.defconfig = ""
|
||||||
|
self.version = ""
|
||||||
|
self.no_build = False
|
||||||
|
self.artifacts = []
|
||||||
|
self.modules = []
|
||||||
|
self.have_config = False
|
||||||
for key in meta_js.keys():
|
for key in meta_js.keys():
|
||||||
if (self.name != ''):
|
if (self.name != ''):
|
||||||
raise "Invalid target definition!"
|
raise "Invalid target definition!"
|
||||||
self.name = key
|
self.name = key
|
||||||
self.sources = Sources(self.name, meta_js[key]["url"])
|
meta_info = meta_js[key]
|
||||||
self.have_config = meta_js[key]["config"]
|
self.sources = Sources(self.name, meta_info["url"])
|
||||||
|
self.have_config = meta_info["config"]
|
||||||
if (self.have_config):
|
if (self.have_config):
|
||||||
self.config_target = meta_js[key]["config_target"]
|
self.config_target = meta_info["config_target"]
|
||||||
else:
|
self.is_shared = meta_info["is_shared"]
|
||||||
self.config_target = ""
|
self.__load_info(meta_info)
|
||||||
self.is_shared = meta_js[key]["is_shared"]
|
|
||||||
|
|
||||||
def load_meta(meta_fn):
|
def load_meta(meta_fn):
|
||||||
with open(meta_fn) as json_data:
|
with open(meta_fn) as json_data:
|
||||||
@ -27,43 +37,42 @@ class Target:
|
|||||||
res.append(t)
|
res.append(t)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def __load_info(self, info_js, parse_variables=None):
|
||||||
|
if ("version" in info_js):
|
||||||
|
self.sources.set_git_params(info_js["version"], info_js["version_type"])
|
||||||
|
self.target = info_js["target"]
|
||||||
|
self.version = info_js["version"]
|
||||||
|
if ("patch_dir" in info_js):
|
||||||
|
self.patch_dir = info_js["patch_dir"]
|
||||||
|
if ("deps" in info_js):
|
||||||
|
self.dep_names = info_js["deps"]
|
||||||
|
if ("makeopts" in info_js):
|
||||||
|
self.makeopts = info_js["makeopts"]
|
||||||
|
if ("config_def" in info_js):
|
||||||
|
self.defconfig = info_js["config_def"]
|
||||||
|
if ("no_build" in info_js):
|
||||||
|
self.no_build = True
|
||||||
|
if ("artifacts" in info_js):
|
||||||
|
_artifacts = info_js["artifacts"]
|
||||||
|
for art in _artifacts:
|
||||||
|
self.artifacts.append(art)
|
||||||
|
if ("modules" in info_js):
|
||||||
|
self.modules = info_js["modules"]
|
||||||
|
|
||||||
def load_detail(self, board_name, detail_js, parse_variables):
|
def load_detail(self, board_name, detail_js, parse_variables):
|
||||||
self.board_name = board_name
|
self.board_name = board_name
|
||||||
self.sources.init_source_path(board_name, self.is_shared)
|
self.sources.init_source_path(board_name, self.is_shared)
|
||||||
self.sources.set_git_params(detail_js["version"], detail_js["version_type"])
|
if (detail_js != None):
|
||||||
self.target = detail_js["target"]
|
self.__load_info(detail_js, parse_variables)
|
||||||
self.version = detail_js["version"]
|
|
||||||
if (self.is_shared):
|
if (self.is_shared):
|
||||||
self.config_name = f"{ROOT_DIR}/cfg/{self.name}"
|
self.config_name = f"{ROOT_DIR}/cfg/{self.name}"
|
||||||
else:
|
else:
|
||||||
self.config_name = f"{ROOT_DIR}/cfg/{board_name}/{self.name}"
|
self.config_name = f"{ROOT_DIR}/cfg/{board_name}/{self.name}"
|
||||||
if (self.version != "") and (self.version != "@"):
|
if (self.version != "") and (self.version != "@"):
|
||||||
self.config_name += f"_{self.version}"
|
self.config_name += f"_{self.version}"
|
||||||
if ("patch_dir" in detail_js):
|
self.makeopts = parse_variables(self.makeopts)
|
||||||
self.patch_dir = detail_js["patch_dir"]
|
for art in self.artifacts:
|
||||||
else:
|
|
||||||
self.patch_dir = ""
|
|
||||||
if ("deps" in detail_js):
|
|
||||||
self.dep_names = detail_js["deps"]
|
|
||||||
else:
|
|
||||||
self.dep_names = []
|
|
||||||
if ("makeopts" in detail_js):
|
|
||||||
self.makeopts = parse_variables(detail_js["makeopts"])
|
|
||||||
else:
|
|
||||||
self.makeopts = ""
|
|
||||||
if ("config_def" in detail_js):
|
|
||||||
self.defconfig = detail_js["config_def"]
|
|
||||||
else:
|
|
||||||
self.defconfig = ""
|
|
||||||
if ("no_build" in detail_js):
|
|
||||||
self.no_build = True
|
|
||||||
else:
|
|
||||||
self.no_build = False
|
|
||||||
_artifacts = detail_js["artifacts"]
|
|
||||||
self.artifacts = []
|
|
||||||
for art in _artifacts:
|
|
||||||
art["file"] = parse_variables(art["file"])
|
art["file"] = parse_variables(art["file"])
|
||||||
self.artifacts.append(art)
|
|
||||||
|
|
||||||
def source_sync(self):
|
def source_sync(self):
|
||||||
Logger.build(f"'{self.name}': Source prepare")
|
Logger.build(f"'{self.name}': Source prepare")
|
||||||
@ -90,7 +99,8 @@ class Target:
|
|||||||
opts_tmp.append(target)
|
opts_tmp.append(target)
|
||||||
self.sources.compile(opts_tmp, self.config_name)
|
self.sources.compile(opts_tmp, self.config_name)
|
||||||
if (sub_target != "config"):
|
if (sub_target != "config"):
|
||||||
self.sources.copy_artifacts(self.artifacts, out_dir)
|
print(f"Copy '{self.artifacts}' to '{out_dir}'")
|
||||||
|
#self.sources.copy_artifacts(self.artifacts, out_dir)
|
||||||
|
|
||||||
def install_files(self, dir, tmp_dir, part_name, on_file, on_dd):
|
def install_files(self, dir, tmp_dir, part_name, on_file, on_dd):
|
||||||
Logger.install(f"'{self.name}': Install artifacts")
|
Logger.install(f"'{self.name}': Install artifacts")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user