#---------------------------------------------------------------------------- # Project: Horizon # File: CTR.commondefs.gl.om # # Copyright (C)2009-2011 Nintendo Co., Ltd. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo # Company Ltd., and are protected by Federal copyright law. They may # not be disclosed to third parties or copied or duplicated in any form, # in whole or in part, without the prior written consent of Nintendo. # # $Rev: 35205 $ #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # 定数定義 #---------------------------------------------------------------------------- # アセンブラ・リンカの定義 global.VSASM = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderAssembler32.exe global.VSLD = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderLinker32.exe # 拡張子の定義 global.EXT_VSASM = .vsh global.EXT_VSOBJ = .obj global.EXT_VSBIN = .shbin # ビルド済みシェーダが格納されているディレクトリ private.SHADER_PREBUILT_ROOT = $(ROOT_RESOURCES)$(DIRSEP)shaders # アセンブラ・リンカに -I で渡されるインクルードディレクトリ global.SHADER_INCLUDES = $(SHADER_PREBUILT_ROOT) # インクルードディレクトリを指定するコマンドラインを生成(遅延評価) private.PREFIXED_SHADER_INCLUDES = $`(addprefix -I, $(set $(absname $(SHADER_INCLUDES)))) # アセンブラに指定するオプション global.SHADER_ASFLAGS = # リンカに指定するオプション global.SHADER_LDFLAGS = -M #---------------------------------------------------------------------------- # 関数定義 #---------------------------------------------------------------------------- #------------------------------------------------------- # getShaderObjectDirectory # # 概要 # .obj/.shbin の格納先を返しつつ親ディレクトリの生成ルールを定義する # # 参照しているグローバル変数 # なし #------------------------------------------------------- getShaderObjectDirectory() = return $(makeDirectory $(getObjectBaseDirectory)$(DIRSEP)CTR.Shader) #------------------------------------------------------- # VertexShaderObjects # # 概要 # .obj ファイルを生成する # sourcefiles - .vsh ファイル(複数可) # options - シェーダアセンブラに指定するオプション # # 参照しているグローバル変数 # PREFIXED_SHADER_INCLUDES #------------------------------------------------------- VertexShaderObjects(sourcefiles, options) = # .obj を格納するディレクトリを求める private.obj_dir_parent = $(getShaderObjectDirectory) # .vsh ファイル一つずつに対してルールを定義 private.ofiles = foreach(sourcefile, $(sourcefiles)) # 出力するファイル名をフルパスで求める private.ofile = $(file $(obj_dir_parent)/$(basename $(removesuffix $(sourcefile)))$(EXT_VSOBJ)) # アセンブルのルールを定義 (警告もエラーもない場合は grep で出力をカット) # ディレクトリにも依存させて自動生成 $(ofile): $(sourcefile) $(obj_dir_parent) $(VSASM) $(VSASM) $< $(PREFIXED_SHADER_INCLUDES) -O$@ $(options) | grep -v '^.*finished - 0 error, 0 warning' value $(ofile) # クリーンのルールを定義 clean: rm -rf $(obj_dir_parent) return $(ofiles) #------------------------------------------------------- # VertexShaderBinary # # 概要 # .shbin ファイルを生成する # name - .shbin の名前(拡張子無し) # sourcefiles - OMakefile で生成された .obj ファイル # sourcefiles_pre - resources 以下にあるビルド済み .obj ファイル # options - シェーダリンカに指定するオプション # # 参照しているグローバル変数 # PREFIXED_SHADER_INCLUDES, SHBIN_INSTALL_ROOT #------------------------------------------------------- VertexShaderBinary(name, sourcefiles, sourcefiles_pre, options) = # .obj を格納するディレクトリを求める private.obj_dir_parent = $(getShaderObjectDirectory) # 依存関係を正しく得る為 sourcefiles_pre をフルパスに変換する。 # (-I に頼ると、ビルド済み .obj が更新されたときに再ビルドされない。) private.sourcefiles_pre = $(addprefix $(SHADER_PREBUILT_ROOT)$(DIRSEP), $(sourcefiles_pre)) # 出力するファイル名をフルパスで求める private.ofile = $(file $(obj_dir_parent)/$(basename $(name))$(EXT_VSBIN)) # リンクのルールを定義 (警告もエラーもない場合は grep で出力をカット) $(ofile): $(sourcefiles) $(sourcefiles_pre) $(obj_dir_parent) $(VSLD) $(VSLD) $(sourcefiles) $(sourcefiles_pre) $(PREFIXED_SHADER_INCLUDES) $(options) -O$@ | grep -v '^.*finished - 0 error, 0 warning' if $(not $(defined SHBIN_INSTALL_ROOT)) if $(defined ROMFS_ROOT) SHBIN_INSTALL_ROOT = $(ROMFS_ROOT) export export # SHBIN_INSTALL_ROOT が定義されている場合は SHBIN_INSTALL_ROOT 以下にバイナリをコピー if $(and $(defined SHBIN_INSTALL_ROOT), $(not $(equal $(SHBIN_INSTALL_ROOT),$(EMPTY)))) # インストール先のファイル名を求める private.ofile_install = $(SHBIN_INSTALL_ROOT)$(DIRSEP)$(basename $(ofile)) # インストール先への格納 $(ofile_install): $(ofile) $(SHBIN_INSTALL_ROOT) ln-or-cp $< $@ # インストール先のディレクトリを作成する $(SHBIN_INSTALL_ROOT): mkdir -p $@ #クリーンのルールを定義 clean: rm -f $(ofile_install) # ROMFS 内のファイルは MAKEROM 前に準備する必要がある build-romfs: $(ofile_install) # クリーンのルールを定義 clean: rm -rf $(obj_dir_parent) # objects 内に生成される方のバイナリを常に返す return $(ofile)