Tupfiles for some of os and gems

This commit is contained in:
Ehmry - 2019-07-10 16:59:36 +02:00
parent acbbb3ebe8
commit 03b9cb7530
68 changed files with 505 additions and 28 deletions

View File

@ -2,6 +2,10 @@
GENODE_DIR = $(TUP_CWD)
ifeq (@(TUP_ARCH),i386)
AS_MARCH = -march=i686 --32
endif
ifeq (@(TUP_ARCH),x86_64)
INCLUDES_BASE += -I$(GENODE_DIR)/repos/base/include/spec/x86_64
INCLUDES_BASE += -I$(GENODE_DIR)/repos/base/include/spec/x86
@ -27,6 +31,13 @@ SDK_VERSION = 19.05
LOCAL_LIB_PREFIX = lib
LOCAL_PKGCONFIG_PREFIX = pkgconfig
!incbin = |> ^ incbin %f^ \
export SYM=_binary_`echo %f | sed 's/\./_/g'`; \
echo ".global ${SYM}_start, ${SYM}_end; .data; .align 4; ${SYM}_start:; .incbin \"%f\"; ${SYM}_end:" |\
$(AS) $(AS_MARCH) -f -o %o - |> binary_%b.o
!ar = |> ^ MERGE %o^ $(AR) -rcs %o %f |>
!ln = |> ^ LN %o -> %f^ ln -s %f %o |>
!cp = |> ^ CP %o^ cp %f %o |>

View File

@ -56,7 +56,7 @@ BASE_LIBS += \
%f \
--end-group --no-whole-archive \
$(LIBGCC) \
|> ld-nova.lib.so $(REP_DIR)/<ld> {bin}
|> ld.lib.so $(REP_DIR)/<ld> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,14 @@
TARGET_NAME = nova_timer_drv
LIBS += genode-base
include_rules
BASE_TIMER_DIR = $(BASE_DIR)/src/timer
INCLUDES += -I.
INCLUDES += -I$(BASE_TIMER_DIR)/include
: foreach *.cc $(BASE_TIMER_DIR)/*.cc |> !cxx |> %B.nova.o {obj}
: {obj} |> !prg |> timer {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -39,5 +39,3 @@ GCC_INCLUDE = -I`$(CC) -print-file-name=include`
!ld = |> ^ MERGE %o^ $(LD) \
$(LDFLAGS) --whole-archive --start-group %f --end-group --no-whole-archive -o %o |>
!ar = |> ^ MERGE %o^ $(AR) -rcs %o %f |>

View File

@ -4,4 +4,5 @@ Name: gems
Description: Genode gems repository
URL: https://genode.org/
Version: @version@
Requires: genode-os
Cflags: -I${includedir}

View File

@ -0,0 +1,11 @@
TARGET_NAME = backdrop
LIBS += libpng libc genode-gems
include_rules
BLIT = $(GENODE_DIR)/repos/os/src/lib/blit/blit.lib.a
: foreach *.cc $(REP_DIR)/src/lib/file/*.cc |> !cxx |> %B.o {obj}
: {obj} $(BLIT) |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,13 @@
TARGET_NAME = decorator
LIBS += genode-gems
include_rules
INCLUDES += -I$(REP_DIR)/../demo/include
: $(REP_DIR)/../demo/src/app/scout/data/droidsansb10.tff |> !ln |> %b {font}
: foreach *.rgba {font} |> !incbin |> {obj}
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = depot_deploy
LIBS += vfs genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = depot_download_manager
LIBS += genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = depot_query
LIBS += vfs genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = driver_manager
LIBS += genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = fs_query
LIBS += vfs genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = fs_tool
LIBS += vfs genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,9 @@
TARGET_NAME = menu_view
LIBS += libpng libc genode-gems
include_rules
INCLUDES += -I.
INCLUDES += -I$(REP_DIR)/../demo/include
: foreach *.cc $(REP_DIR)/src/lib/file/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = pipe
LIBS += posix genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,9 @@
TARGET_NAME = sculpt_manager
LIBS += genode-gems
INCLUDES += -I.
INCLUDES += -I../depot_deploy
include_rules
: foreach *.cc view/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = themed_decorator
LIBS += libpng libc genode-gems
include_rules
INCLUDES += -I$(REP_DIR)/../demo/include
: foreach *.cc $(REP_DIR)/src/lib/file/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = window_layouter
LIBS += genode-gems
INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = vfs_import
LIBS += genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !lib |> vfs_import.lib.so {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = file_terminal
LIBS += libc genode-os
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,13 @@
TARGET_NAME = nit_fader
LIBS += genode-gems
include_rules
INCLUDES += -I.
INCLUDES += -I$(REP_DIR)/../demo/include
BLIT = $(GENODE_DIR)/repos/os/src/lib/blit/blit.lib.a
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} $(BLIT) |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,7 @@
TARGET_NAME = terminal
LIBS += vfs genode-gems
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,9 @@
TARGET_NAME = wm
LIBS += genode-gems
INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,22 @@
{ preparePort, fetchurl, nixpkgs }:
preparePort {
inherit (nixpkgs.libpng) name src version;
outputs = [ "source" "api" ];
buildPhase =
''
local include=$api/include
local pkgconfig=$api/pkg-config
mkdir -p $include $pkgconfig
sed \
-e "s|^includedir.*|includedir=$include|" \
-e "s/@PNGLIB_VERSION@/$version/" \
-e "s/^Libs:.*/Libs: -l:libpng.lib.so/" \
-e "s/@LIBS@/libc libm/" \
-e '/@/d' \
< libpng.pc.in > $pkgconfig/libpng.pc
cp pngconf.h png.h pngpriv.h $include
cp scripts/pnglibconf.h.prebuilt $include/pnglibconf.h
'';
}

