Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130814034226.GK221@brightrain.aerifal.cx>
Date: Tue, 13 Aug 2013 23:42:26 -0400
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: Build system adjustments for subarchs

On Tue, Aug 13, 2013 at 10:25:59PM -0400, Rich Felker wrote:
> On Tue, Aug 13, 2013 at 09:06:17PM -0400, Rich Felker wrote:
> > Another idea, using the filesystem, would be to have .sub files in the
> > asm directories containing the filename of a different asm file to
> > substitute. This is essentially emulating symlinks, but I don't see a
> > good way to get make to do automated dependency tracking so that
> > modifying the pointed-to asm file causes the object file to be
> > rebuilt. I am exploring this approach further however in hopes that
> > there might be a way.
> 
> Actually, this would work great if I could write an abstract rule that
> says roughly: for each .o target %.o, add dependencies on %.c and
> $(wildcard */%.s). This would make it so files with asm always get
> rebuilt if either the base C file or any of the asm versions, for any
> arch or subarch, has been modified. Obviously in some cases the
> rebuild would be spurious, but such files are sufficiently small that
> I don't care; the simplicity of a universal rule with no
> arch-dependent dependency data to maintain is much more valuable.
> 
> Unfortunately, I don't know a way to do this with make, but I believe
> there should be a way...

This seems to do it, though maybe there's a more elegant way:

define archrule =
$(dir $(patsubst %/,%,$(dir $(s))))$(notdir $(s:.s=.o)): $(s)
endef

$(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call archrule,$(s))))

What this does is take every .s file src/foo/arch/bar.s which is under
any arch or subarch dir for the target arch, and manufacture rules of
the form:

src/foo/bar.o: src/foo/arch/bar.s

In particular, you might get:

src/string/memcpy.o: src/string/armel/memcpy.s
src/string/memcpy.o: src/string/armeb/memcpy.s

so that memcpy.o "depends" on all versions of the asm. Then, a
corresponding memcpy.sub file can control which version of the asm
actually gets compiled; the rule which compiles it can be based on the
.sub file rather than on any particular .s file.

I'm going to run some tests on arm, and it if works, I'll commit.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.