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