144 lines
4.1 KiB
Makefile
144 lines
4.1 KiB
Makefile
INCLUDES=-Iinc -I.
|
|
|
|
# BUILD_DIR=out
|
|
|
|
ifeq ($(BUILD_DIR),)
|
|
BUILD_DIR := out
|
|
endif
|
|
ifeq ($(MANIFEST_BUILD_DIR),)
|
|
MANIFEST_BUILD_DIR := out/manifest
|
|
endif
|
|
ifeq ($(HMMMM_LIB_DIR),)
|
|
HMMMM_LIB_DIR := "/home/nikto_b/Documents/baum/hmmmm/inc/pub"
|
|
endif
|
|
|
|
SRC_DIR=src
|
|
MANIFEST_SRC_DIR=manifest_src
|
|
INC_DIR=inc
|
|
CC=gcc
|
|
OBJDUMP=objdump
|
|
LIBS=
|
|
STANDART=c23
|
|
|
|
OPTIMIZE=-Og
|
|
TARGET=device
|
|
ifeq ($(ARCH),)
|
|
ARCH := "template"
|
|
endif
|
|
START_AT := $(shell date)
|
|
DEFINES=-DOPCODE_WORDSIZE=2 -DMEM_CELL_WORDS=1 -DPC_WORDSIZE=3 -DGP_REG_CELL_WORDS=1 -DIO_REG_CELL_WORDS=1 -DARCH=$(ARCH)
|
|
C_SOURCES=$(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/instructions/*.c)
|
|
MANIFEST_C_SOURCES=$(wildcard $(MANIFEST_SRC_DIR)/*.c)
|
|
|
|
C_HEADERS=$(wildcard $(INC_DIR)/*.h)
|
|
|
|
C_INCLUDES=-I$(INC_DIR)/ -I$(HMMMM_LIB_DIR)
|
|
|
|
DISABLE_FLAGS=-Wno-unused-variable -Wno-unused-parameter -Wno-write-strings -Wno-pointer-arith -Wno-analyzer-use-of-uninitialized-value
|
|
PEDANTIC_FLAGS=-pedantic -pedantic-errors $(DISABLE_FLAGS) -Wall -Wcast-align -Wcast-qual -Wconversion -Wduplicated-branches -Wduplicated-cond -Werror -Wextra -Wfloat-equal -Wlogical-op -Wpedantic -Wredundant-decls -Wsign-conversion
|
|
ANALYZER_FLAGS=-fanalyzer
|
|
LSECTIONS=-ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
CFLAGS=$(C_DEFS) -g $(C_INCLUDES) $(DEFINES) $(OPTIMIZE) --std=$(STANDART) $(PEDANTIC_FLAGS) $(ANALYZER_FLAGS) -fPIC
|
|
LFLAGS=$(OPTIMIZE) -g $(PEDANTIC_FLAGS) $(DEFINES) -flto -fuse-linker-plugin $(LSECTIONS) -lm $(LIBS) -fPIC -shared
|
|
MANIFEST_LFLAGS=$(OPTIMIZE) -g $(PEDANTIC_FLAGS) $(DEFINES) -flto -fuse-linker-plugin $(LSECTIONS) -lm $(LIBS) -fPIC
|
|
|
|
OBJECTS := $(addprefix $(BUILD_DIR)/,$(patsubst src/%.c,$(PREFIX)%.o,$(C_SOURCES)))
|
|
|
|
MANIFEST_TARGETS = $(addprefix $(MANIFEST_BUILD_DIR)/,$(notdir $(MANIFEST_C_SOURCES:.c=.elf)))
|
|
|
|
BUILDPATHS := $(dir $(OBJECTS))
|
|
|
|
vpath %.c $(sort $(dir $(C_SOURCES)))
|
|
vpath %.h $(sort $(dir $(C_HEADERS)))
|
|
|
|
rebuild: clean | build
|
|
|
|
all: AVRe AVRrc AVRxm AVRxt
|
|
|
|
build: date Dir $(C_HEADERS) target
|
|
|
|
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
|
|
@echo -e '\033[1;32mCC ('$(ARCH)')\t'$<'\t->\t'$@'\033[0m'
|
|
@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
|
|
@$(OBJDUMP) -d -S $@ > $(BUILD_DIR)/$(notdir $(<:.c=.casm))
|
|
|
|
target: date $(BUILD_DIR)/$(TARGET).so
|
|
|
|
$(BUILD_DIR)/$(TARGET).so: $(OBJECTS)
|
|
@echo -e '\033[1;32mLD ('$(ARCH)')\t'$(OBJECTS)'\n\t\t\t->\t'$@'\033[0m'
|
|
@$(CC) $(LFLAGS) $(OBJECTS) -o $(BUILD_DIR)/$(TARGET).so
|
|
|
|
|
|
manifest: $(MANIFEST_BUILD_DIR)/MANIFEST.json
|
|
|
|
$(MANIFEST_BUILD_DIR)/MANIFEST.json: $(C_HEADERS) $(MANIFEST_TARGETS)
|
|
@for elf in $(MANIFEST_TARGETS); do \
|
|
echo -e "\033[1;32mRUN\t$$elf\033[0m"; \
|
|
$$elf $(MANIFEST_BUILD_DIR) || { echo -e "\033[0;31merror running $$elf\033[0m"; exit 1; }; \
|
|
done
|
|
|
|
@echo -e "\033[1;32mPY\t$@\033[0m"
|
|
@python $(MANIFEST_SRC_DIR)/gen_manifest_json.py $(MANIFEST_BUILD_DIR)
|
|
|
|
|
|
|
|
|
|
$(MANIFEST_BUILD_DIR)/%.elf: $(MANIFEST_SRC_DIR)/%.c Makefile $(C_HEADERS) | $(MANIFEST_BUILD_DIR)
|
|
@echo -e '\033[1;32mELF\t'$(OBJECTS)'\n\t\t\t->\t'$@'\033[0m'
|
|
@$(CC) $(MANIFEST_LFLAGS) $< $(DEFINES) $(LDLIBS) -I inc -o $@
|
|
|
|
$(BUILD_DIR):
|
|
@mkdir -p $(BUILD_DIR)
|
|
|
|
$(MANIFEST_BUILD_DIR):
|
|
@mkdir -p $(MANIFEST_BUILD_DIR)
|
|
|
|
|
|
|
|
AVRe: AVRe_build/AVRe.so
|
|
AVRrc: AVRrc_build/AVRrc.so
|
|
AVRxm: AVRxm_build/AVRxm.so
|
|
AVRxt: AVRxt_build/AVRxt.so
|
|
|
|
|
|
|
|
AVRe_build/AVRe.so:
|
|
@echo -e '\033[1;32mMK (AVRe)\033[0m'
|
|
@$(MAKE) --no-print-directory rebuild ARCH=AVRe BUILD_DIR=AVRe_build
|
|
|
|
AVRrc_build/AVRrc.so:
|
|
@echo -e '\033[1;32mMK (AVRrc)\033[0m'
|
|
@$(MAKE) --no-print-directory rebuild ARCH=AVRrc BUILD_DIR=AVRrc_build
|
|
|
|
AVRxm_build/AVRxm.so:
|
|
@echo -e '\033[1;32mMK (AVRxm)\033[0m'
|
|
@$(MAKE) --no-print-directory rebuild ARCH=AVRxm BUILD_DIR=AVRxm_build
|
|
|
|
AVRxt_build/AVRxt.so:
|
|
@echo -e '\033[1;32mMK (AVRxt)\033[0m'
|
|
@$(MAKE) --no-print-directory rebuild ARCH=AVRxt BUILD_DIR=AVRxt_build
|
|
|
|
BuildDir:
|
|
@mkdir -p $(BUILD_DIR)
|
|
@mkdir -p $(BUILDPATHS)
|
|
|
|
SrcDir:
|
|
@mkdir -p $(SRC_DIR)
|
|
|
|
IncDir:
|
|
@mkdir -p $(INC_DIR)
|
|
|
|
Dir: BuildDir SrcDir IncDir
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@rm -rf $(BUILD_DIR)/*
|
|
@rm -rf AVRe_build AVRrc_build AVRxm_build AVRxt_build
|
|
@echo -e '\033[0;31mCleaned\033[0m'
|
|
|
|
.NOTPARALLEL: date target rebuild
|
|
date:
|
|
@echo -e '\033[1;32m'"Starting build at "$(START_AT)'\033[0m'
|
|
|
|
|