1#!/usr/bin/env omake
2#----------------------------------------------------------------------------
3# Project:  Horizon
4# File:     OMakefile
5#
6# Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
7#
8# These coded instructions, statements, and computer programs contain
9# proprietary information of Nintendo of America Inc. and/or Nintendo
10# Company Ltd., and are protected by Federal copyright law.  They may
11# not be disclosed to third parties or copied or duplicated in any form,
12# in whole or in part, without the prior written consent of Nintendo.
13#
14# $Rev: 46365 $
15#----------------------------------------------------------------------------
16SUPPORTED_TARGETS   =   CTR-TEG2.Process.MPCore.* CTR-TS.Process.MPCore.*
17
18DEMO_UTILITY_SOURCE_DIR        = $(dir Utility)
19DEMO_SHADER_PROGRAM_SOURCE_DIR = $(dir ShaderProgram)
20DEMO_RENDER_DATA_SOURCE_DIR    = $(dir RenderData)
21DEMO_RENDER_SOURCE_DIR         = $(dir Render)
22DEMO_BODY_SOURCE_DIR           = $(dir Body)
23DEMO_COMMAND_CACHE_SOURCE_DIR  = $(dir CommandCache)
24
25SOURCES[]           = \
26                        $(DEMO_UTILITY_SOURCE_DIR)/demo_Utility.cpp \
27                        $(DEMO_UTILITY_SOURCE_DIR)/demo_MemoryManager.cpp \
28                        $(DEMO_UTILITY_SOURCE_DIR)/demo_TextureConverter.cpp \
29                        \
30                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_ProgramObject.cpp \
31                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_ColorFillProgram.cpp \
32                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_DecalTextureProgram.cpp \
33                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_FontProgram.cpp \
34                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_FontData.cpp \
35                        $(DEMO_SHADER_PROGRAM_SOURCE_DIR)/demo_ShaderManager.cpp \
36                        \
37                        $(DEMO_RENDER_DATA_SOURCE_DIR)/demo_RenderData.cpp \
38                        $(DEMO_RENDER_DATA_SOURCE_DIR)/demo_TrianglesRenderData.cpp \
39                        $(DEMO_RENDER_DATA_SOURCE_DIR)/demo_TextsRenderData.cpp \
40                        \
41                        $(DEMO_RENDER_SOURCE_DIR)/demo_CommandList.cpp \
42                        $(DEMO_RENDER_SOURCE_DIR)/demo_FrameBuffer.cpp \
43                        $(DEMO_RENDER_SOURCE_DIR)/demo_DisplayBuffers.cpp \
44                        $(DEMO_RENDER_SOURCE_DIR)/demo_GraphicsDrawing.cpp \
45                        \
46                        $(DEMO_RENDER_SOURCE_DIR)/demo_RenderSystem.cpp \
47                        \
48                        $(DEMO_BODY_SOURCE_DIR)/demo_Body.cpp \
49                        $(DEMO_BODY_SOURCE_DIR)/demo_Cube.cpp \
50                        $(DEMO_BODY_SOURCE_DIR)/demo_Sphere.cpp \
51                        $(DEMO_BODY_SOURCE_DIR)/demo_Cylinder.cpp \
52                        $(DEMO_BODY_SOURCE_DIR)/demo_Particle.cpp \
53                        \
54                        $(DEMO_RENDER_SOURCE_DIR)/demo_RenderSystemDrawing.cpp \
55                        $(DEMO_RENDER_SOURCE_DIR)/demo_RenderSystemExt.cpp \
56                        $(DEMO_RENDER_SOURCE_DIR)/demo_Light.cpp \
57                        \
58                        $(DEMO_COMMAND_CACHE_SOURCE_DIR)/demo_CommandCache.cpp
59
60TARGET_LIBRARY  =   lib_demo
61
62####################################################################################################
63#
64# Shader binary rules
65#
66####################################################################################################
67
68VERTEX_SHADER_ASSEMBLER = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderAssembler32.exe
69VERTEX_SHADER_LINKER = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderLinker32.exe
70
71VERTEX_SHADER_DIR        = $(dir shaders)
72VERTEX_SHADER_ASSEMBLER_FLAGS =
73VERTEX_SHADER_LINKER_FLAGS = -M
74
75VERTEX_SHADER_OBJ_EXT = .obj
76VERTEX_SHADER_BIN_EXT = .shbin
77
78BASIC_VERTEX_SHADER_FILES = \
79    $(VERTEX_SHADER_DIR)/ColorFillVShader.vsh \
80    $(VERTEX_SHADER_DIR)/FontVShader.vsh \
81    $(VERTEX_SHADER_DIR)/DecalTextureVShader.vsh
82
83BASIC_SHADER_BINARY_NAME = BasicVShader
84
85public.ObjectFromVShader(config, files, shader_binary_name) =
86    SH_OBJ_FILES =
87    obj_dir_parent = $(config.getObjectDirectory)
88    foreach(file, $(files))
89        BASENAME = $(removesuffix $(basename $(file)))
90
91        # *.obj
92        SH_OBJ_FILE = $(obj_dir_parent)/$(BASENAME)$(VERTEX_SHADER_OBJ_EXT)
93
94        if $(not $(defined SYMBOL_PREFIX))
95            SYMBOL_PREFIX = $(uppercase $(removesuffix $(basename $(file))))
96            export
97
98        # *.vsh -> *.obj
99        $(SH_OBJ_FILE): $(file) $(BIN2OBJ) $(obj_dir_parent)
100            $(VERTEX_SHADER_ASSEMBLER) $(file) $(VERTEX_SHADER_ASSEMBLER_FLAGS) -O$(SH_OBJ_FILE) | grep -v '^.*finished - 0 error, 0 warning'
101
102        SH_OBJ_FILES += $(SH_OBJ_FILE)
103        export SH_OBJ_FILES
104
105    # *.bin
106    SH_BIN_FILE = $(obj_dir_parent)/$(shader_binary_name)$(VERTEX_SHADER_BIN_EXT)
107
108    # *.obj -> *.bin
109    $(SH_BIN_FILE): $(SH_OBJ_FILES) $(obj_dir_parent)
110        $(VERTEX_SHADER_LINKER) $(SH_OBJ_FILES) $(VERTEX_SHADER_LINKER_FLAGS) -O$(SH_BIN_FILE) | grep -v '^.*finished - 0 error, 0 warning'
111
112    # *.o
113    OFILE = $(obj_dir_parent)/$(shader_binary_name)$(EXT_OBJ)
114
115    # *.bin -> *.o
116    BIN2OBJ_FLAGS = -b $(shader_binary_name)_SHADER_BEGIN -e $(shader_binary_name)_SHADER_END
117    $(OFILE) : $(SH_BIN_FILE) $(obj_dir_parent)
118        $(BIN2OBJ) $(BIN2OBJ_FLAGS) $(SH_BIN_FILE) $(OFILE)
119
120    return $(OFILE)
121
122OBJECTS = $`(ObjectFromVShader $(TARGET), $(BASIC_VERTEX_SHADER_FILES), $(BASIC_SHADER_BINARY_NAME))
123
124####################################################################################################
125
126include $(ROOT_OMAKE)/modulerules
127
128build: $(DEFAULT_TARGETS)