View File

@ -0,0 +1,9 @@
include_rules
: $(REP_DIR)/lib/symbols/libpng |> !abi_stub |>
: |> $(NIX_BUILD) $(REP_DIR)/ports --out-link port \
--attr %d.source --attr %d.api |> port-source port-api {port}
: port-api |> cp %f/pkg-config/%d.pc %o \
|> $(PKG_CONFIG_DIR)/%d.pc $(GENODE_DIR)/<pkg-config>

View File

@ -2,4 +2,16 @@ include_rules
SED_FLAGS += -e "s|@includedir@|`nix-store --add $(REP_DIR)/include`|"
ifeq (@(TUP_ARCH),i386)
SED_FLAGS += -e 's|@spec_includes@|-I${includedir}/spec/x86_32 -I${includedir}/spec/x86|'
endif
ifeq (@(TUP_ARCH),x86_64)
SED_FLAGS += -e 's|@spec_includes@|-I${includedir}/spec/x86_64 -I${includedir}/spec/x86|'
endif
ifeq (@(TUP_ARCH),arm)
SED_FLAGS += -e 's|@spec_includes@| -I${includedir}/spec/arm|'
endif
: *.pc.in |> !sed_pkgconfig_file |>

View File

@ -5,4 +5,4 @@ Description: Genode os repository
URL: https://genode.org/
Version: @version@
Requires: genode-base
Cflags: -I${includedir}
Cflags: @spec_includes@ -I${includedir}

View File

@ -0,0 +1,8 @@
TARGET_NAME = global_keys_handler
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = log_core
LIBS += genode-os
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = nit_focus
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,11 @@
TARGET_NAME = ping
LIBS += base
INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: foreach ../../lib/net/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = pointer
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = rom_logger
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = rom_reporter
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = rom_to_file
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = usb_report_filter
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,30 @@
LIBS += genode-os
include_rules
BLIT_DIR = $(GENODE_DIR)/repos/os/src/lib/blit
ifeq (@(TUP_ARCH),i386)
BLIT_INCLUDES += -Ispec/x86_32
BLIT_INCLUDES += -Ispec/x86
endif
ifeq (@(TUP_ARCH),x86_64)
BLIT_INCLUDES += -Ispec/x86_64
BLIT_INCLUDES += -Ispec/x86
endif
ifeq (@(TUP_ARCH),arm)
BLIT_INCLUDES += -Ispec/arm
endif
ifeq ($(BLIT_INCLUDES),)
error blit library not yet ported to @(TUP_ARCH)
endif
INCLUDES += $(BLIT_INCLUDES)
BLIT_LIB = $(BLIT_DIR)/blit.lib.a
: foreach *.cc |> !cxx |> {obj}
: {obj} |> !ar |> $(BLIT_LIB)

View File

@ -8,7 +8,7 @@ include_rules
: vfs.pc.in |> !sed_pkgconfig_file |>
: foreach *.cc |> !cxx |> %B.o {lib-obj}
: {lib-obj} | |> !lib |> $(LIB_DIR)/%d.lib.so {lib}
: {lib-obj} |> !lib |> $(LIB_DIR)/%d.lib.so {lib}
: foreach ../../server/vfs/*.cc |> !cxx |> %B.o {server-obj}
: {server-obj} {lib} |> !prg |> server/vfs {server}

View File

@ -4,6 +4,6 @@ INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = clipboard
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = dynamic_rom
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base vfs
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> %d {bin}
: {obj} |> !prg |> %d {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -4,6 +4,6 @@ INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = input_merger
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = iso9660
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = log_report
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = mixer
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,11 @@
TARGET_NAME = nic_bridge
LIBS += base
INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: foreach ../../lib/net/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,11 @@
TARGET_NAME = nic_dump
LIBS += base
INCLUDES += -I.
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: foreach ../../lib/net/*.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -1,22 +1,11 @@
TARGET_NAME = nic_router
LIBS += base
include_rules
INCLUDES += -I.
SRC_CC += arp_waiter.cc ip_rule.cc ipv4_address_prefix.cc
SRC_CC += component.cc port_allocator.cc forward_rule.cc
SRC_CC += nat_rule.cc main.cc ipv4_config.cc
SRC_CC += uplink.cc interface.cc arp_cache.cc configuration.cc
SRC_CC += domain.cc l3_protocol.cc direct_rule.cc link.cc
SRC_CC += transport_rule.cc permit_rule.cc
SRC_CC += dhcp_client.cc dhcp_server.cc report.cc xml_node.cc
XSD_CONFIG = config.xsd
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: foreach ../../lib/net/*.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = nit_fb
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,12 @@
TARGET_NAME = nitpicker
LIBS += genode-os
include_rules
BLIT_LIB = $(GENODE_DIR)/repos/os/src/lib/blit/blit.lib.a
: foreach *.cc |> !cxx |> %B.o {obj}
: default.tff |> !incbin |> {obj}
: {obj} $(BLIT_LIB) |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> {bin}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = ram_fs
LIBS += genode-base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = report_rom
LIBS += genode-base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = rom_block
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = rom_filter
LIBS += genode-base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = terminal_crosslink
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = terminal_log
LIBS += genode-os
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -3,6 +3,6 @@ LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} | |> !prg |> test-audio_out {bin}
: {obj} |> !prg |> test-audio_out {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = test-audio_out_click
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> test-%d {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = test-block
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> test-%d {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)

View File

@ -0,0 +1,8 @@
TARGET_NAME = test-bomb
LIBS += base
include_rules
: foreach *.cc |> !cxx |> %B.o {obj}
: {obj} |> !prg |> test-%d {bin}
: {bin} |> !collect_bin |>
include &(BIN_RULES)