Use bins or groups. I'm not sure I totally understand your directory
structure, but something like this might work?
: foreach *.c |> !compile $(INCLUDES) |> %B.o {objectBin}
: foreach {objectBin} |> !link |> %B.elf
On Thursday, January 10, 2019 at 3:20:15 PM UTC+1, Rasmus Bondesson wrote:
>
> Hello!
>
> I have just converted a C project to using TUP and I'm very happy with it
> so far. It is very satisfying to not have to worry about stale files and
> having to run some "clean" command!
>
> When I wrote my Tupfiles I tried to avoid manually curated lists of files.
> I managed to use glob rules with a directory structure so that in each
> directory, all .c files are handled exactly the same way. I managed to do
> this in all cases except for one, so this is where I would like to ask for
> advice.
>
> I have a directory of unit test test suite files that use the Unity
> framework. Unity comes with a generator script that takes a test suite and
> generates a "runner" .c file that contains a main() that runs all the test
> cases. Then, for each test suite I want to link a test binary from the test
> suite, test runner and code under test object files. Today I have this:
>
> # Directory contains cpu_test.c and integration_test.c
>
> !compile = |> gcc $(CFLAGS) -c %f -o %o |>
> !link = |> gcc $(CFLAGS) %f -o %o |>
> !generate = |> ruby unity/auto/generate_test_runner.rb %f %o |>
>
> : unity/src/unity.c |> !compile |> unity.o
> : foreach *.c |> !generate |> runners/%B.c
> : foreach runners/*.c |> !compile $(INCLUDES) |> runners/%B.o
> : foreach *.c |> !compile $(INCLUDES) |> %B.o
>
> # Here I would like to use a foreach to avoid needing to add a new line
> manually when adding a test suite.
> : cpu_test.o runners/cpu_test.o unity.o $(LIBS) |> !link
> |> cpu_test.elf
> : integration_test.o runners/integration_test.o unity.o $(LIBS) |> !link
> |> integration_test.elf
>
> I almost managed to generalize the last two rules by using a combination
> of foreach and order only dependencies:
>
> : foreach *.o | runners/%B.o unity.o $(LIBS) |> !link runners/%B.o unity.o
> $(LIBS) |> %B.elf
>
> This would work except for the fact that TUP does not recognize the "%B"
> syntax in order only dependencies. If I remove that dependency the link
> command itself succeeds, but of course TUP (rightfully) complains that it
> read a file not declared as an input.
>
> Can this be done in any other way? What do you think?
>
> Best regards,
> Rasmus Bondesson
>
--
--
tup-users mailing list
email: [email protected]
unsubscribe: [email protected]
options: http://groups.google.com/group/tup-users?hl=en
---
You received this message because you are subscribed to the Google Groups
"tup-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.