83 lines
1.3 KiB
Makefile
83 lines
1.3 KiB
Makefile
# Detect OS
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
ISWIN := 1
|
|
endif
|
|
|
|
ifdef ISWIN
|
|
CC := i686-w64-mingw32-gcc
|
|
else
|
|
CC := gcc
|
|
endif
|
|
|
|
RM ?= rm -f
|
|
RMDIR ?= rm -rf
|
|
MKDIR ?= mkdir -p
|
|
|
|
WARFLAGS := -Wall #-Wextra -pedantic
|
|
|
|
CFLAGS_g := $(WARFLAGS) -std=gnu11 -O2 -msse2 -ffast-math -mfpmath=sse -DNDEBUG \
|
|
-MMD
|
|
|
|
LDFLAGS_g := -s
|
|
|
|
# object output dir
|
|
OBJDIR_g := obj_g
|
|
|
|
SRCS := $(wildcard *.c)
|
|
OBJS_g := $(SRCS:.c=.o)
|
|
|
|
# include dirs
|
|
CFLAGS_g +=
|
|
|
|
# libs
|
|
ifdef ISWIN
|
|
LDFLAGS_g +=
|
|
else
|
|
CFLAGS_g +=
|
|
LDFLAGS_g +=
|
|
endif
|
|
|
|
# binary target
|
|
ifdef ISWIN
|
|
TARG_g := clox.exe
|
|
else
|
|
TARG_g := clox
|
|
endif
|
|
|
|
game: $(TARG_g)
|
|
@echo "*** Target '$@': '$^' is up to date!"
|
|
|
|
default: game
|
|
|
|
.PHONY: default game clean
|
|
|
|
# rewrite OBJS so it outputs object files to seperate dir
|
|
|
|
OBJS_g := $(patsubst %,$(OBJDIR_g)/%,$(OBJS_g))
|
|
|
|
# include the dependency rules generated by -MMD
|
|
|
|
-include $(OBJS_g:.o=.d)
|
|
|
|
clean:
|
|
@echo "*** Removing target binary and object directory..."
|
|
@$(RM) $(TARG_g)
|
|
@$(RMDIR) $(OBJDIR_g)
|
|
@echo "*** Done."
|
|
|
|
# Compile
|
|
|
|
$(OBJDIR_g)/%.o: %.c
|
|
@$(MKDIR) $(@D)
|
|
@echo "*** Compiling '$<' ..."
|
|
@$(CC) $(CFLAGS_g) -c $< -o $@
|
|
|
|
# Link
|
|
|
|
$(TARG_g): $(OBJS_g)
|
|
@$(MKDIR) $(@D)
|
|
@echo "\n*** Linking binary target '$@' ...\n"
|
|
@$(CC) $(OBJS_g) -o $@ $(LDFLAGS_g)
|
|
|