I hacked the tools_def template and got -arch 386 into the build command, however I saw this fly across the screen:
clang: warning: argument unused during compilation: '-arch 386' The clang I have is from Ubuntu's repos: clang --version Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0) Target: x86_64-pc-linux-gnu Thread model: posix Bummer. I suppose I'll have to make my own clang-3.5 instead of using Ubuntu's packages. So.... I then tried to build BaseLib.inf using -a X64, and I get a totally different kind of error: build.py... : error C0DE: Unknown fatal error when processing [MdePkg/Library/BaseLib/BaseLib.inf] (Please send email to [email protected] for help, attaching following call stack trace!) (Python 2.7.6 on linux2) Traceback (most recent call last): File "BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py", line 2298, in Main MyBuild.Launch() File "BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py", line 2054, in Launch self._BuildModule() File "BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py", line 1721, in _BuildModule self._Build(self.Target, Ma, BuildModule=True) File "BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py", line 1243, in _Build AutoGenObject.CreateMakeFile(CreateDepsMakeFile) File "BaseTools/Source/Python/AutoGen/AutoGen.py", line 3931, in CreateMakeFile if Makefile.Generate(): File "BaseTools/Source/Python/AutoGen/GenMake.py", line 184, in Generate FileContent = self._TEMPLATE_.Replace(self._TemplateDict) File "BaseTools/Source/Python/AutoGen/GenMake.py", line 512, in _CreateTemplateDict RespDict = self.CommandExceedLimit() File "BaseTools/Source/Python/AutoGen/GenMake.py", line 702, in CommandExceedLimit Str = self._AutoGenObject._BuildOption[Tool]['FLAGS'] KeyError: 'FLAGS' Fun times ... Thomas -----Original Message----- From: [email protected] [mailto:[email protected]] Sent: Tuesday, May 24, 2016 4:13 PM To: Palmer, Thomas <[email protected]> Cc: [email protected] Subject: Re: [edk2] Question on CLANG build > On May 24, 2016, at 2:02 PM, Palmer, Thomas <[email protected]> wrote: > > Andrew, > > I agree the C code is correct, which is why I figure I must not be > using CLANG correctly. > > I do not see the -arch 386 flag in the compile command. I see that > flag for XCLANG, but not for CLANG35. I'll try to hack the Conf file to > include that flag for IA32. > XCODE5 is the current clang that ships with Xcode on a Mac so it is the best one to copy. You have to specify -arch or -target or you will get the compiler defaults. The -target flag is more about cross compilers. For example *XCODE5_X64_CC_FLAGS sets -target x86_64-pc-win32-macho to compile using the Windows/EFI Calling convention but to generate a Mach-O (Image format on a Mac like ELF or PE/COFF) to make the debugger happy. I did not see IA32 or X64 targets for CLANG35 in master? Thanks, Andrew Fish > Thomas > > > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: Tuesday, May 24, 2016 3:46 PM > To: Palmer, Thomas <[email protected]> > Cc: [email protected] > Subject: Re: [edk2] Question on CLANG build > > >> On May 24, 2016, at 1:19 PM, Palmer, Thomas <[email protected]> wrote: >> >> EDK2 Clang users: >> >> I've been curious about using CLANG on one of our systems to >> try out the llvm ecosystem. I can compile my project in both GCC48 and >> VS2013, however, when I tried CLANG35 on a Ubuntu 14.04 system, I got this >> error: >> >> Building ... >> MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerL >> i >> bIdt.inf [IA32] >> MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c:58:10: >> warning: cast to 'void *' from smaller integer type 'UINTN' (aka >> 'unsigned int') [-Wint-to-void-pointer-cast] return (VOID *) (UINTN) >> Memory; >> >> I surmise the VOID* or UINTN must be incorrectly configured somewhere? Or >> perhaps I missed some crucial setup steps? >> > > Thomas, > > VOID * is just a pointer. UINTN should be the size of a pointer. The only way > I can reproduce this error is to try and compile IA32 code with the x86_64 > version of the compiler. I'm not 100% sure but I think you only get this > error if sizeof(unsigned int) < sizeof (void *). For IA32 I would expect > UINTN to be an unsigned int and a pointer fits into an int? > > UINTN is defined here: > https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Ia32/ProcessorBind.h > for IA32. > > Are you sure you are using the correct compiler flags for IA32, for the Xcode > version of clang that means pass: -arch i386. No arch usually defaults to > x86_64. > > ~/work/Compiler>cat void.c > > typedef unsigned long long UINT64; > typedef unsigned int UINT32; > typedef UINT32 UINTN; > > > void * > Test (UINT64 Memory) > { > return (void *) (UINTN) Memory; > } > ~/work/Compiler>clang -S void.c > void.c:10:10: warning: cast to 'void *' from smaller integer type 'UINTN' > (aka 'unsigned int') > [-Wint-to-void-pointer-cast] > return (void *) (UINTN) Memory; > ^ > 1 warning generated. > ~/work/Compiler>clang -arch i386 -S void.c > > > Thanks, > > Andrew Fish > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

