https://gem5-review.googlesource.com/#/c/public/gem5/+/5641
On Fri, Nov 10, 2017 at 5:20 PM, Gabe Black <[email protected]> wrote: > Apologies, I didn't realize that was a special case. I may not have time > to implement it before I have to stop for the day (although I'll try), but > it would be simple enough to add a parameter to init called "sys_paths" or > something along those lines which defaults to None, and if still None in > init isn't set on that instance. Otherwise, self._sys_paths would be set to > that and override the class default. > > Gabe > > On Fri, Nov 10, 2017 at 10:30 AM, Curtis Dunham <[email protected]> > wrote: > >> Hi all, Gabe, >> This commit breaks the regression quick/fs/80.netperf-stream/alp >> ha/linux/twosys-tsunami-simple-atomic. >> It's the only regression that uses SysConfig() with an actual script >> argument, and it needs to find that script in $GEM5_ROOT/configs/boot/. >> >> Before this commit, this would be found because script.path was >> initialized with [joinpath(config_root, 'boot')]. Now it is initialized >> with PathSearchFunc('boot'), a (nonexistent) sibling to >> $M5_PATH/{disks,binaries}. >> >> >> Thanks, >> Curtis >> >> -----Original Message----- >> From: gem5-dev [mailto:[email protected]] On Behalf Of Gabe >> Black (Gerrit) >> Sent: Tuesday, October 31, 2017 5:18 PM >> Subject: [gem5-dev] Change in public/gem5[master]: config: Rework the >> SysPaths functions into functors. >> >> Gabe Black has submitted this change and it was merged. ( >> https://gem5-review.googlesource.com/5341 ) >> >> Change subject: config: Rework the SysPaths functions into functors. >> ...................................................................... >> >> config: Rework the SysPaths functions into functors. >> >> These functions were already being treated as psuedo objects and had >> properties assigned to them setting what their paths were. That's a bit >> unusual and made it less obvious what the code was doing, but also forced >> the "system" function to know what all the possible path searching >> functions were so that they'd have their "path" property initialized >> properly in a central location. >> >> This change introduces a PathSearcFunc class which encapsulates the >> mechanisms of the old code and makes it implicitly extensible so that other >> path searching functions which might look in other directories can be added >> in other places. >> >> Change-Id: I7be28e51481a06ec83997677af99927709b18003 >> Reviewed-on: https://gem5-review.googlesource.com/5341 >> Reviewed-by: Andreas Sandberg <[email protected]> >> Maintainer: Andreas Sandberg <[email protected]> >> --- >> M configs/common/SysPaths.py >> 1 file changed, 28 insertions(+), 42 deletions(-) >> >> Approvals: >> Andreas Sandberg: Looks good to me, approved; Looks good to me, >> approved >> >> >> >> diff --git a/configs/common/SysPaths.py b/configs/common/SysPaths.py >> index 316fd03..c012846 100644 >> --- a/configs/common/SysPaths.py >> +++ b/configs/common/SysPaths.py >> @@ -27,55 +27,41 @@ >> # Authors: Ali Saidi >> >> import os, sys >> -from os.path import join as joinpath >> -from os import environ as env >> >> config_path = os.path.dirname(os.path.abspath(__file__)) >> config_root = os.path.dirname(config_path) >> >> -def searchpath(path, filename): >> - for p in path: >> - f = joinpath(p, filename) >> - if os.path.exists(f): >> - return f >> - raise IOError, "Can't find file '%s' on path." % filename >> +class PathSearchFunc(object): >> + _sys_paths = None >> >> -def disk(filename): >> - system() >> - return searchpath(disk.path, filename) >> + def __init__(self, *subdirs): >> + self._subdir = os.path.join(*subdirs) >> >> -def binary(filename): >> - system() >> - return searchpath(binary.path, filename) >> + def __call__(self, filename): >> + if self._sys_paths is None: >> + try: >> + paths = os.environ['M5_PATH'].split(':') >> + except KeyError: >> + paths = [ '/dist/m5/system', >> + '/n/poolfs/z/dist/m5/system' ] >> >> -def script(filename): >> - system() >> - return searchpath(script.path, filename) >> + # expand '~' and '~user' in paths >> + paths = map(os.path.expanduser, paths) >> >> -def system(): >> - if not system.path: >> + # filter out non-existent directories >> + paths = filter(os.path.isdir, paths) >> + >> + if not paths: >> + raise IOError, "Can't find a path to system files." >> + >> + self._sys_paths = paths >> + >> + filepath = os.path.join(self._subdir, filename) >> + paths = (os.path.join(p, filepath) for p in self._sys_paths) >> try: >> - path = env['M5_PATH'].split(':') >> - except KeyError: >> - path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ] >> + return next(p for p in paths if os.path.exists(p)) >> + except StopIteration: >> + raise IOError, "Can't find file '%s' on path." % filename >> >> - # expand '~' and '~user' in paths >> - path = map(os.path.expanduser, path) >> - >> - # filter out non-existent directories >> - system.path = filter(os.path.isdir, path) >> - >> - if not system.path: >> - raise IOError, "Can't find a path to system files." >> - >> - if not binary.path: >> - binary.path = [joinpath(p, 'binaries') for p in system.path] >> - if not disk.path: >> - disk.path = [joinpath(p, 'disks') for p in system.path] >> - if not script.path: >> - script.path = [joinpath(config_root, 'boot')] >> - >> -system.path = None >> -binary.path = None >> -disk.path = None >> -script.path = None >> +disk = PathSearchFunc('disks') >> +binary = PathSearchFunc('binaries') >> +script = PathSearchFunc('boot') >> >> -- >> To view, visit https://gem5-review.googlesource.com/5341 >> To unsubscribe, or for help writing mail filters, visit >> https://gem5-review.googlesource.com/settings >> >> Gerrit-Project: public/gem5 >> Gerrit-Branch: master >> Gerrit-MessageType: merged >> Gerrit-Change-Id: I7be28e51481a06ec83997677af99927709b18003 >> Gerrit-Change-Number: 5341 >> Gerrit-PatchSet: 2 >> Gerrit-Owner: Gabe Black <[email protected]> >> Gerrit-Assignee: Andreas Sandberg <[email protected]> >> Gerrit-Reviewer: Andreas Sandberg <[email protected]> >> Gerrit-Reviewer: Gabe Black <[email protected]> >> _______________________________________________ >> gem5-dev mailing list >> [email protected] >> http://m5sim.org/mailman/listinfo/gem5-dev >> IMPORTANT NOTICE: The contents of this email and any attachments are >> confidential and may also be privileged. If you are not the intended >> recipient, please notify the sender immediately and do not disclose the >> contents to any other person, use it for any purpose, or store or copy the >> information in any medium. Thank you. >> > > _______________________________________________ gem5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/gem5-dev
