BIN=neonucleus DYNLIB=libneonucleus.so LIB=libneonucleus.a CC=cc LD=$(CC) AR=ar RANLIB=ranlib ifeq ($(MODE), release) OPT=-Oz ifneq ($(CC), clang) # clang emits LLVM bitcode in lto mode, which only clang and lld understand OPT += -flto endif DEBUG= else OPT=-O0 SANITIZE=undefined,address DEBUG=-ggdb endif NNFLAGS= SANITIZE_FLAGS= ifdef SANITIZE SANITIZE_FLAGS += -fsanitize=$(SANITIZE) endif CFLAGS=-fPIC $(OPT) $(SANITIZE_FLAGS) $(DEBUG) $(NNFLAGS) LDFLAGS=$(OPT) $(DEBUG) $(SANITIZE_FLAGS) LINKRAYLIB=-lraylib INCLUA=-I /usr/include/lua5.3 LINKLUA=-llua5.3 LINKLIBM=-lm LINKLIBC= BUILD_DIR=build SRC_DIR=src all: bin lib dynlib $(BUILD_DIR)/neonucleus.o: $(SRC_DIR)/neonucleus.c $(SRC_DIR)/neonucleus.h $(CC) -o $(BUILD_DIR)/neonucleus.o -c $(SRC_DIR)/neonucleus.c $(CFLAGS) $(BUILD_DIR)/ncomplib.o: $(SRC_DIR)/ncomplib.c $(SRC_DIR)/ncomplib.h $(CC) -o $(BUILD_DIR)/ncomplib.o -c $(SRC_DIR)/ncomplib.c $(CFLAGS) nn: $(BUILD_DIR)/neonucleus.o $(BUILD_DIR)/ncomplib.o $(BUILD_DIR)/luaarch.o: $(SRC_DIR)/luaarch.c $(SRC_DIR)/machine.lua $(CC) -o $(BUILD_DIR)/luaarch.o -c $(SRC_DIR)/luaarch.c $(CFLAGS) $(INCLUA) $(BUILD_DIR)/glyphcache.o: $(SRC_DIR)/glyphcache.c $(SRC_DIR)/glyphcache.h $(CC) -o $(BUILD_DIR)/glyphcache.o -c $(SRC_DIR)/glyphcache.c $(CFLAGS) $(BUILD_DIR)/main.o: $(SRC_DIR)/main.c $(SRC_DIR)/minBIOS.lua $(CC) -o $(BUILD_DIR)/main.o -c $(SRC_DIR)/main.c $(CFLAGS) $(INCLUA) bin: nn $(BUILD_DIR)/main.o $(BUILD_DIR)/luaarch.o $(BUILD_DIR)/glyphcache.o $(LD) $(LDFLAGS) -o $(BIN) $(BUILD_DIR)/neonucleus.o $(BUILD_DIR)/ncomplib.o $(BUILD_DIR)/main.o $(BUILD_DIR)/glyphcache.o $(BUILD_DIR)/luaarch.o $(LINKLIBC) $(LINKLIBM) $(LINKRAYLIB) $(LINKLUA) lib: nn $(AR) rc $(LIB) $(BUILD_DIR)/neonucleus.o $(BUILD_DIR)/ncomplib.o $(RANLIB) $(LIB) dynlib: nn $(LD) $(LDFLAGS) -o $(DYNLIB) -shared $(BUILD_DIR)/neonucleus.o $(BUILD_DIR)/ncomplib.o $(LINKLIBM) $(LINKLIBC) cleancache: rm -rf $(BUILD_DIR)/*.o clean: rm -rf $(BIN) $(DYNLIB) $(LIB)