1###############################################################################
2# vim:ts=4:sw=4:noexpandtab
3# Makefile for any library
4#
5# Copyright (C) 2010 Nintendo.  All rights reserved.
6#
7# These coded instructions, statements, and computer programs contain
8# proprietary information of Nintendo of America Inc. and/or Nintendo
9# Company Ltd., and are protected by Federal copyright law.  They may
10# not be disclosed to third parties or copied or duplicated in any form,
11# in whole or in part, without the prior written consent of Nintendo.
12#
13###############################################################################
14
15# This makefile must set the relative depth to the build directory
16# using only "..", without a trailing slash
17
18ifeq ($(WIN64),TRUE)
19WIN64_BIN_PATH=$(CAFE_ROOT)/system/bin/win64
20GFD_DLL=$(WIN64_BIN_PATH)/gfd.dll
21SHADERUTILS_DLL=$(WIN64_BIN_PATH)/shaderUtils.dll
22GSH_BIN=$(WIN64_BIN_PATH)/gshCompile.exe
23else
24WIN32_BIN_PATH=$(CAFE_ROOT)/system/bin/win32
25GFD_DLL=$(WIN32_BIN_PATH)/gfd.dll
26SHADERUTILS_DLL=$(WIN32_BIN_PATH)/shaderUtils.dll
27GSH_BIN=$(WIN32_BIN_PATH)/gshCompile.exe
28endif
29
30SHADER_DEST_ROOT?=$(shell cygpath -u $(CAFE_ROOT))/data/disc/content/assets/shaders
31SHADER_DEST_DIR?=$(SHADER_DEST_ROOT)/$(ASSET_SUBDIR)/$(PLATFORM)
32
33# commondefs.mk must be included near the top so that all common variables
34# will be defined before their use.
35
36include $(BUILD_MAKE_PATH)/commondefs.mk
37include $(BUILD_MAKE_PATH)/commondefs.cos.mk
38
39.PHONY: default
40
41default: shaders
42install: shaders
43headers:
44
45###############################################################################
46#
47# For shaders
48#
49###############################################################################
50
51.PHONY: clobber clean clean_shader
52
53clobber: clean_shader
54	rm -Rf $(SHADER_DEST_ROOT)/$(ASSET_SUBDIR)
55
56clean: clobber
57
58clean_shader:
59	$(_@)echo "------------------------------------------------------------------" ; \
60	echo "Cleaning shaders"
61	rm -rf *.o
62
63$(SHADER_DEST_DIR)/%: %.sh $(GSH_BIN)
64	$(_@)rm -Rf $(SHADER_DEST_DIR)/$* ;
65	$(_@)mkdir -p $(SHADER_DEST_DIR)/$* ;
66	$(_@)sed --in-place -e 's/\r\n/\n/' ./$*.sh &> /dev/null;
67	./$*.sh $(shell cygpath -m $(SHADER_DEST_DIR))/$* "$(GSH_OPTIONS)";
68
69# For gsh file
70
71$(SHADER_DEST_DIR)/%.gsh: %.cs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
72	$(_@)mkdir -p $(dir $@)
73	$(GSH_BIN) $(GSH_OPTIONS) -c $*.cs -o $(shell cygpath -m $@)
74
75$(SHADER_DEST_DIR)/%.gsh: %.gs %.vs %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
76	$(_@)mkdir -p $(dir $@)
77	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -p $*.ps -g $*.gs -o $(shell cygpath -m $@)
78
79$(SHADER_DEST_DIR)/%.gsh: %.vs %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
80	$(_@)mkdir -p $(dir $@)
81	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -p $*.ps -o $(shell cygpath -m $@)
82
83$(SHADER_DEST_DIR)/%.gsh: %.so %.gs %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
84	$(_@)mkdir -p $(dir $@)
85	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -g $*.gs -so $*.so -o $(shell cygpath -m $@)
86
87$(SHADER_DEST_DIR)/%.gsh: %.gs %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
88	$(_@)mkdir -p $(dir $@)
89	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -g $*.gs -o $(shell cygpath -m $@)
90
91$(SHADER_DEST_DIR)/%.gsh: %.so %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
92	$(_@)mkdir -p $(dir $@)
93	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -so $*.so -o $(shell cygpath -m $@)
94
95$(SHADER_DEST_DIR)/%.gsh: %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
96	$(_@)mkdir -p $(dir $@)
97	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -o $(shell cygpath -m $@)
98
99$(SHADER_DEST_DIR)/%.gsh: %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
100	$(_@)mkdir -p $(dir $@)
101	$(GSH_BIN) $(GSH_OPTIONS) -p $*.ps -o $(shell cygpath -m $@)
102
103$(SHADER_DEST_DIR)/%.gsh: %.gs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
104	$(_@)mkdir -p $(dir $@)
105	$(GSH_BIN) $(GSH_OPTIONS) -p $*.gs -o $(shell cygpath -m $@)
106
107# For header file
108
109$(SHADER_DEST_DIR)/%.h: %.cs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
110	$(_@)mkdir -p $(dir $@)
111	$(GSH_BIN) $(GSH_OPTIONS) -c $*.cs -oh $(shell cygpath -m $@)
112
113$(SHADER_DEST_DIR)/%.h: %.gs %.vs %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
114	$(_@)mkdir -p $(dir $@)
115	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -p $*.ps -g $*.gs -oh $(shell cygpath -m $@)
116
117$(SHADER_DEST_DIR)/%.h: %.vs %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
118	$(_@)mkdir -p $(dir $@)
119	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -p $*.ps -oh $(shell cygpath -m $@)
120
121$(SHADER_DEST_DIR)/%.h: %.so %.gs %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
122	$(_@)mkdir -p $(dir $@)
123	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -g $*.gs -so $*.so -o $(shell cygpath -m $@)
124
125$(SHADER_DEST_DIR)/%.h: %.gs %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
126	$(_@)mkdir -p $(dir $@)
127	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -g $*.gs -o $(shell cygpath -m $@)
128
129$(SHADER_DEST_DIR)/%.h: %.so %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
130	$(_@)mkdir -p $(dir $@)
131	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -so $*.so -o $(shell cygpath -m $@)
132
133$(SHADER_DEST_DIR)/%.h: %.vs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
134	$(_@)mkdir -p $(dir $@)
135	$(GSH_BIN) $(GSH_OPTIONS) -v $*.vs -oh $(shell cygpath -m $@)
136
137$(SHADER_DEST_DIR)/%.h: %.ps $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
138	$(_@)mkdir -p $(dir $@)
139	$(GSH_BIN) $(GSH_OPTIONS) -p $*.ps -oh $(shell cygpath -m $@)
140
141$(SHADER_DEST_DIR)/%.h: %.gs $(GSH_BIN) $(SHADERUTILES_DLL) $(GFD_DLL)
142	$(_@)mkdir -p $(dir $@)
143	$(GSH_BIN) $(GSH_OPTIONS) -p $*.gs -oh $(shell cygpath -m $@)
144
145
146$(GSH_BIN):
147	make -C $(CAFE_ROOT)/system/src/tool/gfx/projects/gshCompile
148
149.PHONY: print_shaders shaders
150
151print_shaders:
152	$(call MOD_RULES_PHASE, "Building/Installing $(MODULE_PATH_FROM_SRC)")
153
154shaders: print_shaders \
155	 $(patsubst %.vs,$(SHADER_DEST_DIR)/%.gsh,$(wildcard $(addsuffix /*.vs,$(SRC_DIRS)))) \
156	 $(patsubst %.ps,$(SHADER_DEST_DIR)/%.gsh,$(wildcard $(addsuffix /*.ps,$(SRC_DIRS)))) \
157	 $(patsubst %.gs,$(SHADER_DEST_DIR)/%.gsh,$(wildcard $(addsuffix /*.gs,$(SRC_DIRS)))) \
158	 $(patsubst %.so,$(SHADER_DEST_DIR)/%.gsh,$(wildcard $(addsuffix /*.so,$(SRC_DIRS)))) \
159	 $(patsubst %.cs,$(SHADER_DEST_DIR)/%.gsh,$(wildcard $(addsuffix /*.cs,$(SRC_DIRS)))) \
160	 $(patsubst %.sh,$(SHADER_DEST_DIR)/%,$(CONVERTER_SCRIPTS))
161
162
163.PHONY: shader_headers
164
165shader_headers: print_shaders \
166	 $(patsubst %.vs,$(SHADER_DEST_DIR)/%.h,$(wildcard $(addsuffix /*.vs,$(SRC_DIRS)))) \
167	 $(patsubst %.ps,$(SHADER_DEST_DIR)/%.h,$(wildcard $(addsuffix /*.ps,$(SRC_DIRS)))) \
168	 $(patsubst %.gs,$(SHADER_DEST_DIR)/%.h,$(wildcard $(addsuffix /*.gs,$(SRC_DIRS)))) \
169	 $(patsubst %.cs,$(SHADER_DEST_DIR)/%.h,$(wildcard $(addsuffix /*.cs,$(SRC_DIRS))))
170
171
172#======== End of makefile ========#
173
174