Skip to content

Commit

Permalink
Updated makefile from TemplateRepository
Browse files Browse the repository at this point in the history
  • Loading branch information
ravi688 committed Feb 7, 2024
1 parent aaa439c commit 0fd1385
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 51 deletions.
8 changes: 5 additions & 3 deletions PlayVk.makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@

GLSLC:=glslangValidator
GLSLC_FLAGS:= -V
SHADERS = $(wildcard shaders/*.frag shaders/*.vert)
SPIRV_SHADERS = $(addsuffix .spv, $(SHADERS))

%.frag.spv: %.frag
glslc $^ -o $@
$(GLSLC) $(GLSLC_FLAGS) $^ -o $@
%.vert.spv: %.vert
glslc $^ -o $@
$(GLSLC) $(GLSLC_FLAGS) $^ -o $@

.PHONY: shader
shader: $(SPIRV_SHADERS)
Expand All @@ -26,5 +28,5 @@ release: MESSAGE shader
@echo [Log] PlayVk Shaders have been built successfully

clean:
del $(subst /,\, $(SPIRV_SHADERS))
$(RM) $(subst /,\, $(SPIRV_SHADERS))
@echo [Log] PlayVk Shader have been cleaned successfully
166 changes: 118 additions & 48 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@
PROJECT_NAME = PlayVk
STATIC_LIB_NAME = playvk.a
DYNAMIC_LIB_NAME = playvk.dll
EXECUTABLE_NAME = main.exe
EXTERNAL_INCLUDES =
EXTERNAL_LIBS = -L./external-dependency-libs -lglfw3 -lvulkan-1 -lgdi32
DEPENDENCIES = #CallTrace
DEPENDENCY_LIBS = #CallTrace/lib/calltrace.a
EXECUTABLE_NAME = main
MAIN_SOURCE_LANG = c
MAIN_SOURCES=main.c
EXTERNAL_INCLUDES =
EXTERNAL_LIBS =-L./external-dependency-libs -lglfw3 -lvulkan-1 -lgdi32
BUILD_DEFINES=

DEPENDENCIES = #Common
DEPENDENCY_LIBS = #Common/lib/common.a
DEPENDENCIES_DIR = ./dependencies
SHARED_DEPENDENCIES =
SHARED_DEPENDENCY_LIBS =
SHARED_DEPENDENCIES =
SHARED_DEPENDENCY_LIBS =
SHARED_DEPENDENCIES_DIR = ./shared-dependencies
#-------------------------------------------

Expand All @@ -32,7 +36,11 @@ __DEPENDENCIES = $(addprefix $(DEPENDENCIES_DIR)/, $(DEPENDENCIES))
__DEPENDENCY_LIBS = $(addprefix $(DEPENDENCIES_DIR)/, $(DEPENDENCY_LIBS))
__SHARED_DEPENDENCIES = $(addprefix $(SHARED_DEPENDENCIES_DIR)/, $(SHARED_DEPENDENCIES))
__SHARED_DEPENDENCY_LIBS = $(addprefix $(SHARED_DEPENDENCIES_DIR)/, $(SHARED_DEPENDENCY_LIBS))
ifdef COMSPEC
__EXECUTABLE_NAME = $(addsuffix .exe, $(basename $(EXECUTABLE_NAME)))
else
__EXECUTABLE_NAME = $(basename $(EXECUTABLE_NAME))
endif
.PHONY: all
.PHONY: init
all: dgraph release
Expand All @@ -41,7 +49,7 @@ all: dgraph release
echo digraph $(PROJECT_NAME) { $(PROJECT_NAME); } > $@
@echo [Log] $@ created successfully!

$(DEPENDENCIES_DIR) $(SHARED_DEPENDENCIES_DIR):
$(DEPENDENCIES_DIR) $(SHARED_DEPENDENCIES_DIR):
mkdir $(subst /,\,$@)
@echo [Log] $@ created successfully!

Expand Down Expand Up @@ -79,7 +87,7 @@ $(DGRAPH_TARGET_DIR):
dgraph: $(DGRAPH_PREPROCESSED_SCRIPT) | $(DGRAPH_TARGET_DIR)
$(DGRAPH_COMPILER) $(DGRAPH_FLAGS) $(DGRAPH_PREPROCESSED_SCRIPT) > $(DGRAPH_TARGET)

dgraph-clean:
dgraph-clean:
del dependency_graph\$(PROJECT_NAME).png
rmdir dependency_graph
del $(PROJECT_NAME).gv.i
Expand All @@ -104,23 +112,71 @@ TARGET = $(__EXECUTABLE_NAME)
DEPENDENCY_INCLUDES = $(addsuffix /include, $(__DEPENDENCIES))
SHARED_DEPENDENCY_INCLUDES = $(addsuffix /include, $(__SHARED_DEPENDENCIES))

INCLUDES= -I.\include $(EXTERNAL_INCLUDES) $(addprefix -I, $(DEPENDENCY_INCLUDES) $(SHARED_DEPENDENCY_INCLUDES))
SOURCES= $(wildcard source/*.c)
OBJECTS= $(addsuffix .o, $(basename $(SOURCES)))
MAIN_OBJECT=$(addsuffix .o, $(wildcard $(MAIN_SOURCES)))
INCLUDES= -I./include $(EXTERNAL_INCLUDES) $(addprefix -I, $(DEPENDENCY_INCLUDES) $(SHARED_DEPENDENCY_INCLUDES))
C_SOURCES=$(wildcard source/*.c source/*/*.c)
CPP_SOURCES=$(wildcard source/*.cpp source/*/*.cpp)
SOURCES= $(C_SOURCES) $(CPP_SOURCES)
OBJECTS= $(addsuffix .o, $(SOURCES))
LIBS = $(EXTERNAL_LIBS)

