On 2015-08-05 12:19:47, Andrew Fish wrote: > > > On Aug 5, 2015, at 12:09 PM, Jordan Justen <jordan.l.jus...@intel.com> > > wrote: > > > > On 2015-08-05 07:06:46, Gao, Liming wrote: > >> Thanks for your all comments. > >> > >> Most people prefers to keep WOSKAPCE as single directory, and > >> introduce new env $(WORKSPACE_MULTIPLE). > > > > I'm not sure about this conclusion. I think Paolo, Laszlo and I all > > expressed that using WORKSPACE for the multiple directories seemed > > more natural. > > > > Have your really thought this out? It breaks all of my internal > build tips, and a lot of the edk2 build tips.
Unless we do something about most of those references then WORKSPACE will have to be set to your 'edk2' tree. Therefore your Conf files must exist in your edk2 tree, and your build output must exist in your edk2 tree, and BaseTools must exist in your edk2 tree. Many of those references map to the three new variables I mentioned. $WORKSPACE/EmulatorPkg doesn't. I don't know if that means that we need an EDKII variable, or maybe PLATFORM_WORKSPACE, or perhaps something else... -Jordan > >git grep WORKSPACE — > ... > EmulatorPkg/Unix/Host/Host.inf:148: XCODE:*_*_X64_CC_FLAGS = > -I$(WORKSPACE)/EmulatorPkg/Unix/Host/X11IncludeHack > EmulatorPkg/build.sh:22:if [ -z "$WORKSPACE" ] > EmulatorPkg/build.sh:37: echo Building from: $WORKSPACE > EmulatorPkg/build.sh:178: BUILD_OUTPUT_DIR=$WORKSPACE/Build/Emulator32 > EmulatorPkg/build.sh:184: BUILD_OUTPUT_DIR=$WORKSPACE/Build/Emulator > EmulatorPkg/build.sh:201:PLATFORMFILE=$WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > EmulatorPkg/build.sh:209: make -C $WORKSPACE/BaseTools > EmulatorPkg/build.sh:214: make -C $WORKSPACE/BaseTools > EmulatorPkg/build.sh:232: cp $WORKSPACE/EmulatorPkg/Unix/lldbefi.py > $BUILD_OUTPUT_DIR/DEBUG_"$TARGET_TOOLS"/$PROCESSOR > EmulatorPkg/build.sh:233: cd $BUILD_ROOT_ARCH; /usr/bin/lldb --source > $WORKSPACE/EmulatorPkg/Unix/lldbinit Host > EmulatorPkg/build.sh:236: cp $WORKSPACE/EmulatorPkg/Unix/.gdbinit > $BUILD_OUTPUT_DIR/DEBUG_"$TARGET_TOOLS"/$PROCESSOR > EmulatorPkg/build.sh:241: /usr/bin/gdb $BUILD_ROOT_ARCH/Host -q > -cd=$BUILD_ROOT_ARCH -x $WORKSPACE/EmulatorPkg/Unix/GdbRun > EmulatorPkg/build.sh:247: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean > EmulatorPkg/build.sh:248: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean > EmulatorPkg/build.sh:252: make -C $WORKSPACE/BaseTools clean > EmulatorPkg/build.sh:253: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean > EmulatorPkg/build.sh:254: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean > EmulatorPkg/build.sh:255: build -p $WORKSPACE/ShellPkg/ShellPkg.dsc -a > IA32 -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean > EmulatorPkg/build.sh:265: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D > BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD $NETWORK_SUPPORT $BUILD_NEW_SHELL > $BUILD_FAT -n 3 > EmulatorPkg/build.sh:267: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D > BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD -D SKIP_MAIN_BUILD -n 3 modules > EmulatorPkg/build.sh:268: build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc > $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D > BUILD_$ARCH_SIZE $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3 > OvmfPkg/README:48:under the $WORKSPACE/Build/*/*/FV directory. The actual > path will > OvmfPkg/README:179: - Install the drivers into a directory called Intel3.5 > in your WORKSPACE. > OvmfPkg/ResetVector/ResetVector.inf:36: *_*_IA32_NASMB_FLAGS = > -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/ > OvmfPkg/ResetVector/ResetVector.inf:37: *_*_X64_NASMB_FLAGS = > -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/ > OvmfPkg/build.sh:22:if [ -z "$WORKSPACE" ] > OvmfPkg/build.sh:37: echo Building from: $WORKSPACE > OvmfPkg/build.sh:215: PLATFORMFILE=$WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc > OvmfPkg/build.sh:249:BUILD_ROOT=$WORKSPACE/Build/$PLATFORM_BUILD_DIR/"$BUILDTARGET"_"$TARGET_TOOLS" > OvmfPkg/build.sh:258: make -C $WORKSPACE/BaseTools > OvmfPkg/build.sh:263: make -C $WORKSPACE/BaseTools > ShellBinPkg/ReadMe.txt:9:1. Check out EDK II to $(WORKSPACE) > ShellBinPkg/ReadMe.txt:12:2. Under $(WORKSPACE) directory (i.e. c:\EdkII), > StdLib/StdLib.inc:114: RVCT:*_*_*_CC_FLAGS = --library_interface=none > -DUEFI_C_SOURCE -J$(WORKSPACE)/StdLib/Include > -J$(WORKSPACE)/StdLib/Include/Arm > StdLib/StdLib.inc:124: RVCT:*_*_*_CC_FLAGS = --library_interface=none > -DUEFI_C_SOURCE -J$(WORKSPACE)/StdLib/Include > -J$(WORKSPACE)/StdLib/Include/Arm > Vlv2TbltDevicePkg/PlatformPkg.fdf:963: DXE_DEPEX DXE_DEPEX Optional > $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex > Vlv2TbltDevicePkg/PlatformPkgGcc.fdf:127:FILE = > $(WORKSPACE)/Vlv2TbltDevicePkg/Stitch/Gcc/NvStorageVariable.bin > Vlv2TbltDevicePkg/PlatformPkgGcc.fdf:131:FILE = > $(WORKSPACE)/Vlv2TbltDevicePkg/Stitch/Gcc/NvStorageFtwWorking.bin > Vlv2TbltDevicePkg/PlatformPkgGcc.fdf:135:FILE = > $(WORKSPACE)/Vlv2TbltDevicePkg/Stitch/Gcc/NvStorageFtwSpare.bin > Vlv2TbltDevicePkg/PlatformPkgGcc.fdf:921: DXE_DEPEX DXE_DEPEX Optional > $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex > Vlv2TbltDevicePkg/bldX64.bat:18:@if exist %WORKSPACE%\edk2.log del > %WORKSPACE%\edk2.log > Vlv2TbltDevicePkg/bldX64.bat:19:@if exist %WORKSPACE%\unitool.log del > %WORKSPACE%\unitool.log > Vlv2TbltDevicePkg/bldX64.bat:20:@if exist %WORKSPACE%\Conf\build_rule.txt del > %WORKSPACE%\Conf\build_rule.txt > Vlv2TbltDevicePkg/bldX64.bat:21:@if exist > %WORKSPACE%\Conf\FrameworkDatabase.db del > %WORKSPACE%\Conf\FrameworkDatabase.db > Vlv2TbltDevicePkg/bldX64.bat:22:@if exist %WORKSPACE%\Conf arget.txt del > %WORKSPACE%\Conf arget.txt > Vlv2TbltDevicePkg/bldX64.bat:23:@if exist %WORKSPACE%\Conf ools_def.txt > del %WORKSPACE%\Conf ools_def.txt > Vlv2TbltDevicePkg/bld_vlv.bat:23:set WORKSPACE=%CD% > Vlv2TbltDevicePkg/bld_vlv.bat:24:if %WORKSPACE:~-1%==\ set > WORKSPACE=%WORKSPACE:~0,-1% > Vlv2TbltDevicePkg/bld_vlv.bat:32:if exist %WORKSPACE%\edk2.log del > %WORKSPACE%\edk2.log > Vlv2TbltDevicePkg/bld_vlv.bat:33:if exist %WORKSPACE%\unitool.log del > %WORKSPACE%\unitool.log > Vlv2TbltDevicePkg/bld_vlv.bat:34:if exist %WORKSPACE%\Conf arget.txt del > %WORKSPACE%\Conf arget.txt > Vlv2TbltDevicePkg/bld_vlv.bat:35:if exist %WORKSPACE%\Conf ools_def.txt > del %WORKSPACE%\Conf ools_def.txt > Vlv2TbltDevicePkg/bld_vlv.bat:36:if exist %WORKSPACE%\Conf\build_rule.txt del > %WORKSPACE%\Conf\build_rule.txt > Vlv2TbltDevicePkg/bld_vlv.bat:37:if exist > %WORKSPACE%\Conf\FrameworkDatabase.db del > %WORKSPACE%\Conf\FrameworkDatabase.db > Vlv2TbltDevicePkg/bld_vlv.bat:50:set > EDK_SOURCE=%WORKSPACE%\EdkCompatibilityPkg > Vlv2TbltDevicePkg/bld_vlv.bat:236:copy /y/b %BUILD_PATH%\FV\Vlv%Arch%.fd > %WORKSPACE%\%BIOS_Name% >nul > Vlv2TbltDevicePkg/bld_vlv.sh:27:#WORKSPACE=$(pwd) > Vlv2TbltDevicePkg/bld_vlv.sh:66:config_file=$WORKSPACE/$PLATFORM_PACKAGE/PlatformPkgConfig.dsc > Vlv2TbltDevicePkg/bld_vlv.sh:67:auto_config_inc=$WORKSPACE/$PLATFORM_PACKAGE/AutoPlatformCFG.txt > Vlv2TbltDevicePkg/bld_vlv.sh:70:EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkg > Vlv2TbltDevicePkg/bld_vlv.sh:100: > ECP_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp > Vlv2TbltDevicePkg/bld_vlv.sh:101: > EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp > Vlv2TbltDevicePkg/bld_vlv.sh:224:cp -f $BUILD_PATH/FV/VLV.fd > $WORKSPACE/$BIOS_Name > ... > > Thanks, > > Andrew Fish > > > I think you originally suggested just using WORKSPACE, but maybe now > > have changed your mind. > > > > I know Tim had some big concerns with expanding WORKSPACE. I agree > > with his concerns, but I don't think it will be much better with > > WORKSPACE_MULTIPLE. (The same tools will break.) > > > > Mike and Andrew appear to prefer WORKSPACE_MULTIPLE. > > > > What about this suggestion? > > > > WORKSPACE: expand to a list of directories > > > > WORKSPACE_BUILD: if not set, use first path in WORKSPACE + '/Build’ > > > > Build is not architectural, this is a value in the DSC. > > > WORKSPACE_CONF: if not set, scan WORKSPACE paths to find 'Conf' dir > > > > WORKSPACE_TOOLS: if not set, scan WORKSPACE paths to find 'BaseTools' dir > > > > With WORKSPACE and WORKSPACE_MULTIPLE we have a strange intersection > > of 'part of the source tree' and 'all of the source tree'. I think the > > variables I recommend avoid that partial overlap. > > > > We have the current stuff all works, and you can opt into a new feature if > needed. You guys want to break the world to make it more pedantically > correct? What do we gain from breaking a large number of build targets? > > Thanks, > > Andrew Fish > > > -Jordan > > > >> I think Mike solution can > >> make them more clear if WORKSPACE_MULTIPLE is set. > >> > >> On QA team impact, it should be small. QA team can still use the > >> current working model to place all packages in root directory, and > >> set WORKSPACE only. QA team just needs to know the package list. > >> > >> Tim gave another idea to define multiple source locations in > >> Platform DSC file. It doesn't conflict with this proposal. We can > >> implement $(WORKSPACE_MULTIPLE) feature first, and evaluate DSC > >> update. On the fixed tree layout, these two solutions can work. Once > >> the end user reorganizes its tree layout, he needs to set > >> $(WORKSPACE_MULTIPLE) env or update Platform DSC file, and build > >> platform DSC. > >> > >> Thanks > >> Liming > >> -----Original Message----- > >> From: Laszlo Ersek [mailto:ler...@redhat.com] > >> Sent: Tuesday, August 04, 2015 7:20 PM > >> To: Justen, Jordan L > >> Cc: Gao, Liming; Paolo Bonzini; edk2-devel@lists.01.org > >> Subject: Re: [edk2] BaseTools features: multiple workspaces > >> > >> On 08/03/15 19:35, Jordan Justen wrote: > >>> On 2015-08-03 02:08:14, Gao, Liming wrote: > >>>> Paolo: > >>>> I think that keep the exiting syntax for WORKSPACE to be a single > >>>> path can minimize the impacts to exiting tools that assume a > >>>> single workspace. > >>> > >>> I know you originally suggested to use WORKSPACE, but got some > >>> feedback that it might be better to create a new variable to not break > >>> some unspecified tools. > >>> > >>> Was anyone able to name an actual tool that would be impacted? Why not > >>> work to update these tools at the same time? An easy 'fix' will be for > >>> any such tool to give an error message if it sees ':' or ';' in the > >>> WORKSPACE environment variable. Although this is really not a fix, it > >>> will be just as much support as if they ignore the new > >>> WORKSPACE_MULTIPLE environment variable. > >>> > >>> I think that using the single separated WORKSPACE environment variable > >>> is more intuitive/expected. From using env vars such as PATH, we all > >>> know what it means. > >>> > >>> For WORKSPACE+WORKSPACE_MULTIPLE, I don't know which has priority. I > >>> assume WORKSPACE is checked first, and then WORKSPACE_MULTIPLE? > >> > >> This was described in Liming's email, in point 4b. > >> > >>> > >>> Will this work for the integrated CryptoPkg + open-ssl? It seems like > >>> we need a priority above EDK II for this. I guess WORKSPACE will not > >>> be set to EDK II in this case? > >>> > >>> Anyway, it just seems a little odd. > >> > >> For me a colon-separated (well, separator-separated :)) single WORKSPACE > >> variable would be more intuitive, but WORKSPACE_MULTIPLE can be defined > >> well enough too. For example: > >> - WORKSPACE must not contain separators > >> - if WORKSPACE_MULTIPLE is set, then the effect is as if > >> ${WORKSPACE}:${WORKSPACE_MULTIPLE} were specified under the > >> well-known PATH semantics. > >> > >> No clue about the CryptoPkg impact. Can you remind me please why CryptoPkg > >> / OpensslLib are special wrt. WORKSPACE? > >> > >> Thanks > >> Laszlo > >> > >>> > >>> -Jordan > >>> > >>>> -----Original Message----- > >>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf > >>>> Of Paolo Bonzini > >>>> Sent: Monday, August 03, 2015 4:31 PM > >>>> To: Gao, Liming; edk2-devel@lists.01.org > >>>> Subject: Re: [edk2] BaseTools features: multiple workspaces > >>>> > >>>> > >>>> On 03/08/2015 05:56, Gao, Liming wrote: > >>>>> Hi, all > >>>>> We will update BaseTools feature to allow more than one workspaces. > >>>>> The detail design in the below. Please help review it. If you have any > >>>>> comments, please let me know. > >>>>> > >>>>> 1. Keep $(WORKSPACE) environment as is > >>>>> > >>>>> a. $(WORKSPACE) determines location of Build and Conf directory. > >>>>> > >>>>> 2. New optional $(WORKSPACE_MULTIPLE) environment is added to > >>>>> include more directories with the separator ';', like $(PATH) > >>>> > >>>> Why is $(WORKSPACE_MULTIPLE) necessary? On Linux it is okay to break > >>>> preexisting paths that contain a ":"; on Windows semicolons are allowed > >>>> in theory but in practice break in several ways. > >>>> > >>>> Paolo > >>>> > >>>>> a. Produce the same behavior if $(WORKSPACE_MULTIPLE) is not set. > >>>>> > >>>>> 3. Update edksetup.bat/edksetup.sh to find BaseTools directory > >>>>> from $(WORKSPACE) and $(WORKSPACE_MULTIPLE) directories. > >>>>> > >>>>> 4. Update BaseTools to support multiple workspaces > >>>>> > >>>>> a. For the relative file path (INF, DSC and FDF), BaseTools will > >>>>> search them from $(WORKSPACE) and $(WORKSPACE_MULTIPLE) directories. > >>>>> > >>>>> b. Search priority from high to low: $(WORKSPACE), > >>>>> $(WORKSPACE_MULTIPLE). > >>>>> > >>>>> This is a compatible feature. It has no impact on current EDKII > >>>>> project. > >>>> _______________________________________________ > >>>> edk2-devel mailing list > >>>> edk2-devel@lists.01.org > >>>> https://lists.01.org/mailman/listinfo/edk2-devel > >>>> _______________________________________________ > >>>> edk2-devel mailing list > >>>> edk2-devel@lists.01.org > >>>> https://lists.01.org/mailman/listinfo/edk2-devel > >>> _______________________________________________ > >>> edk2-devel mailing list > >>> edk2-devel@lists.01.org > >>> https://lists.01.org/mailman/listinfo/edk2-devel > >>> > >> > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel