Build: Out-of-tree build system with separate build directory

- Build in build/ directory instead of source tree
- Main binary (utun) copied to project root
- Tests run from build/tests/ with config files copied there
- Test output redirected to build/tests/logs/*.log files
- Console shows only [PASS]/[FAIL]/[SKIP] status
- Incremental build works correctly
- make check runs all tests with summary

Changes:
- New root Makefile as wrapper for out-of-tree build
- Updated Makefile.am files for lib, src, tests
- Added tinycrypt-objects target for test dependencies
- Tests no longer clutter project root
This commit is contained in:
Evgeny committed 2026-02-13 22:58:41 +03:00
1 parent 57b2568ad6
commit 15001487af
5 files changed
+304 -110

No files matched your search

+60 -22
View File
@@ -61,32 +61,70 @@ else
utun_LDADD = $(utun_CORE_LDADD)
endif
# Object directory for shadow build artifacts
OBJDIR = $(top_builddir)/.objs/src
TINYCRYPT_OBJDIR = $(top_builddir)/.objs/tinycrypt
# TinyCrypt object files (for tests that need them)
TINYCRYPT_SRCDIR = $(top_srcdir)/tinycrypt/lib/source
# After building, move object files to shadow directory
all-local: shadow-objects
TINYCRYPT_OBJS = \
utun-aes_encrypt.o \
utun-aes_decrypt.o \
utun-ccm_mode.o \
utun-cmac_mode.o \
utun-ctr_mode.o \
utun-ecc.o \
utun-ecc_dh.o \
utun-ecc_dsa.o \
utun-sha256.o \
utun-ecc_platform_specific.o \
utun-utils.o
shadow-objects: utun$(EXEEXT)
@$(MKDIR_P) $(OBJDIR) $(TINYCRYPT_OBJDIR)
@for obj in $(utun_OBJECTS); do \
if test -f "$$obj"; then \
case "$$obj" in \
*lib/source/*.o) \
base=$$(basename $$obj | sed 's/^utun-//'); \
mv -f "$$obj" $(TINYCRYPT_OBJDIR)/"$$base" 2>/dev/null || true; \
;; \
*) \
mv -f "$$obj" $(OBJDIR)/ 2>/dev/null || true; \
;; \
esac; \
fi; \
done
# Rules to build TinyCrypt objects (for tests)
TINYCRYPT_CFLAGS = -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source
# Clean shadow directories along with regular clean
utun-aes_encrypt.o: $(TINYCRYPT_SRCDIR)/aes_encrypt.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-aes_decrypt.o: $(TINYCRYPT_SRCDIR)/aes_decrypt.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ccm_mode.o: $(TINYCRYPT_SRCDIR)/ccm_mode.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-cmac_mode.o: $(TINYCRYPT_SRCDIR)/cmac_mode.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ctr_mode.o: $(TINYCRYPT_SRCDIR)/ctr_mode.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ecc.o: $(TINYCRYPT_SRCDIR)/ecc.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ecc_dh.o: $(TINYCRYPT_SRCDIR)/ecc_dh.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ecc_dsa.o: $(TINYCRYPT_SRCDIR)/ecc_dsa.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-sha256.o: $(TINYCRYPT_SRCDIR)/sha256.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-ecc_platform_specific.o: $(TINYCRYPT_SRCDIR)/ecc_platform_specific.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
utun-utils.o: $(TINYCRYPT_SRCDIR)/utils.c
$(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $<
# Build TinyCrypt objects for tests (convenience target)
tinycrypt-objects: $(TINYCRYPT_OBJS)
# Copy binary to project root after building
all-local: copy-to-root
copy-to-root: utun$(EXEEXT)
@cp -f utun$(EXEEXT) $(top_srcdir)/
# Clean
clean-local:
-rm -rf $(OBJDIR) $(TINYCRYPT_OBJDIR)
@true
# Install directories
install-exec-hook: