File: Makefile

package info (click to toggle)
mini-init-asm 0.3.1%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 372 kB
  • sloc: asm: 3,733; sh: 693; makefile: 85
file content (111 lines) | stat: -rw-r--r-- 3,864 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Build configuration
VERSION          := $(shell cat VERSION 2>/dev/null || echo "unknown")

BUILD_DIR        ?= build
INC_DIR          := include

TARGET_AMD64     ?= mini-init-amd64
TARGET_ARM64     ?= mini-init-arm64

AMD64_SRC_DIR    := src/amd64
ARM64_SRC_DIR    := src/arm64

NASM             := nasm
LD               := ld
DEBUG            ?= 1

NASMFLAGS        := -f elf64 -I$(INC_DIR)/
LDFLAGS          := -nostdlib -z noexecstack -z relro -z now --build-id=sha1

ARM64_AS         ?= $(shell command -v aarch64-linux-gnu-as 2>/dev/null || echo as)
ARM64_LD         ?= $(shell command -v aarch64-linux-gnu-ld 2>/dev/null || echo ld)
ARM64_ASFLAGS    ?= -I$(INC_DIR)
ARM64_LDFLAGS    ?= -nostdlib -z noexecstack -z relro -z now --build-id=sha1

ifeq ($(DEBUG),1)
NASMFLAGS        += -g -F dwarf
ARM64_ASFLAGS    += -g
endif

# Generate version include files for both architectures
$(INC_DIR)/version_amd64.inc: VERSION
	@echo '; Auto-generated version file' > $@
	@echo 'version_msg_str: db "mini-init-amd64 $(VERSION)", 10, 0' >> $@
	@echo 'version_msg_len_val: equ $$ - version_msg_str - 1' >> $@

$(INC_DIR)/version_arm64.inc: VERSION
	@echo '// Auto-generated version file' > $@
	@echo 'version_msg_arm64: .asciz "mini-init-arm64 $(VERSION)\n"' >> $@
	@echo '.equ version_msg_arm64_len, . - version_msg_arm64 - 1' >> $@

AMD64_BUILD_DIR  := $(BUILD_DIR)/amd64
ARM64_BUILD_DIR  := $(BUILD_DIR)/arm64

AMD64_SRCS       := main.asm signals.asm spawn.asm forward.asm wait.asm epoll.asm timer.asm log.asm time.asm
AMD64_OBJS       := $(addprefix $(AMD64_BUILD_DIR)/,$(AMD64_SRCS:.asm=.o))

ARM64_SRCS       := main.S signals.S spawn.S forward.S wait.S epoll.S timer.S log.S time.S util.S
ARM64_OBJS       := $(addprefix $(ARM64_BUILD_DIR)/,$(ARM64_SRCS:.S=.o))

.PHONY: helper-arm64
ARM64_HELPERS_SRCS := helpers/exit42.S helpers/sleeper.S
ARM64_HELPERS_OBJS := $(addprefix $(ARM64_BUILD_DIR)/,$(ARM64_HELPERS_SRCS:.S=.o))
ARM64_HELPERS_BINS := $(ARM64_BUILD_DIR)/helper-exit42 $(ARM64_BUILD_DIR)/helper-sleeper

.PHONY: all all-amd64 build-arm64 clean test test-amd64 test-arm64 test-all

all: all-amd64

all-amd64: $(BUILD_DIR)/$(TARGET_AMD64)

build-arm64: $(BUILD_DIR)/$(TARGET_ARM64) $(ARM64_HELPERS_BINS)

build-amd64: $(BUILD_DIR)/$(TARGET_AMD64)

test: test-amd64

test-amd64: $(BUILD_DIR)/$(TARGET_AMD64)
	bash scripts/test_harness.sh $(BUILD_DIR)/$(TARGET_AMD64)

test-arm64: $(BUILD_DIR)/$(TARGET_ARM64)
	bash scripts/test_harness_arm64.sh $(BUILD_DIR)/$(TARGET_ARM64)

test-all: test-amd64
	bash scripts/test_ep_signals.sh $(BUILD_DIR)/$(TARGET_AMD64)
	bash scripts/test_edge_cases.sh $(BUILD_DIR)/$(TARGET_AMD64)
	bash scripts/test_exit_code_mapping.sh $(BUILD_DIR)/$(TARGET_AMD64)
	bash scripts/test_restart.sh $(BUILD_DIR)/$(TARGET_AMD64)
	bash scripts/test_diagnostics.sh $(BUILD_DIR)/$(TARGET_AMD64)

$(AMD64_BUILD_DIR):
	mkdir -p $@

$(ARM64_BUILD_DIR):
	mkdir -p $@

$(AMD64_BUILD_DIR)/%.o: $(AMD64_SRC_DIR)/%.asm $(INC_DIR)/*.inc $(INC_DIR)/version_amd64.inc | $(AMD64_BUILD_DIR)
	$(NASM) $(NASMFLAGS) $< -o $@

$(ARM64_BUILD_DIR)/%.o: $(ARM64_SRC_DIR)/%.S $(INC_DIR)/*.inc $(INC_DIR)/version_arm64.inc | $(ARM64_BUILD_DIR)
	$(ARM64_AS) $(ARM64_ASFLAGS) $< -o $@

# Helper objects
$(ARM64_BUILD_DIR)/helpers/%.o: $(ARM64_SRC_DIR)/helpers/%.S $(INC_DIR)/*.inc | $(ARM64_BUILD_DIR)
	mkdir -p $(ARM64_BUILD_DIR)/helpers
	$(ARM64_AS) $(ARM64_ASFLAGS) -I$(INC_DIR) $< -o $@

$(BUILD_DIR)/$(TARGET_AMD64): $(AMD64_OBJS)
	$(LD) $(LDFLAGS) -o $@ $(AMD64_OBJS)

$(BUILD_DIR)/$(TARGET_ARM64): $(ARM64_OBJS)
	$(ARM64_LD) $(ARM64_LDFLAGS) -o $@ $(ARM64_OBJS)

# Helper binaries (linked standalone)
$(ARM64_BUILD_DIR)/helper-exit42: $(ARM64_BUILD_DIR)/helpers/exit42.o
	$(ARM64_LD) $(ARM64_LDFLAGS) -o $@ $<

$(ARM64_BUILD_DIR)/helper-sleeper: $(ARM64_BUILD_DIR)/helpers/sleeper.o
	$(ARM64_LD) $(ARM64_LDFLAGS) -o $@ $<

clean:
	rm -rf $(BUILD_DIR)