blob: 32e3b89ba309fbd640a842ae5d24a3ccd7025503 (
plain)
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
|
CC = cc
CXX = c++
CFLAGS = -march=native -O2 -std=c11 -Wall -Wextra
CXXFLAGS = -march=native -O2 -w
INCLUDES = -I. -Ideps/include
TARGET = app
SRC = main.c
OBJS = $(SRC:.c=.o)
NCNN_TAG = 20261020
NCNN_URL = https://github.com/Tencent/ncnn/archive/refs/tags/$(NCNN_TAG).tar.gz
NCNN_TAR = deps/$(NCNN_TAG).tar.gz
NCNN_SRC_DIR = deps/ncnn-src
NCNN_BUILD = $(NCNN_SRC_DIR)/build
STATIC_LIBS = deps/lib/libncnn.a
# System flags required for static linking llama on OpenBSD
SYS_LIBS = -static -pthread -lm -lc++ -lc++abi
.PHONY: all clean distclean
all: $(TARGET)
# Link order: libncnn
$(TARGET): deps/lib/libncnn.a $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) \
-Wl,--start-group \
deps/lib/libncnn.a \
-Wl,--end-group \
$(SYS_LIBS) -o $@
# BSD suffix rule: compiles any .c file into .o
.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
# Download ncnn source and build statically
deps/lib/libncnn.a:
@command -v cmake >/dev/null 2>&1 || { echo >&2 "===> Error: cmake is required but not installed. Aborting."; exit 1; }
@mkdir -p deps/lib deps/include
@echo "===> Downloading ncnn $(NCNN_TAG) source..."
ftp -o $(NCNN_TAR) $(NCNN_URL)
@echo "===> Extracting source archive..."
tar -xzf $(NCNN_TAR) -C deps
rm -rf $(NCNN_SRC_DIR)
mv deps/ncnn-$(NCNN_TAG) $(NCNN_SRC_DIR)
rm -f $(NCNN_TAR)
@echo "===> Compiling ncnn..."
cmake -S $(NCNN_SRC_DIR) -B $(NCNN_BUILD) \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=$(PWD)/deps \
-DCMAKE_CXX_FLAGS="$(CXXFLAGS)" \
-DNCNN_OPENMP=OFF \
-DNCNN_VULKAN=OFF \
-DNCNN_BUILD_TESTS=OFF \
-DNCNN_COVERAGE=OFF \
-DNCNN_BUILD_BENCHMARK=OFF \
-DNCNN_PYTHON=OFF \
-DNCNN_BUILD_TOOLS=OFF
cmake --build $(NCNN_BUILD) --config Release -j$$(sysctl -n hw.ncpu)
@echo "===> Installing library and headers into deps/..."
cmake --install $(NCNN_BUILD)
@echo "===> Cleaning up build directory..."
rm -rf $(NCNN_SRC_DIR)
clean:
rm -f $(TARGET) $(OBJS)
distclean: clean
rm -rf deps
|