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.

Reply via email to