#Flags and Defines
DEBUG_DEFINES = -DGLOBAL_DEBUG -DDEBUG -DLOG_DEBUG
RELEASE_DEFINES = -DGLOBAL_RELEASE -DRELEASE -DLOG_RELEASE
DEFINES =
DEFINES = $(BUILD_DEFINES)

COMPILER_FLAGS= -m64
C_COMPILER_FLAGS = $(COMPILER_FLAGS)
CPP_COMPILER_FLAGS = $(COMPILER_FLAGS)
LINKER_FLAGS= -m64
LINKER=g++
DYNAMIC_LIBRARY_COMPILATION_FLAG = -shared
DYNAMIC_IMPORT_LIBRARY_FLAG = -Wl,--out-implib,
COMPILER = gcc
C_COMPILER = gcc
CPP_COMPILER = g++
ARCHIVER_FLAGS = -rc
ARCHIVER = ar

ifeq ($(STACK_PROTECT),1)
COMPILER_FLAGS += -fstack-protector
LINKER_FLAGS += -fstack-protector
endif

ifeq ($(ADDRESS_SANITIZE),1)
COMPILER_FLAGS += -fsanitize=address -static-libasan
LINKER_FLAGS += -fsanitize=address -static-libasan
endif

ifeq ($(SHADOW_CALL_STACK_SANITIZE),1)
COMPILER_FLAGS += -fsanitize=shadow-call-stack
LINKER_FLAGS += -fsanitize=shadow-call-stack
endif

ifeq ($(LEAK_SANITIZE),1)
# no need to add it to COMPILER_FLAGS, as this flag only causes a library linking which overrides the malloc
LINKER_FLAGS += -fsanitize=leak
endif

ifeq ($(PROF),1)
COMPILER_FLAGS += -p
LINKER_FLAGS += -p
endif

ifeq ($(GPROF),1)
COMPILER_FLAGS += -pg
LINKER_FLAGS += -pg
endif

ifeq ($(NOOPT),1)
COMPILER_FLAGS += -O0
LINKER_FLAGS += -O0
endif

DEBUG_COMPILER_FLAGS= -g #-fsanitize=integer-divide-by-zero // why it is not working on windows 64 bit?
RELEASE_COMPILER_FLAGS= -O3
DEBUG_LINKER_FLAGS= -g #-fsanitize=integer-divide-by-zero // why it is not working on windows 64 bit?
RELEASE_LINKER_FLAGS= -flto

TARGET_DYNAMIC_IMPORT_LIB = $(addprefix $(dir $(TARGET_DYNAMIC_LIB)), $(addprefix lib, $(notdir $(TARGET_DYNAMIC_LIB).a)))

