diff mbox series

[v2,2/5] utils/genrandconfig: remove support for toolchain CSV

Message ID 20240818090346.947914-3-thomas.petazzoni@bootlin.com
State Accepted
Headers show
Series Misc utils/genrandconfig improvements | expand

Commit Message

Thomas Petazzoni Aug. 18, 2024, 9:03 a.m. UTC
Now that the support for generating a fully random configuration has
been well-tested, the whole mechanism based on a toolchain CSV isn't
really useful anymore, so let's drop it to simplify the logic.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 utils/genrandconfig | 99 +--------------------------------------------
 1 file changed, 2 insertions(+), 97 deletions(-)

Comments

Yann E. MORIN Aug. 18, 2024, 10:13 a.m. UTC | #1
Thomas, All,

On 2024-08-18 11:03 +0200, Thomas Petazzoni via buildroot spake thusly:
> Now that the support for generating a fully random configuration has
> been well-tested, the whole mechanism based on a toolchain CSV isn't
> really useful anymore, so let's drop it to simplify the logic.

As discussed on IRC, the autobuilder code still uses
--{,no-}toolchains-csv, so dopping those flags would instaly break the
autobuilders.

So, I've kept them and docuemnted them to be legacy.

Applied to master, thanks.

Regards,
Yann E. MORIN.

> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
>  utils/genrandconfig | 99 +--------------------------------------------
>  1 file changed, 2 insertions(+), 97 deletions(-)
> 
> diff --git a/utils/genrandconfig b/utils/genrandconfig
> index cefc3dca12..ee094824fd 100755
> --- a/utils/genrandconfig
> +++ b/utils/genrandconfig
> @@ -20,7 +20,6 @@
>  
>  from binascii import hexlify
>  import asyncio
> -import csv
>  import os
>  from random import randint
>  import sys
> @@ -100,73 +99,6 @@ class SystemInfo:
>          return not missing_requirements
>  
>  
> -def get_toolchain_configs(toolchains_csv, buildrootdir):
> -    """Fetch and return the possible toolchain configurations
> -
> -    This function returns an array of toolchain configurations. Each
> -    toolchain configuration is itself an array of lines of the defconfig.
> -    """
> -
> -    with open(toolchains_csv) as r:
> -        # filter empty lines and comments
> -        lines = [t for t in r.readlines() if len(t.strip()) > 0 and t[0] != '#']
> -        toolchains = lines
> -    configs = []
> -
> -    (_, _, _, _, hostarch) = os.uname()
> -    # ~2015 distros report x86 when on a 32bit install
> -    if hostarch == 'i686' or hostarch == 'i386' or hostarch == 'x86':
> -        hostarch = 'x86'
> -
> -    for row in csv.reader(toolchains):
> -        config = {}
> -        configfile = row[0]
> -        config_hostarch = row[1]
> -        keep = False
> -
> -        # Keep all toolchain configs that work regardless of the host
> -        # architecture
> -        if config_hostarch == "any":
> -            keep = True
> -
> -        # Keep all toolchain configs that can work on the current host
> -        # architecture
> -        if hostarch == config_hostarch:
> -            keep = True
> -
> -        # Assume that x86 32 bits toolchains work on x86_64 build
> -        # machines
> -        if hostarch == 'x86_64' and config_hostarch == "x86":
> -            keep = True
> -
> -        if not keep:
> -            continue
> -
> -        if not os.path.isabs(configfile):
> -            configfile = os.path.join(buildrootdir, configfile)
> -
> -        with open(configfile) as r:
> -            config = r.readlines()
> -        configs.append(config)
> -    return configs
> -
> -
> -async def is_toolchain_usable(configfile, config):
> -    """Check if the toolchain is actually usable."""
> -
> -    with open(configfile) as configf:
> -        configlines = configf.readlines()
> -
> -    # Check that the toolchain configuration is still present
> -    for toolchainline in config:
> -        if toolchainline not in configlines:
> -            print("WARN: toolchain can't be used", file=sys.stderr)
> -            print("      Missing: %s" % toolchainline.strip(), file=sys.stderr)
> -            return False
> -
> -    return True
> -
> -
>  async def fixup_config(sysinfo, configfile):
>      """Finalize the configuration and reject any problematic combinations
>  
> @@ -581,24 +513,11 @@ async def fixup_config(sysinfo, configfile):
>  
>  async def gen_config(args):
>      """Generate a new random configuration
> -
> -    This function generates the configuration, by choosing a random
> -    toolchain configuration and then generating a random selection of
> -    packages.
>      """
>  
>      sysinfo = SystemInfo()
>  
> -    if args.toolchains_csv:
> -        # Select a random toolchain configuration
> -        configs = get_toolchain_configs(args.toolchains_csv, args.buildrootdir)
> -
> -        i = randint(0, len(configs) - 1)
> -        toolchainconfig = configs[i]
> -    else:
> -        toolchainconfig = []
> -
> -    configlines = list(toolchainconfig)
> +    configlines = list()
>  
>      # Combine with the minimal configuration
>      minimalconfigfile = os.path.join(args.buildrootdir,
> @@ -658,9 +577,6 @@ async def gen_config(args):
>      if ret:
>          return ret
>  
> -    if not await is_toolchain_usable(configfile, toolchainconfig):
> -        return 2
> -
>      # Now, generate the random selection of packages, and fixup
>      # things if needed.
>      # Safe-guard, in case we can not quickly come to a valid
> @@ -676,7 +592,7 @@ async def gen_config(args):
>              "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
>              "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
>              "KCONFIG_PROBABILITY=%d" % randint(1, 20),
> -            "randpackageconfig" if args.toolchains_csv else "randconfig")
> +            "randconfig")
>          ret = await proc.wait()
>          if ret:
>              return ret
> @@ -711,17 +627,6 @@ if __name__ == '__main__':
>                          help="Buildroot directory (relative to current directory)",
>                          type=str, default='.')
>  
> -    toolchains_csv = parser.add_mutually_exclusive_group(required=False)
> -    toolchains_csv.add_argument("--toolchains-csv",
> -                                dest="toolchains_csv",
> -                                help="Path of the toolchain configuration file",
> -                                type=str)
> -    toolchains_csv.add_argument("--no-toolchains-csv",
> -                                dest="toolchains_csv",
> -                                help="Generate random toolchain configuration",
> -                                action='store_false')
> -    parser.set_defaults(toolchains_csv="support/config-fragments/autobuild/toolchain-configs.csv")
> -
>      args = parser.parse_args()
>  
>      # We need the absolute path to use with O=, because the relative
> -- 
> 2.46.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
diff mbox series

Patch

diff --git a/utils/genrandconfig b/utils/genrandconfig
index cefc3dca12..ee094824fd 100755
--- a/utils/genrandconfig
+++ b/utils/genrandconfig
@@ -20,7 +20,6 @@ 
 
 from binascii import hexlify
 import asyncio
-import csv
 import os
 from random import randint
 import sys
@@ -100,73 +99,6 @@  class SystemInfo:
         return not missing_requirements
 
 
-def get_toolchain_configs(toolchains_csv, buildrootdir):
-    """Fetch and return the possible toolchain configurations
-
-    This function returns an array of toolchain configurations. Each
-    toolchain configuration is itself an array of lines of the defconfig.
-    """
-
-    with open(toolchains_csv) as r:
-        # filter empty lines and comments
-        lines = [t for t in r.readlines() if len(t.strip()) > 0 and t[0] != '#']
-        toolchains = lines
-    configs = []
-
-    (_, _, _, _, hostarch) = os.uname()
-    # ~2015 distros report x86 when on a 32bit install
-    if hostarch == 'i686' or hostarch == 'i386' or hostarch == 'x86':
-        hostarch = 'x86'
-
-    for row in csv.reader(toolchains):
-        config = {}
-        configfile = row[0]
-        config_hostarch = row[1]
-        keep = False
-
-        # Keep all toolchain configs that work regardless of the host
-        # architecture
-        if config_hostarch == "any":
-            keep = True
-
-        # Keep all toolchain configs that can work on the current host
-        # architecture
-        if hostarch == config_hostarch:
-            keep = True
-
-        # Assume that x86 32 bits toolchains work on x86_64 build
-        # machines
-        if hostarch == 'x86_64' and config_hostarch == "x86":
-            keep = True
-
-        if not keep:
-            continue
-
-        if not os.path.isabs(configfile):
-            configfile = os.path.join(buildrootdir, configfile)
-
-        with open(configfile) as r:
-            config = r.readlines()
-        configs.append(config)
-    return configs
-
-
-async def is_toolchain_usable(configfile, config):
-    """Check if the toolchain is actually usable."""
-
-    with open(configfile) as configf:
-        configlines = configf.readlines()
-
-    # Check that the toolchain configuration is still present
-    for toolchainline in config:
-        if toolchainline not in configlines:
-            print("WARN: toolchain can't be used", file=sys.stderr)
-            print("      Missing: %s" % toolchainline.strip(), file=sys.stderr)
-            return False
-
-    return True
-
-
 async def fixup_config(sysinfo, configfile):
     """Finalize the configuration and reject any problematic combinations
 
