120 lines
2.8 KiB
Makefile
120 lines
2.8 KiB
Makefile
# Copyright 2018-2020 Iwo 'Outfrost' Bujkiewicz
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
PLATFORM ?= x86_64-linux-gnu
|
|
|
|
BUILDDIR ?= target/$(PLATFORM)
|
|
SRCDIR ?= src
|
|
|
|
CPPFLAGS ::= -iquotesrc/ $(CPPFLAGS)
|
|
CFLAGS ::= -g -std=c99 -Wall -Wextra -Wpedantic -Werror \
|
|
-Wno-error=unused-function -Wno-error=unused-parameter $(CFLAGS)
|
|
LDFLAGS ::= $(LDFLAGS)
|
|
LDLIBS ::= -lm -lGL -lGLEW -lglfw -lassimp $(LDLIBS)
|
|
|
|
# ######
|
|
# Paths
|
|
# ######
|
|
|
|
sources ::= main.c \
|
|
engine/asset.c \
|
|
engine/engine.c \
|
|
engine/geometry.c \
|
|
engine/input.c \
|
|
engine/logger.c \
|
|
engine/performance.c \
|
|
engine/render.c \
|
|
engine/scene.c \
|
|
engine/string.c \
|
|
engine/tga.c \
|
|
engine/ui.c \
|
|
game/game.c \
|
|
game/input.c \
|
|
game/level.c \
|
|
game/player.c
|
|
|
|
srcfiles ::= $(addprefix $(SRCDIR)/, $(sources))
|
|
|
|
objects ::= $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(srcfiles)))
|
|
depfiles ::= $(addprefix $(BUILDDIR)/, $(addsuffix .mk, $(srcfiles)))
|
|
|
|
# Set executable name for the platform
|
|
# TODO Base this on target platform instead of host OS
|
|
#ifeq ($(OS),Windows_NT)
|
|
# binext ::= .exe
|
|
#else
|
|
# binext ::=
|
|
#endif
|
|
binary ::= $(BUILDDIR)/shadowclad #$(binext)
|
|
|
|
# ######
|
|
# Main build rules
|
|
# ######
|
|
|
|
# Default rule: build executable
|
|
$(binary): $(objects)
|
|
@mkdir -p $(@D)
|
|
@echo "Linking executable"
|
|
@$(CC) $(LDFLAGS) -o $(binary) $^ $(LOADLIBES) $(LDLIBS)
|
|
|
|
# Build C translation units
|
|
$(objects): $(BUILDDIR)/%.c.o: %.c $(BUILDDIR)/%.c.mk
|
|
@mkdir -p $(@D)
|
|
@echo "Building $@"
|
|
@$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
|
|
|
# ######
|
|
# Setup
|
|
# ######
|
|
|
|
# Initialise build environment
|
|
init:
|
|
@echo "Creating build directory $(BUILDDIR)"
|
|
@mkdir -p $(BUILDDIR)
|
|
.PHONY: init
|
|
|
|
# ######
|
|
# Aliases
|
|
# ######
|
|
|
|
# Build and run
|
|
run: $(binary)
|
|
@echo
|
|
@$(binary)
|
|
.PHONY: run
|
|
|
|
# Build executable
|
|
shadowclad: $(binary)
|
|
.PHONY: shadowclad
|
|
|
|
# ######
|
|
# Prerequisites
|
|
# ######
|
|
|
|
# Generate C prerequisite makefiles
|
|
$(depfiles): $(BUILDDIR)/%.c.mk: %.c Makefile
|
|
@mkdir -p $(@D)
|
|
@echo "Generating prerequisites for $<"
|
|
@$(CPP) -MM -MT $(BUILDDIR)/$*.c.o -MF $@ $(CPPFLAGS) $<
|
|
# Give the same prerequisites to the prerequisite makefile,
|
|
# so that it is regenerated whenever any of said prerequisites change
|
|
@sed -E -i 's|^([^\s:]+)([ :])|\1 $@\2|' $@
|
|
|
|
# Include generated C prerequisites
|
|
include $(foreach depfile, $(depfiles), $(shell [ -r "$(depfile)" ] && echo "$(depfile)"))
|
|
|
|
# Do not automatically delete generated prerequisites
|
|
.SECONDARY: $(depfiles)
|
|
|
|
# ######
|
|
# Cleanup rules
|
|
# ######
|
|
|
|
clean:
|
|
@echo "Removing $(BUILDDIR)"
|
|
@rm -rf $(BUILDDIR)
|
|
.PHONY: clean
|