diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2026-10-25 17:59:30 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2026-10-25 18:33:41 +0800 |
| commit | 92c217adba674db05d2aa7e552a828c468545a73 (patch) | |
| tree | 07560cf3109f4f517eb04e4682701ff53e0b57a2 | |
| download | yolo-test-92c217adba674db05d2aa7e552a828c468545a73.tar.gz | |
| -rw-r--r-- | .gitignore | 7 | ||||
| -rw-r--r-- | Makefile | 77 | ||||
| -rw-r--r-- | main.c | 4 |
3 files changed, 88 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3dcdcf --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +app + +*.o +**/*.swp +**/*.core + +deps/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..32e3b89 --- /dev/null +++ b/Makefile @@ -0,0 +1,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 @@ -0,0 +1,4 @@ +int main(void) +{ + return 0; +} |
