I installed the latest Cygwin to test EDK2 builds. One problem is lack of Cygwin build instructions. Based on what I see, the Cygwin should run from Windows shell and not bash shell. Here are the commands I tried:
set CYGWIN_HOME=D:\tmp\cygwin64 set NASM_PREFIX=D:\edk2build\tools\nasm211\ cd /d D:\edk2build\edk2 Edk2Setup.bat build.exe -p ShellPkg\ShellPkg.dsc -b RELEASE -t CYGGCC -n 16 -a IA32 The first problem with the existing Cygwin setup is that it does not support Win64. That is because: *_CYGGCC_*_MAKE_PATH = DEF(MS_VS_BIN)\nmake.exe .. resolves to a hard-coded path Win32 path: C:\Program Files\Microsoft Visual Studio 8\Vc\bin .. which does not exist on Win64 machines (my recent proposal to replace hard coded Windows paths with EV references was rejected). I don't see much point in setting up a Win32 test because quite a few Windows users have switched to Win64. So instead I work around this problem by modifying the hard-coded path. The next problem is: NMAKE : fatal error U1077: '"c:/cygwin/opt/tiano/i386-tiano-pe/i386-tiano-pe/bin/gcc"' Another hard-coded Windows path. The name suggests a custom built gcc. Cygwin doesn't ship with a compiler by this name. To work around I change it to the Cygwin native gcc 4.8.3 compiler and try again: cc1.exe: error while loading shared libraries: ?: cannot open shared object file To resolve this, I add to the Path: set path=D:\tmp\cygwin64\usr\i686-pc-cygwin\sys-root\usr\bin;%Path% Next problem: cygwin warning: MS-DOS style path detected: d:\edk2build\edk2\ShellPkg\Library\UefiFileHandleLib\UefiFileHandleLib.c Preferred POSIX equivalent is: /cygdrive/d/edk2build/edk2/ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.c CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames Solution: set CYGWIN=nodosfilewarning Next problem: The first C file compiles without any error logged, yet gcc comes back with return code 1 and no object file is written. The cause is not obvious. Next I try from the Cygwin bash shell: $ cd /cygdrive/d/edk2build/edk2 . edksetup.sh $ build -p ShellPkg/ShellPkg.dsc -b RELEASE -t CYGGCC -n 16 -a IA32 Result is: build.py... : error 7000: Failed to start command C:\WINDDK\3790.1830\bin\x86\nmake.exe Same happens if Cygwin make is used: build.py... : error 7000: Failed to start command c:/cygwin/bin\make.exe Work around: change tools_def: use cygwin style paths: DEFINE CYGWIN_BIN = /cygdrive/d/tmp/cygwin64/bin/ DEFINE CYGWIN_BINIA32 = /cygdrive/d/tmp/cygwin64/bin/ DEFINE CYGWIN_BINX64 = /cygdrive/d/tmp/cygwin64/bin/ etc Result is better. Some C files compile, then: /cygdrive/d/edk2build/edk2/Build/Shell/RELEASE_CYGGCC/IA32/MdePkg/Library/BaseLib/BaseLib/OUTPUT/Ia32/EnablePaging64.iii:40: Error: unsupported instruction `mov' I need to set this test aside for the moment. I am sure Cygwin can be made to work. But it seems like quite a few changes are needed. Disclaimer: I don't use Cygwin much. maybe someone more familiar with Cygwin could get it going more easily. Thanks, Scott -----Original Message----- From: Gao, Liming [mailto:liming....@intel.com] Sent: Friday, October 24, 2014 04:57 AM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] EDK2 Developer Tools for Windows Jordan: Before deprecate those tool chains, I still want to make them work with the updated Build Tools. If there is no one to use them, I think we can remove them. Could you raise your proposal in this mail list to collect more feedbacks? Thanks Liming -----Original Message----- From: Jordan Justen [mailto:jljus...@gmail.com] Sent: Friday, October 24, 2014 8:27 AM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] EDK2 Developer Tools for Windows On Thu, Oct 23, 2014 at 6:46 AM, Gao, Liming <liming....@intel.com> wrote: > Scott: > Yes. GenMake.py change is also required. But, this change will impact > CYGGCC tool chain. So, CYGGCC Make path should be changed to > DEF(CYGWIN_BIN)\make.exe instead of DEF(MS_VS_BIN)\nmake.exe. Can we change CYGGCC like this? I basically think CYGGCC is pointless, but I thought that the strange fact that it used nmake was one of the main characteristics of it. And, if we can change a toolchain so drastically, why can't we deprecate toolchains? (For example, I think we should just deprecate CYGGCC and ELFGCC...) -Jordan > Next, could you create the full patch and send it for review? > > Thanks > Liming > -----Original Message----- > From: Scott Duplichan [mailto:sc...@notabs.org] > Sent: Wednesday, October 22, 2014 12:04 PM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] EDK2 Developer Tools for Windows > > Hello Liming, > > Ah, yes. Why didn't I think of that! I retested on Windows and Linux using > your patch below and it all passes. The GenMake.py patch and the > corresponding update of build.exe are still needed. > > Thanks, > Scott > > -----Original Message----- > From: Gao, Liming [mailto:liming....@intel.com] > Sent: Tuesday, October 21, 2014 10:21 PM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] EDK2 Developer Tools for Windows > > Scott: > Could we configure GCC49_DLL like below to resolve this issue? > > set GCC49_DLL=D:\edk2build\tools\gcc491-x86\dll; > D:\edk2build\tools\gcc491-x86\bin > > Thanks > Liming > -----Original Message----- > From: Scott Duplichan [mailto:sc...@notabs.org] > Sent: Wednesday, October 22, 2014 3:28 AM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] EDK2 Developer Tools for Windows > > Hello Liming, > > The build_rule.template part of this revised patch looks good. It removes the > need for the non-ipf symrename echo work around, and makes the build output > easier to look at. > > The new tools_def.template patch almost works. I get an echo fail for Windows > hosted ARM/AARCH64 builds: > "echo" objcopy not needed for > d:\edk2build\edk2\Build\Shell\RELEASE_GCC49\ARM\ShellPkg\Application\S > hell\Shell\DEBUG\Shell.dll '"echo"' is not recognized as an internal > or external command. > > One solution would be to treat Windows hosted builds of ARM/AARCH64 same as > x86: let it invoke objcopy with no flags. > Here is the reason the echo.exe in the gcc bin directory is no longer > invoked: When the build system tries to invoke "echo", it adds only the gcc > dll directory (*_GCC49_*_*_DLL) to the path. It does not add the gcc bin > directory to the path. The original patch solves this problem by 'abusing' > the purpose of *_GCC49_*_*_DLL and putting both DLL and BIN paths there. > Other solutions are putting echo.exe in the DLL directory (confusing), or in > the pre-existing path, or in BaseTools\Bin\Win32. But these methods add extra > steps when setting up the build environment. > > IA32 X64 ARM ARCH64 > Windows host pass pass fail fail > Linux host pass pass > > Here are the commands I used for testing on Windows: > > cd /d D:\edk2build\edk2 > Edk2Setup.bat > set NASM_PREFIX=D:\edk2build\tools\nasm211\ > set GCC49_BIN=D:\edk2build\tools\gcc491-x86\bin\ > set GCC49_DLL=D:\edk2build\tools\gcc491-x86\dll\ > set GCC49_ARM_PREFIX=D:\edk2build\tools\gcc491-arm\bin\ > set GCC49_AARCH64_PREFIX=D:\edk2build\tools\gcc491-aarch64\bin\ > build.exe -p ShellPkg\ShellPkg.dsc -b RELEASE -t GCC49 -n 16 -a IA32 > build.exe -p ShellPkg\ShellPkg.dsc -b RELEASE -t GCC49 -n 16 -a X64 > build.exe -p ShellPkg\ShellPkg.dsc -b RELEASE -t GCC49 -n 16 -a ARM > build.exe -p ShellPkg\ShellPkg.dsc -b RELEASE -t GCC49 -n 16 -a > AARCH64 > > Though I didn't test Linux hosted ARM/AARCH64 builds, they should still work. > > Thanks, > Scott > > -----Original Message----- > From: Gao, Liming [mailto:liming....@intel.com] > Sent: Tuesday, October 21, 2014 04:27 AM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] EDK2 Developer Tools for Windows > > Scott: > Update the patch for BaseTools/Conf files. > 1. Update build_rule.template to add the specific rule for IPF arch. Then, > the specific echo is not required. > 2. Update tools_def.template to configure GCC49_BIN and GCC49_DLL. It is > the compatible change. > > Index: build_rule.template > =================================================================== > --- build_rule.template (revision 16124) > +++ build_rule.template (working copy) > @@ -131,12 +131,34 @@ > <Command.GCC, Command.RVCT> > # For RVCTCYGWIN CC_FLAGS must be first to work around pathing issues > "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src} > - "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst} > > <Command.ARMGCC, Command.ARMLINUXGCC, command.XCODE> > "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src} > > +[C-Code-File.COMMON.IPF] > + <InputFile> > + ?.c > + ?.C > + ?.cc > + ?.CC > + ?.cpp > + ?.Cpp > + ?.CPP > > + <ExtraDependency> > + $(MAKE_FILE) > + > + <OutputFile> > + $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj > + > + <Command.MSFT, Command.INTEL> > + "$(CC)" /Fo${dst} $(CC_FLAGS) $(INC) ${src} > + > + <Command.GCC, Command.RVCT> > + # For RVCTCYGWIN CC_FLAGS must be first to work around pathing issues > + "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src} > + "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst} > + > [C-Header-File] > <InputFile> > *.h, *.H > Index: tools_def.template > =================================================================== > --- tools_def.template (revision 16124) > +++ tools_def.template (working copy) > @@ -182,8 +182,8 @@ > DEFINE GCC48_IA32_PREFIX = /usr/bin/ > DEFINE GCC48_X64_PREFIX = /usr/bin/ > > -DEFINE GCC49_IA32_PREFIX = /usr/bin/ > -DEFINE GCC49_X64_PREFIX = /usr/bin/ > +DEFINE GCC49_IA32_PREFIX = ENV(GCC49_BIN) > +DEFINE GCC49_X64_PREFIX = ENV(GCC49_BIN) > > DEFINE UNIX_IASL_BIN = ENV(IASL_PREFIX)iasl > DEFINE WIN_ASL_BIN_DIR = C:\ASL > @@ -4489,7 +4489,8 @@ > > #################################################################################### > *_GCC49_*_*_FAMILY = GCC > > -*_GCC49_*_MAKE_PATH = make > +*_GCC49_*_MAKE_PATH = DEF(GCC49_IA32_PREFIX)make > +*_GCC49_*_*_DLL = ENV(GCC49_DLL) > *_GCC49_*_ASL_PATH = DEF(UNIX_IASL_BIN) > > *_GCC49_*_PP_FLAGS = DEF(GCC_PP_FLAGS) > > Thanks > Liming > -----Original Message----- > From: Gao, Liming [mailto:liming....@intel.com] > Sent: Tuesday, October 21, 2014 4:22 PM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] EDK2 Developer Tools for Windows > > Scott: > I will download them and try again. > > For the patch, I provide another compatible version in previous mail. Have > you any comment for it? > > Linux user doesn't need to set GCC49_BIN, GCC49_DLL env, because /usr/bin/ is > the default system PATH. Windows user need to set GCC49_BIN, GCC49_DLL and > IASL_PREFIX env to use this tool chain. > Index: Conf/tools_def.template > =================================================================== > --- Conf/tools_def.template (revision 16124) > +++ Conf/tools_def.template (working copy) > @@ -182,8 +182,8 @@ > DEFINE GCC48_IA32_PREFIX = /usr/bin/ > DEFINE GCC48_X64_PREFIX = /usr/bin/ > > -DEFINE GCC49_IA32_PREFIX = /usr/bin/ > -DEFINE GCC49_X64_PREFIX = /usr/bin/ > +DEFINE GCC49_IA32_PREFIX = ENV(GCC49_BIN) > +DEFINE GCC49_X64_PREFIX = ENV(GCC49_BIN) > > -*_GCC49_*_MAKE_PATH = make > +*_GCC49_*_MAKE_PATH = DEF(GCC49_BIN)make > +*_GCC49_*_*_DLL = DEF(GCC49_DLL) > *_GCC49_*_ASL_PATH = DEF(UNIX_IASL_BIN) > > Thanks > Liming > -----Original Message----- > From: Scott Duplichan [mailto:sc...@notabs.org] > Sent: Tuesday, October 21, 2014 1:14 PM > To: edk2-devel@lists.sourceforge.net > Subject: [edk2] EDK2 Developer Tools for Windows > > Here are Windows hosted gcc tool chains for EDK2 builds: > > https://sourceforge.net/projects/edk2developertoolsforwindows/files/ > > I will add more readme files tomorrow. > > The tools build IA32, X64, IPF, ARM, and AARCH64 from Windows. X64 builds are > well tested. I have not yet boot tested IA32 builds but plan to. I don't have > a way to boot test IPF, ARM, and AARCH64 builds. > > Only gcc 4.9.1 tool chains are uploaded. Older gcc versions can be built if > needed. A patch is included to add support for IA32, X64, ARM, and AARCH64. > If there is any interest in IPF it can be added too. > > This patch "breaks" non-Windows builds. The fix is to execute: > > export GCC49_X86=/usr > > .. before building. I think logic needs to be added to edksetup.sh to set > GCC49_X86 if it is not already set. Linux guys, what is the best way? > > Thanks, > Scott > > > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > > ---------------------------------------------------------------------- > -------- Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ---------------------------------------------------------------------- > -------- _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel