Re: how-to question: architecture dependent source

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/21/2012 03:39 PM, Christopher Howard wrote:
> Hi. I'm still working on learning autotools (been reading through all
> the manuals) so bear with me. There is something I've been trying to
> figure out, and I would appreciate any guidance:
> 
> So, I write C code, and typically try to make it as portable as
> possible. However, I also am somewhat enthusiastic about amd64 assembly
> programming (with GAS syntax) - and so I like to optimize code for that
> architecture.
> 
> What I want my configure script to do is check if I am compiling on the
> amd64 architecture, and if so:
> 
> * define something appropriate in the config.h, which I can use to
> conditionally leave out the more generic C functions from source files, and
> 
> * Put some extra (assembly) source files in a variable (e.g.
> amd64sort.S, amd64insert.S, amd64filter.S...) so that they can be
> appended as extra source in the Makefile. Presumably I'd have something
> like this in Makefile.am:
> 
> code:
> --------
> bin_PROGRAMS = myprogram
> myprogram_SOURCES = ${ARCH_DEPS} myprogram.c
> --------
> 
> I want to be able to have the assembly in separate source files, instead
> of inline, for maintainability reasons.
> 

Er... hello? Anybody there? Hmm... must be my anti-magnetic personality.

Well, having despaired of getting outside help (if you can't get help at
the autoconf mailing list, where else do you go?) I dove back into the
problem, scouring the manuals as best I could. I was able to come up
with this solution, which seems to work:

* I had to add AC_PROG_AS to configure.ac to get configure properly set
up to use assembly.

* I added the following to configure.ac to do the check, add to the
config file, and prep things for automake:

code:
--------
AC_CHECK_DECL([__amd64__],
[AC_DEFINE([AMD64_OPT], 1, [Define to 1 to activate amd64 optimizations])
echo engaging amd64 optimizations
AM_CONDITIONAL([AMD64], [true])])
--------

* I used this conditional in Makefile.am:

code:
--------
if AMD64
myprogam_SOURCES = test.S myprogam.c
else
myprogam_SOURCES = myprogam.c
endif
--------

Seems to work - not sure if it is the proper or sensible way to do it.
Not sure how portable either: I think some systems use an __AMD64__
declaration instead of __amd64__, but I'm not sure about that. I should
perhaps be checking for either one.

I originally tried something more like what I mentioned in my first
post, but automake died, complaining that "Configure substitutions are
not allowed in _SOURCES variables".

-- 
frigidcode.com
indicium.us

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
https://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux