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