autoconf
[Top][All Lists]
Advanced

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

Re: how-to question: architecture dependent source


From: Christopher Howard
Subject: Re: how-to question: architecture dependent source
Date: Fri, 23 Mar 2012 01:10:03 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120303 Thunderbird/10.0.1

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]