engine/Makefile
2018-05-14 00:00:00 -05:00

223 lines
9.7 KiB
Makefile

auto: win64
TARGET_NAME = program
BIN_DIR = ./bin
ENGINE_SRC_DIR = ./engine/src
ENGINE_INC_DIR = ./engine/inc
ENGINE_LIB_DIR = ./engine/lib
EXT_SRC_DIR = ./ext
CLIENT_SRC_DIR = ./client
UF_LIBS =
# EXT_LIBS = -lpng16 -lz -lsfml-main -lsfml-system -lsfml-window -lsfml-graphics
# EXT_LIBS = -lpng16 -lz -lassimp -lsfml-main -lsfml-system -lsfml-window -lsfml-graphics -llua52
EXT_LIBS = -lpng16 -lz -lassimp -ljsoncpp -lopenal32 -lalut -lvorbis -lvorbisfile -logg
#FLAGS = -std=c++0x -Wall -g -DUF_USE_JSON -DUF_USE_NCURSES -DUF_USE_OPENGL -DUF_USE_GLEW
FLAGS = -std=c++0x -Wall -g -DUF_USE_JSON -DUF_USE_NCURSES -DUF_USE_OPENGL -DUF_USE_GLEW -DUF_USE_OPENAL -DUF_USE_VORBIS -DUF_USE_ASSIMP -O2
#-march=native
LIB_NAME = uf
EXT_LIB_NAME = ext
# Linux GCC settings
NIX_CC = g++
NIX_INC_DIR = $(ENGINE_INC_DIR)/nix
NIX_LB_FLAGS = $(ENGINE_LIB_DIR)/nix
NIX_LIBS =
NIX_LINKS = $(UF_LIBS) $(EXT_LIBS) $(NIX_LIBS)
# Base Engine's SO
NIX_LIB_DIR = $(ENGINE_LIB_DIR)/nix/
NIX_INCS = -I$(ENGINE_INC_DIR) -I$(NIX_INC_DIR)
NIX_LIBS = -L$(ENGINE_LIB_DIR) -L$(NIX_LIB_DIR)
SRCS_NIX_SO = $(wildcard $(ENGINE_SRC_DIR)/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*/*.cpp)
OBJS_NIX_SO = $(patsubst %.cpp,%.nix.o,$(SRCS_NIX_SO))
BASE_NIX_SO = lib($LIB_NAME)
STATIC_NIX_SO = $(ENGINE_LIB_DIR)/nix/$(BASE_NIX_SO).so.a
DYNAMIC_NIX_SO = $(ENGINE_LIB_DIR)/nix/$(BASE_NIX_SO).so
# External Engine's SO
EXT_NIX_INC_DIR =
EXT_NIX_LB_FLAGS =
EXT_NIX_DEPS = -l$(LIB_NAME) -l$(NIX_SO_DEPS)
EXT_NIX_LINKS = $(UF_LIBS) $(EXT_LIBS) $(EXT_NIX_DEPS)
EXT_NIX_FLAGS = $(FLAGS)
EXT_NIX_LIB_DIR = $(NIX_LIB_DIR)
EXT_NIX_INCS = -I$NIX_INCs) -I$(EXT_NIX_INC_DIR)
EXT_NIX_LIBS = -L$NIX_LIBs) -L$(EXT_NIX_LIB_DIR)
SRCS_EXT_NIX_SO = $(wildcard $(EXT_SRC_DIR)/*.cpp) $(wildcard $(EXT_SRC_DIR)/*/*.cpp) $(wildcard $(EXT_SRC_DIR)/*/*/*.cpp) $(wildcard $(EXT_SRC_DIR)/*/*/*/*.cpp)
OBJS_EXT_NIX_SO = $(patsubst %.cpp,%.nix.o,$(SRCS_EXT_NIX_SO))
BASE_EXT_NIX_SO = lib($EXT_LIB_NAME)
STATIC_EXT_NIX_SO = $(ENGINE_LIB_DIR)/nix/$(BASE_EXT_NIX_SO).so.a
DYNAMIC_EXT_NIX_SO = $(ENGINE_LIB_DIR)/nix/$(BASE_EXT_NIX_SO).so
# Client executable
SRCS_NIX = $(wildcard $(CLIENT_SRC)/*.cpp) $(wildcard $(CLIENT_SRC)/*/*.cpp)
OBJS_NIX = $(patsubst %.cpp,%.nix.o,$(SRCS_NIX))
TARGET_NIX = $(BIN_DIR)/$(TARGET_NAME)
nix: $(DYNAMIC_NIX_SO) $(EXT_NIX_SO) $(TARGET_NIX)
$(TARGET_NIX): $(OBJS_NIX)
$(NIX_CC) $(FLAGS) $(OBJS_NIX) $(NIX_LIBS) $(NIX_INCS) $(NIX_LINKS) -l$(LIB_NAME) -l$(EXT_LIB_NAME) -o $(TARGET_NIX)
rm-nix:
-rm $(DYNAMIC_NIX_SO)
-rm $(TARGET_NIX)
%.nix.o: %.cpp
$(NIX_CC) $(FLAGS) $(NIX_INCS) -fPIC -c $< -o $@
$(DYNAMIC_NIX_SO): FLAGS += -DUF_EXPORTS
$(DYNAMIC_NIX_SO): $(OBJS_NIX_SO)
$(NIX_CC) -shared -o $(DYNAMIC_NIX_SO) $(OBJS_NIX_SO) $(NIX_LIBS) $(NIX_INCS) $(NIX_LINKS)
cp $(ENGINE_LIB_DIR)/nix/$(BASE_NIX_SO).so $(BIN_DIR)/lib/nix/$(BASE_NIX_SO).so
$(DYNAMIC_EXT_NIX_SO): FLAGS += -DEXT_EXPORTS
$(DYNAMIC_EXT_NIX_SO): $(OBJS_EXT_NIX_SO)
$(NIX_CC) -shared -o $(DYNAMIC_EXT_NIX_SO) $(OBJS_EXT_NIX_SO) $(EXT_NIX_LIBS) $(EXT_NIX_INCS) $(EXT_NIX_LINKS)
cp $(ENGINE_LIB_DIR)/nix/$(BASE_EXT_NIX_SO).so $(BIN_DIR)/lib/nix/$(BASE_EXT_NIX_SO).so
clean-nix:
@-rm -f $(OBJS_NIX_SO)
@-rm -f $(OBJS_NIX)
WIN32_CC = i686-w64-mingw32-g++
# Base Engine's DLL
WIN32_INC_DIR = $(ENGINE_INC_DIR)/win32
WIN32_LB_FLAGS = $(ENGINE_LIB_DIR)/win32
WIN32_DEPS = -lglew32 -lopengl32 -lglu32 -lgdi32 -lncursesw
WIN32_LINKS = $(UF_LIBS) $(EXT_LIBS) $(WIN32_DEPS)
WIN32_FLAGS = $(FLAGS)
#-Wl,-subsystem,windows
WIN32_LIB_DIR = $(ENGINE_LIB_DIR)/win32/
WIN32_INCS = -I$(ENGINE_INC_DIR) -I$(WIN32_INC_DIR)
WIN32_LIBS = -L$(ENGINE_LIB_DIR) -L$(WIN32_LIB_DIR)
SRCS_WIN32_DLL = $(wildcard $(ENGINE_SRC_DIR)/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*/*/*.cpp)
OBJS_WIN32_DLL = $(patsubst %.cpp,%.win32.o,$(SRCS_WIN32_DLL))
BASE_WIN32_DLL = lib$(LIB_NAME)
IM_WIN32_DLL = $(ENGINE_LIB_DIR)/win32/$(BASE_WIN32_DLL).dll.a
EX_WIN32_DLL = $(BIN_DIR)/lib/win32/$(BASE_WIN32_DLL).dll
# External Engine's DLL
EXT_WIN32_INC_DIR = $(WIN32_INC_DIR)
EXT_WIN32_LB_FLAGS = $(WIN32_LIB_DIR)
EXT_WIN32_DEPS = -l$(LIB_NAME) $(WIN32_DEPS)
EXT_WIN32_LINKS = $(UF_LIBS) $(EXT_LIBS) $(EXT_WIN32_DEPS)
EXT_WIN32_FLAGS = $(FLAGS)
#-Wl,-subsystem,windows
EXT_WIN32_LIB_DIR = $(ENGINE_LIB_DIR)/win32/
EXT_WIN32_INCS = -I$(ENGINE_INC_DIR) -I$(EXT_WIN32_INC_DIR)
EXT_WIN32_LIBS = -L$(ENGINE_LIB_DIR) -L$(EXT_WIN32_LIB_DIR)
SRCS_EXT_WIN32_DLL = $(wildcard $(EXT_SRC_DIR)/*.cpp)
OBJS_EXT_WIN32_DLL = $(patsubst %.cpp,%.win32.o,$(SRCS_EXT_WIN32_DLL))
BASE_EXT_WIN32_DLL = lib$(EXT_LIB_NAME)
EXT_IM_WIN32_DLL = $(ENGINE_LIB_DIR)/win32/$(BASE_EXT_WIN32_DLL).dll.a
EXT_EX_WIN32_DLL = $(BIN_DIR)/lib/win32/$(BASE_EXT_WIN32_DLL).dll
# Client EXE
SRCS_WIN32 = $(wildcard $(CLIENT_SRC_DIR)/*.cpp) $(wildcard $(CLIENT_SRC_DIR)/*/*.cpp)
OBJS_WIN32 = $(patsubst %.cpp,%.win32.o,$(SRCS_WIN32))
TARGET_WIN32 = $(BIN_DIR)/$(TARGET_NAME)-i686.exe
win32: $(EX_WIN32_DLL) $(EXT_EX_WIN32_DLL) $(TARGET_WIN32)
rm-exe32:
-rm $(EX_WIN32_DLL)
-rm $(TARGET_WIN32)
%.win32.o: %.cpp
$(WIN32_CC) $(WIN32_FLAGS) $(WIN32_INCS) -c $< -o $@
$(EX_WIN32_DLL): WIN32_FLAGS += -DUF_EXPORTS
$(EX_WIN32_DLL): $(OBJS_WIN32_DLL)
$(WIN32_CC) -shared -o $(EX_WIN32_DLL) -Wl,--out-implib=$(IM_WIN32_DLL) $(OBJS_WIN32_DLL) $(WIN32_LIBS) $(WIN32_INCS) $(WIN32_LINKS)
cp $(ENGINE_LIB_DIR)/win32/$(BASE_WIN32_DLL).dll.a $(ENGINE_LIB_DIR)/win32/$(BASE_WIN32_DLL).a
$(EXT_EX_WIN32_DLL): WIN32_FLAGS += -DEXT_EXPORTS
$(EXT_EX_WIN32_DLL): $(OBJS_EXT_WIN32_DLL)
$(WIN32_CC) -shared -o $(EXT_EX_WIN32_DLL) -Wl,--out-implib=$(EXT_IM_WIN32_DLL) $(OBJS_EXT_WIN32_DLL) $(EXT_WIN32_LIBS) $(EXT_WIN32_INCS) $(EXT_WIN32_LINKS)
cp $(ENGINE_LIB_DIR)/win32/$(BASE_EXT_WIN32_DLL).dll.a $(ENGINE_LIB_DIR)/win32/$(BASE_EXT_WIN32_DLL).a
$(TARGET_WIN32): $(OBJS_WIN32)
$(WIN32_CC) $(WIN32_FLAGS) $(OBJS_WIN32) $(WIN32_LIBS) $(WIN32_INCS) $(WIN32_LINKS) -l$(LIB_NAME) -l$(EXT_LIB_NAME) -o $(TARGET_WIN32)
clean-win32:
@-rm $(EX_WIN32_DLL)
@-rm $(TARGET_WIN32)
@-rm -f $(OBJS_WIN32_DLL)
@-rm -f $(OBJS_EXT_WIN32_DLL)
@-rm -f $(OBJS_WIN32)
#WIN64_CC = i686-w64-mingw32-g++
WIN64_CC = x86_64-w64-mingw32-g++
# Base Engine's DLL
WIN64_INC_DIR = $(ENGINE_INC_DIR)/win64
WIN64_LB_FLAGS = $(ENGINE_LIB_DIR)/win64
WIN64_DEPS = -lglew32 -lopengl32 -lglu32 -lgdi32 -lncursesw
#WIN64_DEPS = -lvulkan -lncursesw
WIN64_LINKS = $(UF_LIBS) $(EXT_LIBS) $(WIN64_DEPS)
WIN64_FLAGS = $(FLAGS)
#-Wl,-subsystem,windows
WIN64_LIB_DIR = $(ENGINE_LIB_DIR)/win64/
WIN64_INCS = -I$(ENGINE_INC_DIR) -I$(WIN64_INC_DIR)
WIN64_LIBS = -L$(ENGINE_LIB_DIR) -L$(WIN64_LIB_DIR)
SRCS_WIN64_DLL = $(wildcard $(ENGINE_SRC_DIR)/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*/*.cpp) $(wildcard $(ENGINE_SRC_DIR)/*/*/*/*/*.cpp)
OBJS_WIN64_DLL = $(patsubst %.cpp,%.win64.o,$(SRCS_WIN64_DLL))
BASE_WIN64_DLL = lib$(LIB_NAME)
IM_WIN64_DLL = $(ENGINE_LIB_DIR)/win64/$(BASE_WIN64_DLL).dll.a
EX_WIN64_DLL = $(BIN_DIR)/lib/win64/$(BASE_WIN64_DLL).dll
# External Engine's DLL
EXT_WIN64_INC_DIR = $(WIN64_INC_DIR)
EXT_WIN64_LB_FLAGS = $(WIN64_LIB_DIR)
EXT_WIN64_DEPS = -l$(LIB_NAME) $(WIN64_DEPS)
EXT_WIN64_LINKS = $(UF_LIBS) $(EXT_LIBS) $(EXT_WIN64_DEPS)
EXT_WIN64_FLAGS = $(FLAGS)
#-Wl,-subsystem,windows
EXT_WIN64_LIB_DIR = $(ENGINE_LIB_DIR)/win64/
EXT_WIN64_INCS = -I$(ENGINE_INC_DIR) -I$(EXT_WIN64_INC_DIR)
EXT_WIN64_LIBS = -L$(ENGINE_LIB_DIR) -L$(EXT_WIN64_LIB_DIR)
SRCS_EXT_WIN64_DLL = $(wildcard $(EXT_SRC_DIR)/*.cpp) $(wildcard $(EXT_SRC_DIR)/*/*.cpp) $(wildcard $(EXT_SRC_DIR)/*/*/*.cpp)
OBJS_EXT_WIN64_DLL = $(patsubst %.cpp,%.win64.o,$(SRCS_EXT_WIN64_DLL))
BASE_EXT_WIN64_DLL = lib$(EXT_LIB_NAME)
EXT_IM_WIN64_DLL = $(ENGINE_LIB_DIR)/win64/$(BASE_EXT_WIN64_DLL).dll.a
EXT_EX_WIN64_DLL = $(BIN_DIR)/lib/win64/$(BASE_EXT_WIN64_DLL).dll
# Client EXE
SRCS_WIN64 = $(wildcard $(CLIENT_SRC_DIR)/*.cpp) $(wildcard $(CLIENT_SRC_DIR)/*/*.cpp)
OBJS_WIN64 = $(patsubst %.cpp,%.win64.o,$(SRCS_WIN64))
TARGET_WIN64 = $(BIN_DIR)/$(TARGET_NAME).exe
win64: $(EX_WIN64_DLL) $(EXT_EX_WIN64_DLL) $(TARGET_WIN64)
rm-exe64:
-rm $(EX_WIN64_DLL)
-rm $(EXT_EX_WIN64_DLL)
-rm $(TARGET_WIN64)
%.win64.o: %.cpp
$(WIN64_CC) $(WIN64_FLAGS) $(WIN64_INCS) -c $< -o $@
$(EX_WIN64_DLL): WIN64_FLAGS += -DUF_EXPORTS
$(EX_WIN64_DLL): $(OBJS_WIN64_DLL)
$(WIN64_CC) -shared -o $(EX_WIN64_DLL) -g -Wl,--out-implib=$(IM_WIN64_DLL) $(OBJS_WIN64_DLL) $(WIN64_LIBS) $(WIN64_INCS) $(WIN64_LINKS)
cp $(ENGINE_LIB_DIR)/win64/$(BASE_WIN64_DLL).dll.a $(ENGINE_LIB_DIR)/win64/$(BASE_WIN64_DLL).a
$(EXT_EX_WIN64_DLL): WIN64_FLAGS += -DEXT_EXPORTS
$(EXT_EX_WIN64_DLL): $(OBJS_EXT_WIN64_DLL)
$(WIN64_CC) -shared -o $(EXT_EX_WIN64_DLL) -g -Wl,--out-implib=$(EXT_IM_WIN64_DLL) $(OBJS_EXT_WIN64_DLL) $(EXT_WIN64_LIBS) $(EXT_WIN64_INCS) $(EXT_WIN64_LINKS)
cp $(ENGINE_LIB_DIR)/win64/$(BASE_EXT_WIN64_DLL).dll.a $(ENGINE_LIB_DIR)/win64/$(BASE_EXT_WIN64_DLL).a
$(TARGET_WIN64): $(OBJS_WIN64)
$(WIN64_CC) $(WIN64_FLAGS) $(OBJS_WIN64) $(WIN64_LIBS) $(WIN64_INCS) $(WIN64_LINKS) -l$(LIB_NAME) -l$(EXT_LIB_NAME) -o $(TARGET_WIN64)
clean-win64:
@-rm $(EX_WIN64_DLL)
@-rm $(EXT_EX_WIN64_DLL)
@-rm $(TARGET_WIN64)
@-rm -f $(OBJS_WIN64_DLL)
@-rm -f $(OBJS_EXT_WIN64_DLL)
@-rm -f $(OBJS_WIN64)