Browse Source
- 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 rootnodeinfo-routing-update
5 changed files with 309 additions and 115 deletions
@ -0,0 +1,138 @@
|
||||
# Root Makefile for uTun - Out-of-tree build wrapper
|
||||
# This Makefile provides convenient targets for building in a separate directory
|
||||
# while keeping binaries in the project root.
|
||||
|
||||
# Build directory
|
||||
BUILD_DIR = build
|
||||
|
||||
# Detect source directory (where this Makefile is located)
|
||||
SRC_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
|
||||
|
||||
# Check if build directory is configured
|
||||
BUILD_CONFIGURED := $(shell test -f $(BUILD_DIR)/Makefile && echo yes || echo no)
|
||||
|
||||
# Default target: build everything
|
||||
.PHONY: all |
||||
all: |
||||
ifeq ($(BUILD_CONFIGURED),yes) |
||||
@$(MAKE) -C $(BUILD_DIR) all
|
||||
else |
||||
@echo "Build directory not configured. Run 'make setup' first."
|
||||
@exit 1
|
||||
endif |
||||
|
||||
# Setup target: create build directory and configure
|
||||
.PHONY: setup |
||||
setup: |
||||
@echo "Setting up build in $(BUILD_DIR)/..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@if test ! -f $(BUILD_DIR)/Makefile; then \
|
||||
echo "Running configure..."; \
|
||||
cd $(BUILD_DIR) && $(SRC_DIR)/configure; \
|
||||
else \
|
||||
echo "Build already configured."; \
|
||||
fi
|
||||
@echo "Setup complete. Run 'make' to build."
|
||||
|
||||
# Reconfigure target
|
||||
.PHONY: reconfigure |
||||
reconfigure: |
||||
@rm -rf $(BUILD_DIR)
|
||||
@$(MAKE) setup
|
||||
|
||||
# Build just the main binary (skip tests)
|
||||
.PHONY: utun |
||||
utun: |
||||
ifeq ($(BUILD_CONFIGURED),yes) |
||||
@$(MAKE) -C $(BUILD_DIR)/lib
|
||||
@$(MAKE) -C $(BUILD_DIR)/src
|
||||
@echo "utun binary built successfully."
|
||||
else |
||||
@echo "Build directory not configured. Run 'make setup' first."
|
||||
@exit 1
|
||||
endif |
||||
|
||||
# Run tests (make all builds everything including tests)
|
||||
.PHONY: check test |
||||
check: all |
||||
ifeq ($(BUILD_CONFIGURED),yes) |
||||
@$(MAKE) -C $(BUILD_DIR) check
|
||||
else |
||||
@echo "Build directory not configured. Run 'make setup' first."
|
||||
@exit 1
|
||||
endif |
||||
|
||||
test: check |
||||
|
||||
# Clean build directory
|
||||
.PHONY: clean |
||||
clean: |
||||
ifeq ($(BUILD_CONFIGURED),yes) |
||||
@$(MAKE) -C $(BUILD_DIR) clean
|
||||
else |
||||
@echo "Build directory not configured."
|
||||
endif |
||||
|
||||
# Full clean - remove build directory and generated files
|
||||
.PHONY: distclean |
||||
distclean: |
||||
@rm -rf $(BUILD_DIR)
|
||||
@echo "Build directory removed."
|
||||
|
||||
# Install from build directory
|
||||
.PHONY: install |
||||
install: all |
||||
@$(MAKE) -C $(BUILD_DIR) install
|
||||
|
||||
# Debug build setup
|
||||
.PHONY: setup-debug |
||||
setup-debug: |
||||
@echo "Setting up debug build in $(BUILD_DIR)/..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && $(SRC_DIR)/configure --enable-debug
|
||||
|
||||
# Release build setup
|
||||
.PHONY: setup-release |
||||
setup-release: |
||||
@echo "Setting up release build in $(BUILD_DIR)/..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && $(SRC_DIR)/configure --disable-debug
|
||||
|
||||
# Print help
|
||||
.PHONY: help |
||||
help: |
||||
@echo "uTun Build System (Out-of-tree build)"
|
||||
@echo "======================================"
|
||||
@echo ""
|
||||
@echo "Setup targets:"
|
||||
@echo " setup - Configure the build directory"
|
||||
@echo " setup-debug - Configure for debug build"
|
||||
@echo " setup-release - Configure for release build"
|
||||
@echo " reconfigure - Clean and reconfigure build"
|
||||
@echo ""
|
||||
@echo "Build targets:"
|
||||
@echo " all - Build everything: lib, src, tests"
|
||||
@echo " utun - Build only main utun binary (faster)"
|
||||
@echo " check - Run all tests (builds if needed)"
|
||||
@echo " test - Alias for check"
|
||||
@echo " install - Install binaries"
|
||||
@echo ""
|
||||
@echo "Maintenance:"
|
||||
@echo " clean - Clean build artifacts"
|
||||
@echo " distclean - Remove build directory completely"
|
||||
@echo " help - Show this help"
|
||||
@echo ""
|
||||
@echo "Build directory: $(BUILD_DIR)/"
|
||||
@echo "Source directory: $(SRC_DIR)/"
|
||||
@echo ""
|
||||
@echo "Usage: make setup && make"
|
||||
|
||||
# Pass through any unknown targets to the build directory if configured
|
||||
.PHONY: % |
||||
%: |
||||
ifeq ($(BUILD_CONFIGURED),yes) |
||||
@$(MAKE) -C $(BUILD_DIR) $@
|
||||
else |
||||
@echo "Build directory not configured. Run 'make setup' first."
|
||||
@exit 1
|
||||
endif |
||||
Loading…
Reference in new issue