File: Makefile

package info (click to toggle)
mini-init-asm 0.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 312 kB
  • sloc: asm: 2,919; sh: 480; makefile: 70
file content (90 lines) | stat: -rw-r--r-- 2,882 bytes parent folder | download
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
# Build configuration
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
NASMFLAGS        := -f elf64 -I$(INC_DIR)/ -g -F dwarf
LDFLAGS          := -nostdlib -z noexecstack

ARM64_AS         ?= aarch64-linux-gnu-as
ARM64_LD         ?= aarch64-linux-gnu-ld
ARM64_ASFLAGS    ?= -g
ARM64_LDFLAGS    ?= -nostdlib -z noexecstack

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)

$(AMD64_BUILD_DIR):
	mkdir -p $@

$(ARM64_BUILD_DIR):
	mkdir -p $@

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

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

# Helper objects
$(ARM64_BUILD_DIR)/helpers/%.o: $(ARM64_SRC_DIR)/helpers/%.S | $(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)