Mailing List Archive

Adding targets for the bytecode interpreter
Hi there,

I'm sending this to clamav-devel rather than clamav-users as I suspect
I may have missed something during the configure/compile phase rather
than at runtime. If I'm wrong, I'll happily repost to the -users list.

I maintain a distribution of ClamAV for Mac OS X and have to generate
a build which runs on both PPC and Intel architectures for the three
most recent major releases of OS X. I achieve this by using the
following settings for the configure phase (after applying the
appropriate patch for 0.96 clamd on PPC):

bash$ CC="/usr/bin/gcc-4.2" CXX="/usr/bin/g++-4.2" CFLAGS="-O2 -g -
D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.4 -isysroot /Developer/
SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" CXXFLAGS="-O2 -g -
D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.4 -isysroot /Developer/
SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" ./configure --disable-
dependency-tracking --enable-llvm --enable-clamdtop --with-
user=_clamav --with-group=_clamav

When I run clamscan on the same PPC machine I use for building it,
everything runs fine, however, when I copy the build over to a machine
with an Intel processor, I get the following warning about there not
being any available targets.

> libclamav JIT: error creating execution engine: No available targets
> are compatible with this triple, see -version for the available
> targets


When I run clambc to see which targets are available, I get the
following:

> bash$ ./clambc --version
> Clam AntiVirus Bytecode Testing Tool 0.96
> Low Level Virtual Machine (http://llvm.org/):
> llvm version 2.7
> Optimized build with assertions.
> Built May 9 2010 (01:15:14).
> Host: i386-apple-darwin10
> Host CPU: penryn
>
> Registered Targets:
> ppc32 - PowerPC 32
> ppc64 - PowerPC 64

If I do the configure and compile on the Intel machine, it gives the
following targets
> Registered Targets:
> x86 - 32-bit X86: Pentium-Pro and above
> x86-64 - 64-bit X86: EM64T and AMD64

Predictably it then gives the same error message as earlier when I
copy it over to the PowerPC machine.

Could someone tell me how to register both PPC and x86 targets please?

On a related note, I'm intrigued to know how it managed to register 64
bit targets when I only specified 32bit architectures in the configure
script. I'm guessing that means there's some assumptions being made
during the compile phase. If so, how can I override them?

Many thanks
Mark

_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net
Re: Adding targets for the bytecode interpreter [ In reply to ]
On 05/17/2010 09:26 PM, Mark Allan wrote:
> Hi there,
>
> I'm sending this to clamav-devel rather than clamav-users as I suspect I
> may have missed something during the configure/compile phase rather than
> at runtime. If I'm wrong, I'll happily repost to the -users list.

Please open a bugreport, this situation should be detected and handled
automatically (for 0.96.2 probably).

>
> I maintain a distribution of ClamAV for Mac OS X and have to generate a
> build which runs on both PPC and Intel architectures for the three most
> recent major releases of OS X. I achieve this by using the following
> settings for the configure phase (after applying the appropriate patch
> for 0.96 clamd on PPC):
>
> bash$ CC="/usr/bin/gcc-4.2" CXX="/usr/bin/g++-4.2" CFLAGS="-O2 -g
> -D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.4 -isysroot
> /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" CXXFLAGS="-O2 -g
> -D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.4 -isysroot
> /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" ./configure
> --disable-dependency-tracking --enable-llvm --enable-clamdtop
> --with-user=_clamav --with-group=_clamav
>
> When I run clamscan on the same PPC machine I use for building it,
> everything runs fine, however, when I copy the build over to a machine
> with an Intel processor, I get the following warning about there not
> being any available targets.
>
>> libclamav JIT: error creating execution engine: No available targets
>> are compatible with this triple, see -version for the available targets
>
>
> When I run clambc to see which targets are available, I get the following:
>
>> bash$ ./clambc --version
>> Clam AntiVirus Bytecode Testing Tool 0.96
>> Low Level Virtual Machine (http://llvm.org/):
>> llvm version 2.7
>> Optimized build with assertions.
>> Built May 9 2010 (01:15:14).
>> Host: i386-apple-darwin10
>> Host CPU: penryn
>>
>> Registered Targets:
>> ppc32 - PowerPC 32
>> ppc64 - PowerPC 64
>
> If I do the configure and compile on the Intel machine, it gives the
> following targets
>> Registered Targets:
>> x86 - 32-bit X86: Pentium-Pro and above
>> x86-64 - 64-bit X86: EM64T and AMD64
>
> Predictably it then gives the same error message as earlier when I copy
> it over to the PowerPC machine.
>
> Could someone tell me how to register both PPC and x86 targets please?

I completely forgot about this while writing configure.

Upstream LLVM builds by default with *all* backends. For ClamAV that
would be overkill (why compile the PPC backend on an x86 in general),
but for bi-arch builds it needs to build both backends, yes.

For now the easiest workaround is to pass --enable-all-jit-targets to
configure (it'll build X86, PPC and ARM, although ARM is always disabled
at runtime).

A real fix would be to detect the Apple-style universal build (configure
does this already), and build both ppc and x86 then.
If you open a bugreport I'll try to do that for 0.96.2.

>
> On a related note, I'm intrigued to know how it managed to register 64
> bit targets when I only specified 32bit architectures in the configure
> script.

The X86 backend knows to generate code for both 32 and 64-bit targets,
ditto for PPC backend. At runtime the correct target is chosen.
In fact if you build all backends you get nice (cross)compilers for all
targets.

Best regards,
--Edwin
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net
Re: Adding targets for the bytecode interpreter [ In reply to ]
On 17 May 2010, at 7:32 pm, Török Edwin wrote:
> A real fix would be to detect the Apple-style universal build
> (configure
> does this already), and build both ppc and x86 then.
> If you open a bugreport I'll try to do that for 0.96.2.

OK, filed as bug 2030. https://wwws.clamav.net/bugzilla/show_bug.cgi?id=2030

Thanks very much for the explanation and the --enable-all-jit-targets
fix in the meantime.

Mark
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net