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)
|
||
|
|