GNUmakefile (2680B)
1 # Default values 2 ARCH ?= x86 3 DATA_TYPE ?= float 4 PLATFORM ?= linux 5 NUM_RX ?= 4 6 NUM_TX ?= 4 7 NUM_SC ?= 1024 8 9 # Valid values 10 VALID_ARCHS := x86 rv rvv 11 VALID_DATA_TYPES := float fixed 12 VALID_PLATFORMS := linux ara baremetal 13 14 # Validate inputs 15 ifneq ($(filter $(ARCH),$(VALID_ARCHS)),$(ARCH)) 16 $(error Invalid ARCH: $(ARCH). Supported: $(VALID_ARCHS)) 17 endif 18 ifneq ($(filter $(DATA_TYPE),$(VALID_DATA_TYPES)),$(DATA_TYPE)) 19 $(error Invalid DATA_TYPE: $(DATA_TYPE). Supported: $(VALID_DATA_TYPES)) 20 endif 21 ifneq ($(filter $(PLATFORM),$(VALID_PLATFORMS)),$(PLATFORM)) 22 $(error Invalid PLATFORM: $(PLATFORM). Supported: $(VALID_PLATFORMS)) 23 endif 24 ifneq ($(shell test $(NUM_RX) -gt 0 >/dev/null 2>&1 && echo valid),valid) 25 $(error NUM_RX must be an integer > 0) 26 endif 27 ifneq ($(shell test $(NUM_TX) -gt 0 >/dev/null 2>&1 && echo valid),valid) 28 $(error NUM_TX must be an integer > 0) 29 endif 30 ifneq ($(shell test $(NUM_SC) -gt 0 >/dev/null 2>&1 && echo valid),valid) 31 $(error NUM_SC must be an integer > 0) 32 endif 33 34 # CFLAGS 35 CFLAGS += -DARCH_$(ARCH) 36 CFLAGS += -DDATA_TYPE_$(DATA_TYPE) 37 CFLAGS += -DPLATFORM_$(PLATFORM) 38 CFLAGS += -DNUM_RX=$(NUM_RX) 39 CFLAGS += -DNUM_TX=$(NUM_TX) 40 CFLAGS += -DNUM_SC=$(NUM_SC) 41 42 # DEBUG flag 43 DEBUG ?= 0 44 ifeq ($(DEBUG),1) 45 CFLAGS += -g -O0 46 else 47 CFLAGS += -O0 48 endif 49 50 # Compiler selection 51 ifeq ($(ARCH),x86) 52 CC := gcc 53 else 54 CC := riscv64-unknown-elf-gcc 55 endif 56 57 # Output file 58 OUTPUT := build/mmse_$(ARCH)_$(DATA_TYPE)_$(PLATFORM)_$(NUM_RX)x$(NUM_TX)x$(NUM_SC)$(if $(filter 1,$(DEBUG)),_debug.elf,.elf) 59 60 # Source files 61 SRCS := main.c $(wildcard src/*.c) 62 63 # Phony targets 64 .PHONY: all help gen_data 65 66 # Default target 67 all: gen_data $(OUTPUT) 68 69 # Run data generation 70 gen_data: 71 python script/gen_data.py $(NUM_TX) $(NUM_RX) $(NUM_SC) 72 73 # Compile 74 $(OUTPUT): $(SRCS) 75 mkdir -p build 76 $(CC) $(CFLAGS) $^ -o $@ 77 78 # Help target 79 help: 80 @echo "Usage:" 81 @echo " make [ARCH=<arch>] [DATA_TYPE=<type>] [PLATFORM=<platform>] [NUM_RX=<num_rx>] [NUM_TX=<num_tx>] [NUM_SC=<num_sc>]" 82 @echo "" 83 @echo "Supported ARCH values:" 84 @echo " - x86 (default)" 85 @echo " - rv" 86 @echo " - rvv" 87 @echo "" 88 @echo "Supported DATA_TYPE values:" 89 @echo " - float (default)" 90 @echo " - fixed" 91 @echo "" 92 @echo "Supported PLATFORM values:" 93 @echo " - linux (default)" 94 @echo " - ara" 95 @echo " - baremetal" 96 @echo "" 97 @echo "Supported NUM_RX values: integers > 0 (default = 4)" 98 @echo "Supported NUM_TX values: integers > 0 (default = 4)" 99 @echo "Supported NUM_SC values: integers > 0 (default = 1024)" 100 @echo "" 101 @echo "Debug mode:" 102 @echo " - DEBUG=0 (default, optimized with -O1)" 103 @echo " - DEBUG=1 (debug mode with -g -O0)" 104 105 # Remove build directory 106 clean: 107 rm build/* data/*