mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-29 23:52:30 +00:00
b31056c7d9
Some key points for programmers: - Source code files are mostly listed in a 'Sourcefile'. So you no longer directly edit the object list. There can be multiple Sourcefiles and they can even live in subdirectories--the directory name will be prepended to every filename in the list. Of course, the Makefile still needs to be edited to read from each Sourcefile. - Different rules are no longer required for source code files that live in subdirectories (such as sdl/ or hardware/). Subdirectories Just Work so go ham! In addition to those points, another important change is that the bin directory is no longer divided into platform subdirectories (Linux64, Mingw, etc). Executables now go directly into bin. If you use DEBUGMODE or target 64-bit, then subdirectories for 'debug' and '64' will be made though. Oh by the way, I don't think make clean actually removed files before on Windows. It should now. I also fixed as many little inconsistencies like that as I noticed. And now just an overview of the technical aspects that shouldn't affect anyone who doesn't REALLY care about the Makefile... objs and dep directories have been moved to a make directory. Makefile.cfg and its variants have been moved out of their various subdirectories to src/Makefile.d make distclean removes the bin and make directories entirely, but make clean and cleandep still only affect the current build target. When I say automation, I mean that a lot of copy pasting in the Makefile has been reduced.
104 lines
1.9 KiB
Makefile
104 lines
1.9 KiB
Makefile
#
|
|
# Detect the host system and compiler version.
|
|
#
|
|
|
|
# Previously featured:\
|
|
PANDORA\
|
|
HAIKU\
|
|
DUMMY\
|
|
DJGPPDOS\
|
|
SOLARIS\
|
|
MACOSX\
|
|
|
|
all_systems:=\
|
|
LINUX64\
|
|
MINGW64\
|
|
MINGW\
|
|
UNIX\
|
|
LINUX\
|
|
FREEBSD\
|
|
SDL\
|
|
|
|
# check for user specified system
|
|
ifeq (,$(filter $(all_systems),$(.VARIABLES)))
|
|
ifeq ($(OS),Windows_NT) # all windows are Windows_NT...
|
|
|
|
_m=Detected a Windows system,\
|
|
compiling for 32-bit MinGW SDL...)
|
|
$(call Print,$(_m))
|
|
|
|
# go for a 32-bit sdl mingw exe by default
|
|
MINGW:=1
|
|
WINDOWSHELL:=1
|
|
|
|
else # if you on the *nix
|
|
|
|
system:=$(shell uname -s)
|
|
|
|
ifeq ($(system),Linux)
|
|
new_system:=LINUX
|
|
else
|
|
|
|
$(error \
|
|
Could not automatically detect your system,\
|
|
try specifying a system manually)
|
|
|
|
endif
|
|
|
|
ifeq ($(shell getconf LONG_BIT),64)
|
|
system+=64-bit
|
|
new_system:=$(new_system)64
|
|
endif
|
|
|
|
$(call Print,Detected $(system) ($(new_system))...)
|
|
$(new_system):=1
|
|
|
|
endif
|
|
endif
|
|
|
|
# This must have high to low order.
|
|
gcc_versions:=\
|
|
102 101\
|
|
93 92 91\
|
|
84 83 82 81\
|
|
75 74 73 72 71\
|
|
64 63 62 61\
|
|
55 54 53 52 51\
|
|
49 48 47 46 45 44 43 42 41 40
|
|
|
|
latest_gcc_version:=10.2
|
|
|
|
# Automatically set version flag, but not if one was
|
|
# manually set. And don't bother if this is a clean only
|
|
# run.
|
|
ifeq (,$(call Wildvar,GCC% destructive))
|
|
version:=$(shell $(CC) --version)
|
|
|
|
# check if this is in fact GCC
|
|
ifneq (,$(or $(findstring gcc,$(version)),\
|
|
$(findstring GCC,$(version))))
|
|
|
|
version:=$(shell $(CC) -dumpversion)
|
|
|
|
# Turn version into words of major, minor
|
|
v:=$(subst ., ,$(version))
|
|
# concat. major minor
|
|
v:=$(word 1,$(v))$(word 2,$(v))
|
|
|
|
# If this version is not in the list,
|
|
# default to the latest supported
|
|
ifeq (,$(filter $(v),$(gcc_versions)))
|
|
define line =
|
|
Your compiler version, GCC $(version), \
|
|
is not supported by the Makefile.
|
|
The Makefile will assume GCC $(latest_gcc_version).))
|
|
endef
|
|
$(call Print,$(line))
|
|
GCC$(subst .,,$(latest_gcc_version)):=1
|
|
else
|
|
$(call Print,Detected GCC $(version) (GCC$(v)))
|
|
GCC$(v):=1
|
|
endif
|
|
|
|
endif
|
|
endif
|