1.makefile.engine.windows.mak
DIR := (subst /,\\,{CURDIR})
BUILD_DIR := bin
OBJ_DIR := obj
ASSEMBLY := engine
EXTENSION := .dll
COMPILER_FLAGS := -g -MD -Werror=vla -fdeclspec #-fPIC
INCLUDE_FLAGS := -Iengine\src -I$(VULKAN_SDK)\include
LINKER_FLAGS := -g -shared -luser32 -lvulkan-1 -L(VULKAN_SDK)\\Lib -L(OBJ_DIR)\engine
DEFINES := -D_DEBUG -DKEXPORT -D_CRT_SECURE_NO_WARNINGS
#Make does not offer((
rwildcard = (wildcard 12) (foreach d,(wildcard 1*),(call rwildcard,d/,$2))
SRC_FILES := (call rwildcard,(ASSEMBLY)/,*.c)
DIRECTORIES := \(ASSEMBLY)\\src (subst (DIR),,(shell dir $(ASSEMBLY)\src /S /AD /B | findstr /i src))
OBJ_FILES := (SRC_FILES:%=(OBJ_DIR)/%.o)
all: scaffold compile link
.PHONY: scaffold
scaffold:#create build directory
@echo Scaffold folder structure...
-@setlocal enableextensions enabledelayedexpansion && mkdir (addprefix (OBJ_DIR),$(DIRECTORIES)) 2>NUL || cd .
-@setlocal enableextensions enabledelayedexpansion && mkdir $(BUILD_DIR) 2>NUL || cd .
@echo Done.
.PHONY:link
link: scaffold $(OBJ_FILES)
@echo Linking $(ASSEMBLY)...
@clang (OBJ_FILES) -o (BUILD_DIR)/(ASSEMBLY)(EXTENSION) $(LINKER_FLAGS)
.PHONY: compile
compile:
@echo Compiling...
.PHONY: clean
clean:
if exist (BUILD_DIR)\\(ASSEMBLY)(EXTENSION) del (BUILD_DIR)\(ASSEMBLY)(EXTENSION)
rmdir /s /q (OBJ_DIR)\\(ASSEMBLY)
$(OBJ_DIR)/%.c.o: %.c
@echo $<...
@clang \< (COMPILER_FLAGS) -c -o @ (DEFINES) $(INCLUDE_FLAGS)