.PHONY: lib-static
Expand All @@ -134,95 +190,109 @@ TARGET_DYNAMIC_IMPORT_LIB = $(addprefix $(dir $(TARGET_DYNAMIC_LIB)), $(addprefi
.PHONY: lib-static-dynamic-release
.PHONY: release
.PHONY: debug
.PHONY: $(TARGET)
.PHONY: $(TARGET)
.PHONY: bin-clean
.PHONY: PRINT_MESSAGE1

all: release
lib-static: lib-static-release
lib-static-debug: DEFINES += $(DEBUG_DEFINES) -DBUILD_STATIC_LIBRARY
lib-static-debug: __STATIC_LIB_COMMAND = lib-static-debug
lib-static-debug: COMPILER_FLAGS += -g
lib-static-debug: COMPILER_FLAGS += $(DEBUG_COMPILER_FLAGS)
lib-static-debug: LINKER_FLAGS += $(DEBUG_LINKER_FLAGS)
lib-static-debug: $(TARGET_STATIC_LIB)
lib-static-release: DEFINES += $(RELEASE_DEFINES) -DBUILD_STATIC_LIBRARY
lib-static-release: __STATIC_LIB_COMMAND = lib-static-release
lib-static-release: COMPILER_FLAGS += $(RELEASE_COMPILER_FLAGS)
lib-static-release: LINKER_FLAGS += $(RELEASE_LINKER_FLAGS)
lib-static-release: $(TARGET_STATIC_LIB)

lib-dynamic: lib-dynamic-release
lib-dynamic-debug: DEFINES += $(DEBUG_DEFINES) -DBUILD_DYNAMIC_LIBRARY
lib-dynamic-debug: __STATIC_LIB_COMMAND = lib-static-debug
lib-dynamic-debug: COMPILER_FLAGS += -g -fPIC
lib-dynamic-debug: __STATIC_LIB_COMMAND = lib-static-dynamic-debug
lib-dynamic-debug: COMPILER_FLAGS += $(DEBUG_COMPILER_FLAGS) -fPIC
lib-dynamic-debug: LINKER_FLAGS += $(DEBUG_LINKER_FLAGS) -fPIC
lib-dynamic-debug: $(TARGET_DYNAMIC_LIB)
lib-dynamic-release: DEFINES += $(RELEASE_DEFINES) -DBUILD_DYNAMIC_LIBRARY
lib-dynamic-release: __STATIC_LIB_COMMAND = lib-static-release
lib-dynamic-release: __STATIC_LIB_COMMAND = lib-static-dynamic-release
lib-dynamic-release: COMPILER_FLAGS += $(RELEASE_COMPILER_FLAGS) -fPIC
lib-dynamic-release: LINKER_FLAGS += $(RELEASE_LINKER_FLAGS) -fPIC
lib-dynamic-release: COMPILER_FLAGS += -fPIC
lib-dynamic-release: LINKER_FLAGS += -fPIC
lib-dynamic-release: $(TARGET_DYNAMIC_LIB)

lib-static-dynamic: lib-static-dynamic-release
lib-static-dynamic-debug: DEFINES += $(DEBUG_DEFINES) -DBUILD_DYNAMIC_LIBRARY
lib-static-dynamic-debug: __STATIC_LIB_COMMAND = lib-static-dynamic-debug
lib-static-dynamic-debug: COMPILER_FLAGS += -g -fPIC
lib-static-dynamic-debug: $(TARGET_STATIC_LIB)
lib-static-dynamic-release: DEFINES += $(RELEASE_DEFINES) -DBUILD_DYNAMIC_LIBRARY
lib-static-dynamic-release: __STATIC_LIB_COMMAND = lib-static-dynamic-release
lib-static-dynamic-release: COMPILER_FLAGS += -fPIC
lib-static-dynamic-release: $(TARGET_STATIC_LIB)
.PHONY: lib-dynamic-packed-debug
lib-dynamic-packed-debug: DEFINES += $(DEBUG_DEFINES) -DBUILD_DYNAMIC_LIBRARY
lib-dynamic-packed-debug: __STATIC_LIB_COMMAND = lib-static-dynamic-debug
lib-dynamic-packed-debug: COMPILER_FLAGS += $(DEBUG_COMPILER_FLAGS) -fPIC
lib-dynamic-packed-debug: LINKER_FLAGS += $(DEBUG_LINKER_FLAGS) -fPIC
lib-dynamic-packed-debug: $(TARGET_DYNAMIC_PACKED_LIB)

release: DEFINES += $(RELEASE_DEFINES) -DBUILD_EXECUTABLE
release: __STATIC_LIB_COMMAND = lib-static-release
release: $(TARGET)
debug: DEFINES += $(DEBUG_DEFINES) -DBUILD_EXECUTABLE
debug: __STATIC_LIB_COMMAND = lib-static-debug
debug: COMPILER_FLAGS += -g
debug: COMPILER_FLAGS += $(DEBUG_COMPILER_FLAGS)
debug: LINKER_FLAGS += $(DEBUG_LINKER_FLAGS)
debug: $(TARGET)


%.o : %.c
$(COMPILER) $(COMPILER_FLAGS) $(DEFINES) $(INCLUDES) -c $< -o $@
%.c.o : %.c
@echo [Log] Compiling $< to $@
$(C_COMPILER) $(C_COMPILER_FLAGS) $(DEFINES) $(INCLUDES) -c $< -o $@

%.cpp.o: %.cpp
@echo [Log] Compiling $< to $@
$(CPP_COMPILER) $(CPP_COMPILER_FLAGS) $(DEFINES) $(INCLUDES) -c $< -o $@

%.a:
@echo [Log] Building $@ ...
$(MAKE) --directory=$(subst lib/, ,$(dir $@)) $(__STATIC_LIB_COMMAND)
@echo [Log] $@ built successfully!

$(TARGET_LIB_DIR):
$(TARGET_LIB_DIR):
mkdir $@

PRINT_STATIC_INFO:
PRINT_STATIC_INFO:
@echo [Log] Building $(TARGET_STATIC_LIB) ...

PRINT_DYNAMIC_INFO:
PRINT_DYNAMIC_INFO:
@echo [Log] Building $(TARGET_DYNAMIC_LIB) ...

$(TARGET_STATIC_LIB) : PRINT_STATIC_INFO $(filter-out source/main.o, $(OBJECTS)) | $(TARGET_LIB_DIR)
$(TARGET_STATIC_LIB) : PRINT_STATIC_INFO $(filter-out $(MAIN_OBJECT), $(OBJECTS)) | $(TARGET_LIB_DIR)
$(ARCHIVER) $(ARCHIVER_FLAGS) $@ $(filter-out $<, $^)
@echo [Log] $@ built successfully!

$(TARGET_DYNAMIC_LIB) : PRINT_DYNAMIC_INFO $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS) $(filter-out source/main.o, $(OBJECTS)) | $(TARGET_LIB_DIR)
$(TARGET_DYNAMIC_LIB) : PRINT_DYNAMIC_INFO $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS) $(filter-out $(MAIN_OBJECT), $(OBJECTS)) | $(TARGET_LIB_DIR)
@echo [Log] Linking $@ ...
$(COMPILER) $(COMPILER_FLAGS) $(DYNAMIC_LIBRARY_COMPILATION_FLAG) $(filter-out source/main.o, $(OBJECTS)) $(LIBS)\
$(LINKER) $(LINKER_FLAGS) $(DYNAMIC_LIBRARY_COMPILATION_FLAG) $(filter-out $(MAIN_OBJECT), $(OBJECTS)) $(LIBS)\
$(addprefix -L, $(dir $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS))) \
$(addprefix -l:, $(notdir $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS))) \
-o $@ $(DYNAMIC_IMPORT_LIBRARY_FLAG)$(TARGET_DYNAMIC_IMPORT_LIB)
@echo [Log] $@ and lib$(notdir $@.a) built successfully!

