1#---------------------------------------------------------------------------- 2# Project: Horizon 3# File: CTR.commondefs.gl.om 4# 5# Copyright (C)2009-2011 Nintendo Co., Ltd. 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# $Rev: 35205 $ 14#---------------------------------------------------------------------------- 15 16#---------------------------------------------------------------------------- 17# 定数定義 18#---------------------------------------------------------------------------- 19 20# アセンブラ・リンカの定義 21global.VSASM = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderAssembler32.exe 22global.VSLD = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderLinker32.exe 23 24# 拡張子の定義 25global.EXT_VSASM = .vsh 26global.EXT_VSOBJ = .obj 27global.EXT_VSBIN = .shbin 28 29# ビルド済みシェーダが格納されているディレクトリ 30private.SHADER_PREBUILT_ROOT = $(ROOT_RESOURCES)$(DIRSEP)shaders 31 32# アセンブラ・リンカに -I で渡されるインクルードディレクトリ 33global.SHADER_INCLUDES = $(SHADER_PREBUILT_ROOT) 34 35# インクルードディレクトリを指定するコマンドラインを生成(遅延評価) 36private.PREFIXED_SHADER_INCLUDES = $`(addprefix -I, $(set $(absname $(SHADER_INCLUDES)))) 37 38# アセンブラに指定するオプション 39global.SHADER_ASFLAGS = 40 41# リンカに指定するオプション 42global.SHADER_LDFLAGS = -M 43 44#---------------------------------------------------------------------------- 45# 関数定義 46#---------------------------------------------------------------------------- 47 48#------------------------------------------------------- 49# getShaderObjectDirectory 50# 51# 概要 52# .obj/.shbin の格納先を返しつつ親ディレクトリの生成ルールを定義する 53# 54# 参照しているグローバル変数 55# なし 56#------------------------------------------------------- 57getShaderObjectDirectory() = 58 return $(makeDirectory $(getObjectBaseDirectory)$(DIRSEP)CTR.Shader) 59 60 61 62#------------------------------------------------------- 63# VertexShaderObjects 64# 65# 概要 66# .obj ファイルを生成する 67# sourcefiles - .vsh ファイル(複数可) 68# options - シェーダアセンブラに指定するオプション 69# 70# 参照しているグローバル変数 71# PREFIXED_SHADER_INCLUDES 72#------------------------------------------------------- 73VertexShaderObjects(sourcefiles, options) = 74 # .obj を格納するディレクトリを求める 75 private.obj_dir_parent = $(getShaderObjectDirectory) 76 77 # .vsh ファイル一つずつに対してルールを定義 78 private.ofiles = 79 foreach(sourcefile, $(sourcefiles)) 80 # 出力するファイル名をフルパスで求める 81 private.ofile = $(file $(obj_dir_parent)/$(basename $(removesuffix $(sourcefile)))$(EXT_VSOBJ)) 82 83 # アセンブルのルールを定義 (警告もエラーもない場合は grep で出力をカット) 84 # ディレクトリにも依存させて自動生成 85 $(ofile): $(sourcefile) $(obj_dir_parent) $(VSASM) 86 $(VSASM) $< $(PREFIXED_SHADER_INCLUDES) -O$@ $(options) | grep -v '^.*finished - 0 error, 0 warning' 87 88 value $(ofile) 89 90 # クリーンのルールを定義 91 clean: 92 rm -rf $(obj_dir_parent) 93 94 return $(ofiles) 95 96 97 98#------------------------------------------------------- 99# VertexShaderBinary 100# 101# 概要 102# .shbin ファイルを生成する 103# name - .shbin の名前(拡張子無し) 104# sourcefiles - OMakefile で生成された .obj ファイル 105# sourcefiles_pre - resources 以下にあるビルド済み .obj ファイル 106# options - シェーダリンカに指定するオプション 107# 108# 参照しているグローバル変数 109# PREFIXED_SHADER_INCLUDES, SHBIN_INSTALL_ROOT 110#------------------------------------------------------- 111VertexShaderBinary(name, sourcefiles, sourcefiles_pre, options) = 112 # .obj を格納するディレクトリを求める 113 private.obj_dir_parent = $(getShaderObjectDirectory) 114 115 # 依存関係を正しく得る為 sourcefiles_pre をフルパスに変換する。 116 # (-I に頼ると、ビルド済み .obj が更新されたときに再ビルドされない。) 117 private.sourcefiles_pre = $(addprefix $(SHADER_PREBUILT_ROOT)$(DIRSEP), $(sourcefiles_pre)) 118 119 # 出力するファイル名をフルパスで求める 120 private.ofile = $(file $(obj_dir_parent)/$(basename $(name))$(EXT_VSBIN)) 121 122 # リンクのルールを定義 (警告もエラーもない場合は grep で出力をカット) 123 $(ofile): $(sourcefiles) $(sourcefiles_pre) $(obj_dir_parent) $(VSLD) 124 $(VSLD) $(sourcefiles) $(sourcefiles_pre) $(PREFIXED_SHADER_INCLUDES) $(options) -O$@ | grep -v '^.*finished - 0 error, 0 warning' 125 126 if $(not $(defined SHBIN_INSTALL_ROOT)) 127 if $(defined ROMFS_ROOT) 128 SHBIN_INSTALL_ROOT = $(ROMFS_ROOT) 129 export 130 export 131 132 # SHBIN_INSTALL_ROOT が定義されている場合は SHBIN_INSTALL_ROOT 以下にバイナリをコピー 133 if $(and $(defined SHBIN_INSTALL_ROOT), $(not $(equal $(SHBIN_INSTALL_ROOT),$(EMPTY)))) 134 135 # インストール先のファイル名を求める 136 private.ofile_install = $(SHBIN_INSTALL_ROOT)$(DIRSEP)$(basename $(ofile)) 137 138 # インストール先への格納 139 $(ofile_install): $(ofile) $(SHBIN_INSTALL_ROOT) 140 ln-or-cp $< $@ 141 # インストール先のディレクトリを作成する 142 $(SHBIN_INSTALL_ROOT): 143 mkdir -p $@ 144 #クリーンのルールを定義 145 clean: 146 rm -f $(ofile_install) 147 148 149 # ROMFS 内のファイルは MAKEROM 前に準備する必要がある 150 build-romfs: $(ofile_install) 151 152 # クリーンのルールを定義 153 clean: 154 rm -rf $(obj_dir_parent) 155 156 # objects 内に生成される方のバイナリを常に返す 157 return $(ofile) 158 159 160