Skip to content

Commit

Permalink
makefile2: done for windows; clean now deletes *.o, server .def and l…
Browse files Browse the repository at this point in the history
…ibcom_plugin.a files; added "obj" directory for object files.
  • Loading branch information
T-Maxxx committed May 3, 2017
1 parent a7b7c84 commit 2d5c6a2
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 23 deletions.
65 changes: 42 additions & 23 deletions makefile2
@@ -1,24 +1,27 @@
############################################
# A test makefile for incremental building.#
############################################
# If you want to get a debug version, use #
# `make DEBUG=true` #
############################################
####################################################
# By default, building OFFICIAL, non-DEBUG version.#
# If you want to get a debug version, use #
# `make DEBUG=true` #
####################################################
########################################################################
# TODO: pexports for windows, linux. #
# TODO: linux. #
# Check if something wrong. I got 2.3 mb file like in good old days ;D #
########################################################################


##############################
# A name of server executable.
TARGETNAME=cod4x18_dedrun

############################################
# Check if requested build is a debug build.
# Configure type of build.
ifeq ($(DEBUG), true)
RELEASE=
BUILD_TYPE=
else
RELEASE=OFFICIAL
BUILD_TYPE=OFFICIAL
endif

###################
Expand All @@ -31,13 +34,15 @@ WIN_LFLAGS=-m32 -g -Wl,--nxcompat,--image-base,0x8040000,--stack,0x800000 -Tlink
WIN_LLIBS=tomcrypt_win32 bot_win32 mbedtls_win32 ws2_32 wsock32 iphlpapi gdi32 winmm stdc++
LINUX_LFLAGS=-m32 -static-libgcc -rdynamic -Tlinkerscript.ld
LINUX_LLIBS=-L./lib -lmbedtls -lmbedcrypto -lmbedx509 -ltomcrypt_linux -ldl -lpthread -lm -lstdc++ -Wl,-rpath=./
COD4X_DEFINES=COD4X18UPDATE $(RELEASE)
COD4X_DEFINES=COD4X18UPDATE $(BUILD_TYPE)

########################
# Setup directory names.
SRC_DIR=src
BIN_DIR=bin
LIB_DIR=lib
OBJ_DIR=obj
PLUGINS_DIR=plugins
ZLIB_DIR=$(SRC_DIR)/zlib
WIN_DIR=$(SRC_DIR)/win32
LINUX_DIR=$(SRC_DIR)/unix
Expand All @@ -48,33 +53,37 @@ ASSETS_DIR=$(SRC_DIR)/xassets
NASM=nasm


