-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
120 lines (97 loc) · 3.49 KB
/
Copy pathMakefile
File metadata and controls
120 lines (97 loc) · 3.49 KB
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
112
113
114
115
116
117
118
119
120
# Copyright (c) 2025 Nenad Micic <nenad@micic.be>
# Licensed under the Apache License, Version 2.0. See LICENSE file for details.
#
# Top-level Makefile for ephrun
# Builds all core tools + keypush utilities
UNAME_S := $(shell uname -s)
CC ?= gcc
CFLAGS ?= -O2 -Wall -Wextra -Wpedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2
LDFLAGS ?=
# Hardened linking on Linux
ifneq ($(UNAME_S),Darwin)
LDFLAGS += -Wl,-z,relro,-z,now
endif
# libsodium detection
PKG_CFLAGS := $(shell pkg-config --cflags libsodium 2>/dev/null)
PKG_LIBS := $(shell pkg-config --libs libsodium 2>/dev/null)
ifeq ($(PKG_LIBS),)
ifeq ($(UNAME_S),Darwin)
ifneq ("$(wildcard /opt/homebrew/include/)", "")
CFLAGS += -I/opt/homebrew/include
LDFLAGS += -L/opt/homebrew/lib
else ifneq ("$(wildcard /usr/local/include/)", "")
CFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib
endif
endif
SODIUM_LIBS = -lsodium
else
CFLAGS += $(PKG_CFLAGS)
SODIUM_LIBS = $(PKG_LIBS)
endif
# ---------- Core tools (ephrun/) ----------
CORE_DIR = ephrun
CORE_TOOLS = $(CORE_DIR)/genkey $(CORE_DIR)/elfenc_pack \
$(CORE_DIR)/kcap_pack $(CORE_DIR)/kcap_unpack
# elfdec-run and tests require Linux keyring
ifeq ($(UNAME_S),Linux)
CORE_TOOLS += $(CORE_DIR)/elfdec-run
TEST_TOOLS = $(CORE_DIR)/test_key $(CORE_DIR)/keyring_selftest
else
TEST_TOOLS =
endif
# ---------- Targets ----------
.PHONY: all core keypush clean install install-deps help
all: core keypush
core: $(CORE_TOOLS)
$(CORE_DIR)/genkey: $(CORE_DIR)/genkey.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(SODIUM_LIBS)
$(CORE_DIR)/elfenc_pack: $(CORE_DIR)/elfenc_pack.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(SODIUM_LIBS)
$(CORE_DIR)/kcap_pack: $(CORE_DIR)/kcap_pack.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(SODIUM_LIBS)
$(CORE_DIR)/kcap_unpack: $(CORE_DIR)/kcap_unpack.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(SODIUM_LIBS)
$(CORE_DIR)/elfdec-run: $(CORE_DIR)/elfdec-run.c
$(CC) $(CFLAGS) -D_GNU_SOURCE -o $@ $< $(LDFLAGS) $(SODIUM_LIBS) -lkeyutils
# Tests (Linux only)
$(CORE_DIR)/test_key: $(CORE_DIR)/test_key.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) -lkeyutils
$(CORE_DIR)/keyring_selftest: $(CORE_DIR)/keyring_selftest.c
$(CC) $(CFLAGS) -D_GNU_SOURCE -o $@ $< $(LDFLAGS) $(SODIUM_LIBS) -lkeyutils
tests: $(TEST_TOOLS)
# ---------- keypush (delegated) ----------
keypush:
$(MAKE) -C keypush
# ---------- Install ----------
install: all
ifeq ($(UNAME_S),Linux)
sudo install -o root -g root -m 0755 $(CORE_DIR)/elfdec-run /usr/local/bin/elfdec-run
@echo "Installed elfdec-run to /usr/local/bin/"
else
@echo "Install: elfdec-run requires Linux (skipped)"
endif
install-deps:
ifeq ($(UNAME_S),Linux)
sudo apt-get install -y build-essential libsodium-dev libkeyutils-dev
else ifeq ($(UNAME_S),Darwin)
brew install libsodium
else
@echo "Unsupported OS — install libsodium manually"
endif
# ---------- Clean ----------
clean:
rm -f $(CORE_TOOLS) $(TEST_TOOLS)
$(MAKE) -C ephrun clean
$(MAKE) -C keypush clean
# ---------- Help ----------
help:
@echo "Targets:"
@echo " all - Build core tools + keypush (default)"
@echo " core - Build genkey, elfenc_pack, kcap_pack, kcap_unpack, elfdec-run"
@echo " keypush - Build keypushd + keypush_send"
@echo " tests - Build test utilities (Linux only)"
@echo " install - Install elfdec-run to /usr/local/bin (Linux, requires sudo)"
@echo " install-deps - Install OS dependencies"
@echo " clean - Remove all built binaries"
@echo " help - Show this help"