@@ -581,24 +513,11 @@  async def fixup_config(sysinfo, configfile):
 
 async def gen_config(args):
     """Generate a new random configuration
-
-    This function generates the configuration, by choosing a random
-    toolchain configuration and then generating a random selection of
-    packages.
     """
 
     sysinfo = SystemInfo()
 
-    if args.toolchains_csv:
-        # Select a random toolchain configuration
-        configs = get_toolchain_configs(args.toolchains_csv, args.buildrootdir)
-
-        i = randint(0, len(configs) - 1)
-        toolchainconfig = configs[i]
-    else:
-        toolchainconfig = []
-
-    configlines = list(toolchainconfig)
+    configlines = list()
 
     # Combine with the minimal configuration
     minimalconfigfile = os.path.join(args.buildrootdir,
@@ -658,9 +577,6 @@  async def gen_config(args):
     if ret:
         return ret
 
-    if not await is_toolchain_usable(configfile, toolchainconfig):
-        return 2
-
     # Now, generate the random selection of packages, and fixup
     # things if needed.
     # Safe-guard, in case we can not quickly come to a valid
@@ -676,7 +592,7 @@  async def gen_config(args):
             "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
             "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
             "KCONFIG_PROBABILITY=%d" % randint(1, 20),
-            "randpackageconfig" if args.toolchains_csv else "randconfig")
+            "randconfig")
         ret = await proc.wait()
         if ret:
             return ret
@@ -711,17 +627,6 @@  if __name__ == '__main__':
                         help="Buildroot directory (relative to current directory)",
                         type=str, default='.')
 
-    toolchains_csv = parser.add_mutually_exclusive_group(required=False)
-    toolchains_csv.add_argument("--toolchains-csv",
-                                dest="toolchains_csv",
-                                help="Path of the toolchain configuration file",
-                                type=str)
-    toolchains_csv.add_argument("--no-toolchains-csv",
-                                dest="toolchains_csv",
-                                help="Generate random toolchain configuration",
-                                action='store_false')
-    parser.set_defaults(toolchains_csv="support/config-fragments/autobuild/toolchain-configs.csv")
-
     args = parser.parse_args()
 
     # We need the absolute path to use with O=, because the relative