about summary refs log tree commit diff stats
path: root/README.md
blob: d7a096053150b5f1689901787d9a0c21fa8c9000 (plain) (blame)
1
2
3
4
5
6
# netboot transfer protocol daemon

A TFTP server written in C for funsies.

[nbd project page](https://sr.ht/~spicywolf/nbd)
background-color: #FFF0F0 } /* Literal.String.Double */ .highlight .se { color: #04D; background-color: #FFF0F0 } /* Literal.String.Escape */ .highlight .sh { color: #D20; background-color: #FFF0F0 } /* Literal.String.Heredoc */ .highlight .si { color: #33B; background-color: #FFF0F0 } /* Literal.String.Interpol */ .highlight .sx { color: #2B2; background-color: #F0FFF0 } /* Literal.String.Other */ .highlight .sr { color: #080; background-color: #FFF0FF } /* Literal.String.Regex */ .highlight .s1 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Single */ .highlight .ss { color: #A60; background-color: #FFF0F0 } /* Literal.String.Symbol */ .highlight .bp { color: #038 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #06B; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #369 } /* Name.Variable.Class */ .highlight .vg { color: #D70 } /* Name.Variable.Global */ .highlight .vi { color: #33B } /* Name.Variable.Instance */ .highlight .vm { color: #369 } /* Name.Variable.Magic */ .highlight .il { color: #00D; font-weight: bold } /* Literal.Number.Integer.Long */
CC:=clang
RUSTC:=rustc
AR:=llvm-ar
CFLAGS:=-march=native -O3 -funroll-loops -Wall -Wextra -Werror -fPIC -fstack-protector-all
LDFLAGS:=-flto=thin
RSFLAGS:=--edition 2021 --crate-name libspicy -Copt-level=3 -Cpanic=abort --deny warnings

ifeq ($(shell uname),SunOS)
CC = gcc
CFLAGS += -std=gnu11
else
CFLAGS += -std=c11 -fsanitize=safe-stack -fcf-protection=full
endif

INCLUDES=-Iinc/

OBJECTS=obj/salloc.c.o obj/arena.c.o obj/resarr.c.o

.PHONY: all
all: build/lib/libspicy.so build/lib/static/libspicy.a includes

.PHONY: includes
includes:
	@if [ ! -d "build/include/libspicy" ]; then mkdir -p build/include/libspicy; fi
	@cp -v inc/*.h build/include/libspicy/

.PHONY: release
release: all build/rel/libspicy.so build/dbg/libspicy.so.debug

build/rel/%: build/lib/%
	@if [ ! -d "build/rel" ]; then mkdir -p build/rel; fi
	strip -s -o $@ $<

build/dbg/%.debug: build/lib/%
	@if [ ! -d "build/dbg" ]; then mkdir -p build/dbg; fi
	strip --only-keep-debug -o $@ $<

build/lib/%.so: $(OBJECTS)
	@if [ ! -d "build/lib" ]; then mkdir -p build/lib; fi
	$(CC) -g -shared $(CFLAGS) $(LDFLAGS) -o $@ $^

build/lib/static/%.a: $(OBJECTS)
	@if [ ! -d "build/lib/static" ]; then mkdir -p build/lib/static; fi
	$(AR) rcs $@ $^

obj/%.c.o: src/%.c inc/%.h
	@if [ ! -d "obj" ]; then mkdir -p obj; fi
	$(CC) -g -c $(INCLUDES) $(CFLAGS) -o $@ $<

obj/%.rs.o: src/%.rs inc/%.h
	@if [ ! -d "obj" ]; then mkdir -p obj; fi
	$(RUSTC) -g --emit obj --crate-type lib $(RSFLAGS) -o $@ $<

.PHONY: clean
clean:
	@rm -rf obj
	@rm -rf build