3
0
mirror of https://github.com/XboxDev/nxdk.git synced 2026-02-04 23:25:26 +00:00
Files
nxdk/Makefile
Lucas Eriksson 142f062c52 build: Ensure Makefile is useful in Windows
Make sure MinGW shell is used, error out on MSYS
2018-09-19 13:11:23 -07:00

163 lines
3.8 KiB
Makefile

ifeq ($(NXDK_DIR),)
NXDK_DIR = $(shell pwd)
endif
ifeq ($(XBE_TITLE),)
XBE_TITLE = nxdk_app
endif
ifeq ($(OUTPUT_DIR),)
OUTPUT_DIR = bin
endif
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
LD = lld-link
CC = clang
CXX = clang++
CGC = $(NXDK_DIR)/tools/cg/linux/cgc
endif
ifeq ($(UNAME_S),Darwin)
LD = /usr/local/opt/llvm/bin/lld -flavor link
CC = /usr/local/opt/llvm/bin/clang
CXX = /usr/local/opt/llvm/bin/clang++
CGC = $(NXDK_DIR)/tools/cg/mac/cgc
endif
ifneq (,$(findstring MSYS_NT,$(UNAME_S)))
$(error Please use a MinGW64 shell)
endif
ifneq (,$(findstring MINGW,$(UNAME_S)))
LD = lld-link
CC = clang
CXX = clang++
CGC = $(NXDK_DIR)/tools/cg/win/cgc
endif
TARGET = $(OUTPUT_DIR)/default.xbe
CXBE = $(NXDK_DIR)/tools/cxbe/cxbe
VP20COMPILER = $(NXDK_DIR)/tools/vp20compiler/vp20compiler
FP20COMPILER = $(NXDK_DIR)/tools/fp20compiler/fp20compiler
EXTRACT_XISO = $(NXDK_DIR)/tools/extract-xiso/extract-xiso
TOOLS = cxbe vp20compiler fp20compiler extract-xiso
NXDK_CFLAGS = -target i386-pc-win32 -march=pentium3 \
-ffreestanding -nostdlib -fno-builtin -fno-exceptions \
-I$(NXDK_DIR)/lib -I$(NXDK_DIR)/lib/xboxrt \
-Wno-ignored-attributes -DNXDK
ifeq ($(DEBUG),y)
NXDK_CFLAGS += -g
LDFLAGS += /debug
endif
NXDK_CFLAGS += $(CFLAGS)
include $(NXDK_DIR)/lib/Makefile
OBJS = $(SRCS:.c=.obj)
ifneq ($(GEN_XISO),)
TARGET += $(GEN_XISO)
endif
ifneq ($(NXDK_NET),)
include $(NXDK_DIR)/lib/net/Makefile
endif
ifneq ($(NXDK_SDL),)
include $(NXDK_DIR)/lib/sdl/Makefile
endif
V = 0
VE_0 := @
VE_1 :=
VE = $(VE_$(V))
ifeq ($(V),1)
QUIET=
else
QUIET=>/dev/null
endif
DEPS := $(SRCS:.c=.c.d)
all: $(TARGET)
$(OUTPUT_DIR)/default.xbe: main.exe $(OUTPUT_DIR) $(CXBE)
@echo "[ CXBE ] $@"
$(VE)$(CXBE) -OUT:$@ -TITLE:$(XBE_TITLE) $< $(QUIET)
$(OUTPUT_DIR):
@mkdir -p $(OUTPUT_DIR);
ifneq ($(GEN_XISO),)
$(GEN_XISO): $(OUTPUT_DIR)/default.xbe $(EXTRACT_XISO)
@echo "[ XISO ] $@"
$(VE) $(EXTRACT_XISO) -c $(OUTPUT_DIR) $(XISO_FLAGS) $@ $(QUIET)
endif
main.exe: $(OBJS) $(NXDK_DIR)/lib/xboxkrnl/libxboxkrnl.lib
@echo "[ LD ] $@"
$(VE) $(LD) $(LDFLAGS) -subsystem:windows -dll -out:'$@' -entry:XboxCRT $^
%.obj: %.c
@echo "[ CC ] $@"
$(VE) $(CC) $(NXDK_CFLAGS) -c -o '$@' '$<'
%.c.d: %.c
@echo "[ DEP ] $@"
$(VE) set -e; rm -f $@; \
$(CC) -M -MM -MG -MT '$*.obj' -MF $@ $(NXDK_CFLAGS) $<; \
echo "\n$@ : $^\n" >> $@
%.inl: %.vs.cg $(VP20COMPILER)
@echo "[ CG ] $@"
$(VE) $(CGC) -profile vp20 -o $@.$$$$ $< $(QUIET) && \
$(VP20COMPILER) $@.$$$$ > $@ && \
rm -rf $@.$$$$
%.inl: %.ps.cg $(FP20COMPILER)
@echo "[ CG ] $@"
$(VE) $(CGC) -profile fp20 -o $@.$$$$ $< $(QUIET) && \
$(FP20COMPILER) $@.$$$$ > $@ && \
rm -rf $@.$$$$
tools: $(TOOLS)
.PHONY: tools $(TOOLS)
cxbe: $(CXBE)
$(CXBE):
@echo "[ BUILD ] $@"
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/cxbe $(QUIET)
vp20compiler: $(VP20COMPILER)
$(VP20COMPILER):
@echo "[ BUILD ] $@"
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/vp20compiler $(QUIET)
fp20compiler: $(FP20COMPILER)
$(FP20COMPILER):
@echo "[ BUILD ] $@"
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/fp20compiler $(QUIET)
extract-xiso: $(EXTRACT_XISO)
$(EXTRACT_XISO):
@echo "[ BUILD ] $@"
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/extract-xiso $(QUIET)
.PHONY: clean
clean:
$(VE)rm -f $(TARGET) \
main.exe main.exe.manifest \
$(OBJS) $(SHADER_OBJS) \
$(GEN_XISO)
.PHONY: distclean
distclean: clean
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/extract-xiso clean $(QUIET)
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/fp20compiler distclean $(QUIET)
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/vp20compiler distclean $(QUIET)
$(VE)$(MAKE) -C $(NXDK_DIR)/tools/cxbe clean $(QUIET)
$(VE)bash -c "if [ -d $(OUTPUT_DIR) ]; then rmdir $(OUTPUT_DIR); fi"
$(VE)rm -f $(DEPS)
-include $(DEPS)