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 obj/sstring.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