##############################
# Setup OS-specific variables.
###########################################################
# Setup OS-specific variables (All the garbage goes there).
ifeq ($(OS),Windows_NT)
####################
# Windows variables.
BIN_EXT=.exe
RM=del
NASMFLAGS=-f coff -dWin32 --prefix _
OS_SOURCES=$(wildcard $(WIN_DIR)/*.c)
OS_OBJ=$(patsubst $(WIN_DIR)/%.c,$(BIN_DIR)/%.o,$(OS_SOURCES))
OS_OBJ=$(patsubst $(WIN_DIR)/%.c,$(OBJ_DIR)/%.o,$(OS_SOURCES))
C_DEFINES=$(addprefix -D ,$(COD4X_DEFINES) $(WIN_DEFINES))
LFLAGS=$(WIN_LFLAGS)
LLIBS=-L$(LIB_DIR)/ $(addprefix -l,$(WIN_LLIBS))
RESOURCE_FILE=src/win32/win_cod4.res
DEF_FILE=$(BIN_DIR)/$(TARGETNAME).def
INTERFACE_LIB=$(PLUGINS_DIR)/libcom_plugin.a
ADDITIONAL_OBJ=$(INTERFACE_LIB)
else
#################
# LINUX variables.
BIN_EXT=
RM=rm
NASMFLAGS=-f elf
OS_SOURCES=$(wildcard $(LINUX_DIR)/*.c)
OS_OBJ=$(patsubst $(LINUX_DIR)/%.c,$(BIN_DIR)/%.o,$(OS_SOURCES))
OS_OBJ=$(patsubst $(LINUX_DIR)/%.c,$(OBJ_DIR)/%.o,$(OS_SOURCES))
C_DEFINES=$(addprefix -D ,$(COD4X_DEFINES) $(LINUX_DEFINES))
LFLAGS=$(LINUX_LFLAGS)
# was -L./lib
LLIBS=-L$(LIB_DIR)/
RESOURCE_FILE=
ADDITIONAL_OBJ=
endif


Expand All @@ -88,10 +97,10 @@ ASSETS_SOURCES=$(wildcard $(ASSETS_DIR)/*.c)

#################################################################
# Object files lists. (prefixes for rules may be required later).
ASM_OBJ=$(patsubst $(SRC_DIR)/%.asm,$(BIN_DIR)/%.o,$(ASM_SOURCES))
C_OBJ=$(patsubst $(SRC_DIR)/%.c,$(BIN_DIR)/%.o,$(C_SOURCES))
ZLIB_OBJ=$(patsubst $(ZLIB_DIR)/%.c,$(BIN_DIR)/%.o,$(ZLIB_SOURCES))
ASSETS_OBJ=$(patsubst $(ASSETS_DIR)/%.c,$(BIN_DIR)/%.o,$(ASSETS_SOURCES))
ASM_OBJ=$(patsubst $(SRC_DIR)/%.asm,$(OBJ_DIR)/%.o,$(ASM_SOURCES))
C_OBJ=$(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(C_SOURCES))
ZLIB_OBJ=$(patsubst $(ZLIB_DIR)/%.c,$(OBJ_DIR)/%.o,$(ZLIB_SOURCES))
ASSETS_OBJ=$(patsubst $(ASSETS_DIR)/%.c,$(OBJ_DIR)/%.o,$(ASSETS_SOURCES))

#############################################################
#############################################################
Expand All @@ -101,7 +110,7 @@ ASSETS_OBJ=$(patsubst $(ASSETS_DIR)/%.c,$(BIN_DIR)/%.o,$(ASSETS_SOURCES))

###############################
# Default rule: rebuild server.
all: $(TARGET)
all: $(TARGET) $(ADDITIONAL_OBJ)
@echo Done.

###############################
Expand All @@ -112,31 +121,41 @@ $(TARGET): $(OS_OBJ) $(C_OBJ) $(ZLIB_OBJ) $(ASSETS_OBJ) $(ASM_OBJ)
#####################################
# A rule to build common server code.
# -march=nocona
$(BIN_DIR)/%.o: $(SRC_DIR)/%.c
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) -c $(CFLAGS) $(C_DEFINES) -o $@ $<

################################
# A rule to build assemler code.
$(BIN_DIR)/%.o: $(SRC_DIR)/%.asm
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.asm
$(NASM) $(NASMFLAGS) $< -o $@

###################################
# A rule to build zlib source code.
$(BIN_DIR)/%.o: $(ZLIB_DIR)/%.c
$(OBJ_DIR)/%.o: $(ZLIB_DIR)/%.c
$(CC) -c $(CFLAGS) $(C_DEFINES) -o $@ $<

######################################
# A rule to build xassets source code.
$(BIN_DIR)/%.o: $(ASSETS_DIR)/%.c
$(OBJ_DIR)/%.o: $(ASSETS_DIR)/%.c
$(CC) -c $(CFLAGS) $(C_DEFINES) -o $@ $<

########################################
# A rule to build Windows specific code.
$(BIN_DIR)/%.o: $(WIN_DIR)/%.c
$(OBJ_DIR)/%.o: $(WIN_DIR)/%.c
$(CC) -c $(CFLAGS) $(C_DEFINES) -o $@ $<

########################################################
# A rule for Windows to create server interface library.
$(INTERFACE_LIB): $(DEF_FILE) $(TARGET)
dlltool -D $(TARGET) -d $(DEF_FILE) -l $@

####################################################################
# A rule for Windows to create server module definition file (.def).
$(DEF_FILE): $(TARGET)
pexports $^ > $@

############################
# Delete built object files.
clean:
$(RM) $(BIN_DIR)\*.o
$(RM) $(subst /,\,$(OBJ_DIR)/*.o $(DEF_FILE) $(INTERFACE_LIB))

Empty file added obj/dummy
Empty file.

0 comments on commit 2d5c6a2

Please sign in to comment.