Files
2022-11-17 14:46:18 -06:00

284 lines
6.2 KiB
Makefile

.DEFAULT_GOAL := all
PKGCONFIG = pkg-config
STRIP ?= strip
STATIC ?= 1
DEBUG ?= 1
VERBOSE ?= 0
PROFILE ?= 0
RSDK_ONLY ?= 0
RETRO_REVISION ?= 3
RSDK_REVISION ?= $(RETRO_REVISION)
ifeq ($(RSDK_REVISION),3)
RSDK_NAME = RSDKv5U
else
RSDK_NAME = RSDKv5
endif
RSDK_SUFFIX =
USERTYPE ?= Dummy
RSDK_CFLAGS =
RSDK_LDFLAGS =
RSDK_LIBS =
RSDK_PREBUILD =
RSDK_PRELINK =
STATICGAME ?= 0
ifeq ($(RSDK_ONLY),0)
GAME_NAME ?= Game
GAME_SUFFIX ?= .so
GAME_ALLC ?= 1
GAME_CFLAGS =
GAME_LDFLAGS = -shared
GAME_LIBS =
GAME_PREBUILD =
GAME_PRELINK =
endif
DEFINES ?=
ifneq ($(AUTOBUILD),)
DEFINES += -DRSDK_AUTOBUILD
endif
# =============================================================================
# Detect default platform if not explicitly specified
# =============================================================================
ifeq ($(OS),Windows_NT)
PLATFORM ?= Windows
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
PLATFORM ?= Linux
endif
ifeq ($(UNAME_S),Darwin)
PLATFORM ?= macOS
endif
endif
PLATFORM ?= Unknown
# =============================================================================
RSDK_SOURCES =
ifneq ("$(wildcard makefiles/$(PLATFORM).cfg)","")
include makefiles/$(PLATFORM).cfg
endif
DEFINES += -DRSDK_USE_$(SUBSYSTEM)
OUTDIR = bin/$(PLATFORM)/$(SUBSYSTEM)
RSDK_OBJDIR = bin/obj/$(PLATFORM)/$(SUBSYSTEM)/RSDKv5
GAME_OBJDIR = bin/obj/$(PLATFORM)/$(GAME_NAME)
# =============================================================================
CFLAGS ?= $(CXXFLAGS)
DEFINES += -DBASE_PATH='"$(BASE_PATH)"'
ifeq ($(DEBUG),1)
CXXFLAGS += -g
CFLAGS += -g
STRIP = :
else
CXXFLAGS += -O3
CFLAGS += -O3
endif
ifeq ($(STATIC),1)
CXXFLAGS += -static
CFLAGS += -static
endif
ifeq ($(PROFILE),1)
CXXFLAGS += -pg -g -fno-inline-functions -fno-inline-functions-called-once -fno-optimize-sibling-calls -fno-default-inline
CFLAGS += -pg -g -fno-inline-functions -fno-inline-functions-called-once -fno-optimize-sibling-calls -fno-default-inline
endif
ifeq ($(VERBOSE),0)
CC := @$(CC)
CXX := @$(CXX)
endif
ifeq ($(STATICGAME),0)
DEFINES += -DRETRO_STANDALONE=1
else
DEFINES += -DRETRO_STANDALONE=0
endif
DEFINES += -DRETRO_REVISION=$(RSDK_REVISION)
ifeq ($(RSDK_REVISION),1)
DEFINES += -DMANIA_PREPLUS=1
endif
CFLAGS_ALL += $(CFLAGS) \
-fsigned-char
CXXFLAGS_ALL += $(CXXFLAGS) \
-std=c++17 \
-fsigned-char \
-fpermissive
LDFLAGS_ALL = $(LDFLAGS)
RSDK_INCLUDES += \
-I./RSDKv5/ \
-I./dependencies/all/ \
-I./dependencies/all/tinyxml2/ \
-I./dependencies/all/iniparser/
# Main Sources
RSDK_SOURCES += \
RSDKv5/main \
RSDKv5/RSDK/Core/RetroEngine \
RSDKv5/RSDK/Core/Math \
RSDKv5/RSDK/Core/Reader \
RSDKv5/RSDK/Core/Link \
RSDKv5/RSDK/Core/ModAPI \
RSDKv5/RSDK/Dev/Debug \
RSDKv5/RSDK/Storage/Storage \
RSDKv5/RSDK/Storage/Text \
RSDKv5/RSDK/Graphics/Drawing \
RSDKv5/RSDK/Graphics/Scene3D \
RSDKv5/RSDK/Graphics/Animation \
RSDKv5/RSDK/Graphics/Sprite \
RSDKv5/RSDK/Graphics/Palette \
RSDKv5/RSDK/Graphics/Video \
RSDKv5/RSDK/Audio/Audio \
RSDKv5/RSDK/Input/Input \
RSDKv5/RSDK/Scene/Scene \
RSDKv5/RSDK/Scene/Collision \
RSDKv5/RSDK/Scene/Object \
RSDKv5/RSDK/Scene/Objects/DefaultObject \
RSDKv5/RSDK/Scene/Objects/DevOutput \
RSDKv5/RSDK/User/Core/UserAchievements \
RSDKv5/RSDK/User/Core/UserCore \
RSDKv5/RSDK/User/Core/UserLeaderboards \
RSDKv5/RSDK/User/Core/UserPresence \
RSDKv5/RSDK/User/Core/UserStats \
RSDKv5/RSDK/User/Core/UserStorage \
dependencies/all/tinyxml2/tinyxml2 \
dependencies/all/iniparser/iniparser \
dependencies/all/iniparser/dictionary \
dependencies/all/miniz/miniz
ifeq ($(RSDK_ONLY),0)
GAME_INCLUDES = \
-I./$(GAME_NAME)/ \
-I./$(GAME_NAME)/Objects/
GAME_SOURCES = \
$(GAME_NAME)/Game
ifeq ($(GAME_ALLC),1)
GAME_SOURCES += $(GAME_NAME)/Objects/All
else
# execute Game/objectmake.py?
include $(GAME_NAME)/Objects.cfg
endif
endif
RSDK_PATH = $(OUTDIR)/$(RSDK_NAME)$(RSDK_SUFFIX)
PKG_NAME ?= $(RSDK_NAME)
PKG_SUFFIX ?= $(RSDK_SUFFIX)
PKG_PATH = $(OUTDIR)/$(PKG_NAME)$(PKG_SUFFIX)
RSDK_OBJECTS += $(addprefix $(RSDK_OBJDIR)/, $(addsuffix .o, $(RSDK_SOURCES)))
$(shell mkdir -p $(OUTDIR))
$(shell mkdir -p $(RSDK_OBJDIR))
ifeq ($(RSDK_ONLY),0)
GAME_OBJECTS += $(addprefix $(GAME_OBJDIR)/, $(addsuffix .o, $(GAME_SOURCES)))
GAME_PATH = $(OUTDIR)/$(GAME_NAME)$(GAME_SUFFIX)
$(shell mkdir -p $(GAME_OBJDIR))
$(GAME_OBJDIR)/%.o: $(GAME_PREBUILD) %.c
@mkdir -p $(@D)
@echo compiling $<...
$(CC) -c -fPIC $(CFLAGS_ALL) $(GAME_FLAGS) $(GAME_INCLUDES) $(DEFINES) $< -o $@
@echo done $<
endif
$(RSDK_OBJDIR)/%.o: %.c
@mkdir -p $(@D)
@echo compiling $<...
$(CC) -c $(CFLAGS_ALL) $(RSDK_CFLAGS) $(RSDK_INCLUDES) $(DEFINES) $< -o $@
@echo done $<
$(RSDK_OBJDIR)/%.o: $(RSDK_PREBUILD) %.cpp
@mkdir -p $(@D)
@echo compiling $<...
$(CXX) -c $(CXXFLAGS_ALL) $(RSDK_CFLAGS) $(RSDK_INCLUDES) $(DEFINES) $< -o $@
@echo done $<
ifeq ($(STATICGAME),1)
$(RSDK_PATH): $(RSDK_PRELINK) $(RSDK_OBJECTS) $(GAME_OBJECTS)
@echo linking...
$(CXX) $(CXXFLAGS_ALL) $(LDFLAGS_ALL) $(RSDK_LDFLAGS) $(RSDK_OBJECTS) $(GAME_OBJECTS) $(RSDK_LIBS) $(GAME_LIBS) -o $@
$(STRIP) $@
@echo done
else # STATICGAME
$(RSDK_PATH): $(RSDK_PRELINK) $(RSDK_OBJECTS)
@echo linking RSDK...
$(CXX) $(CXXFLAGS_ALL) $(LDFLAGS_ALL) $(RSDK_LDFLAGS) $(RSDK_OBJECTS) $(RSDK_LIBS) -o $@
$(STRIP) $@
@echo done linking RSDK
ifeq ($(RSDK_ONLY),0)
$(GAME_PATH): $(GAME_PRELINK) $(GAME_OBJECTS)
@echo linking game...
$(CXX) $(CXXFLAGS_ALL) $(LDFLAGS_ALL) $(GAME_LDFLAGS) $(GAME_OBJECTS) $(GAME_LIBS) -o $@
$(STRIP) $@
@echo done linking game
endif # RSDK_ONLY
endif # STATICGAME
ifeq ($(RSDK_PATH),$(PKG_PATH))
ifeq ($(STATICGAME),1)
all: $(RSDK_PATH)
else # STATICGAME
ifeq ($(RSDK_ONLY),0)
all: $(RSDK_PATH) $(GAME_PATH)
else # RSDK_ONLY
all: $(RSDK_PATH)
endif # RSDK_ONLY
endif # STATICGAME
else # PKGPATH
all: $(PKG_PATH)
endif # PKGPATH
clean-rsdk:
rm -rf $(RSDK_PATH) && rm -rf $(RSDK_OBJDIR)
clean-game:
rm -rf $(GAME_PATH) && rm -rf $(GAME_OBJDIR)
ifeq ($(RSDK_PATH),$(PKG_PATH))
clean: clean-rsdk clean-game
else
clean: clean-rsdk clean-game
rm -rf $(PKG_PATH)
endif