$(TARGET): $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS) $(TARGET_STATIC_LIB) source/main.o
$(TARGET): $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS) $(TARGET_STATIC_LIB) $(MAIN_OBJECT)
@echo [Log] Linking $@ ...
$(COMPILER) $(COMPILER_FLAGS) source/main.o $(LIBS) \
$(LINKER) $(LINKER_FLAGS) $(MAIN_OBJECT) \
$(addprefix -L, $(dir $(TARGET_STATIC_LIB) $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS))) \
$(addprefix -l:, $(notdir $(TARGET_STATIC_LIB) $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS))) \
$(addprefix -l:, $(notdir $(TARGET_STATIC_LIB) $(__DEPENDENCY_LIBS) $(__SHARED_DEPENDENCY_LIBS))) $(LIBS) \
-o $@
@echo [Log] $(PROJECT_NAME) built successfully!

bin-clean:
del $(addprefix source\, $(notdir $(OBJECTS)))
del $(__EXECUTABLE_NAME)
del $(subst /,\, $(TARGET_STATIC_LIB))
del $(subst /,\, $(TARGET_DYNAMIC_LIB))
del $(subst /,\, $(TARGET_DYNAMIC_IMPORT_LIB))
rmdir $(subst /,\, $(TARGET_LIB_DIR))
RM := rm -f
RM_DIR := rm -rf

bin-clean:
$(RM) $(OBJECTS)
$(RM) $(MAIN_OBJECT)
$(RM) $(__EXECUTABLE_NAME)
$(RM) $(TARGET_STATIC_LIB)
$(RM) $(TARGET_DYNAMIC_LIB)
$(RM) $(TARGET_DYNAMIC_IMPORT_LIB)
$(RM_DIR) $(TARGET_LIB_DIR)
@echo [Log] Binaries cleaned successfully!
# $(MAKE) --directory=./dependencies/CallTrace clean
# $(MAKE) --directory=./dependencies/Common clean
# $(MAKE) --directory=./shared-dependencies/CallTrace clean
# $(MAKE) --directory=./dependencies/HPML clean
# $(MAKE) --directory=../../shared-dependencies/HPML clean
Expand Down

0 comments on commit 0fd1385

Please sign in to comment.