mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-09-12 16:41: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"
|
||||
},
|
||||
{
|
||||
"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":
|
||||
[]
|
||||
"parent": "kernel"
|
||||
}
|
||||
],
|
||||
"install":
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"build":
|
||||
[
|
||||
"rkbin", "uboot", "kernel"
|
||||
"uboot", "kernel"
|
||||
],
|
||||
"variables":
|
||||
[
|
||||
@ -38,6 +38,10 @@
|
||||
"version": "@",
|
||||
"version_type": "head",
|
||||
"patch_dir": "uboot/btt",
|
||||
"deps":
|
||||
[
|
||||
"rkbin"
|
||||
],
|
||||
"artifacts":
|
||||
[
|
||||
{
|
||||
@ -61,31 +65,7 @@
|
||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCHV=%{ARCH}% ROCKCHIP_TPL=%{out_dir}%/%{TPL_BIN}% BL31=%{out_dir}%/%{BL31_BIN}%"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
"parent": "kernel"
|
||||
}
|
||||
],
|
||||
"install":
|
||||
|
@ -22,7 +22,51 @@
|
||||
"url": "https://github.com/torvalds/linux.git",
|
||||
"config": true,
|
||||
"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",
|
||||
"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!")
|
||||
t.load_detail(self.name, target, self.parse_variables)
|
||||
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()
|
||||
|
||||
def __scan_deps(self):
|
||||
@ -74,6 +80,26 @@ class Board:
|
||||
for target in self.targets:
|
||||
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):
|
||||
sub_target = ""
|
||||
if (target_name == "all"):
|
||||
@ -83,16 +109,6 @@ class Board:
|
||||
target_list = [ targets[0] ]
|
||||
if (len(targets) > 1):
|
||||
sub_target = targets[1]
|
||||
is_finded = False
|
||||
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
|
||||
is_finded = self.__build(target_list, sub_target)
|
||||
if (not is_finded):
|
||||
Logger.error("Don't find target!")
|
||||
|
@ -5,17 +5,27 @@ from . import *
|
||||
class Target:
|
||||
def __init__(self, meta_js):
|
||||
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():
|
||||
if (self.name != ''):
|
||||
raise "Invalid target definition!"
|
||||
self.name = key
|
||||
self.sources = Sources(self.name, meta_js[key]["url"])
|
||||
self.have_config = meta_js[key]["config"]
|
||||
meta_info = meta_js[key]
|
||||
self.sources = Sources(self.name, meta_info["url"])
|
||||
self.have_config = meta_info["config"]
|
||||
if (self.have_config):
|
||||
self.config_target = meta_js[key]["config_target"]
|
||||
else:
|
||||
self.config_target = ""
|
||||
self.is_shared = meta_js[key]["is_shared"]
|
||||
self.config_target = meta_info["config_target"]
|
||||
self.is_shared = meta_info["is_shared"]
|
||||
self.__load_info(meta_info)
|
||||
|
||||
def load_meta(meta_fn):
|
||||
with open(meta_fn) as json_data:
|
||||
@ -27,43 +37,42 @@ class Target:
|
||||
res.append(t)
|
||||
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):
|
||||
self.board_name = board_name
|
||||
self.sources.init_source_path(board_name, self.is_shared)
|
||||
self.sources.set_git_params(detail_js["version"], detail_js["version_type"])
|
||||
self.target = detail_js["target"]
|
||||
self.version = detail_js["version"]
|
||||
if (detail_js != None):
|
||||
self.__load_info(detail_js, parse_variables)
|
||||
if (self.is_shared):
|
||||
self.config_name = f"{ROOT_DIR}/cfg/{self.name}"
|
||||
else:
|
||||
self.config_name = f"{ROOT_DIR}/cfg/{board_name}/{self.name}"
|
||||
if (self.version != "") and (self.version != "@"):
|
||||
self.config_name += f"_{self.version}"
|
||||
if ("patch_dir" in detail_js):
|
||||
self.patch_dir = detail_js["patch_dir"]
|
||||
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:
|
||||
self.makeopts = parse_variables(self.makeopts)
|
||||
for art in self.artifacts:
|
||||
art["file"] = parse_variables(art["file"])
|
||||
self.artifacts.append(art)
|
||||
|
||||
def source_sync(self):
|
||||
Logger.build(f"'{self.name}': Source prepare")
|
||||
@ -90,7 +99,8 @@ class Target:
|
||||
opts_tmp.append(target)
|
||||
self.sources.compile(opts_tmp, self.config_name)
|
||||
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):
|
||||
Logger.install(f"'{self.name}': Install artifacts")
|
||||
|
Loading…
x
Reference in New Issue
Block a user