#!/usr/bin/env omake #---------------------------------------------------------------------------- # Project: Horizon # File: commondefs.gl.om # # Copyright 2007-2009 Nintendo. 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. # # $Date:: 2010-06-01#$ # $Rev: 17243 $ # $Author: hatamoto_minoru $ #---------------------------------------------------------------------------- # アセンブラ・リンカの定義 public.VSASM = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderAssembler32.exe public.VSLD = $(ROOT_COMMANDS)$(DIRSEP)ctr_VertexShaderLinker32.exe # ビルド済みシェーダが格納されているディレクトリ public.SHADER_PREBUILT_ROOT = $(ROOT_RESOURCES)$(DIRSEP)shaders # アセンブラ・リンカに -I で渡されるインクルードディレクトリ public.SHADER_INCLUDES = $(SHADER_PREBUILT_ROOT) # インクルードディレクトリを指定するコマンドラインを生成(遅延評価) public.PREFIXED_SHADER_INCLUDES = $`(addprefix -I, $(set $(absname $(SHADER_INCLUDES)))) # 拡張子の定義 EXT_VSASM = .vsh EXT_VSOBJ = .obj EXT_VSBIN = .shbin # .obj/.shbin の格納先を返しつつ親ディレクトリの生成ルールを定義する getShaderObjectDirectory() = return $(makeDirectory $(getObjectBaseDirectory)$(DIRSEP)CTR.Shader) # .obj ファイルを生成する # sourcefiles - .vsh ファイル(複数可) VertexShaderObjects(sourcefiles) = # .obj を格納するディレクトリを求める obj_dir_parent = $(getShaderObjectDirectory) OFILES = export OFILES # .vsh ファイル一つずつに対してルールを定義 foreach(sourcefile, $(sourcefiles)) # 出力するファイル名をフルパスで求める OFILE = $(file $(obj_dir_parent)/$(basename $(removesuffix $(sourcefile)))$(EXT_VSOBJ)) # 返値に追加 OFILES += $(OFILE) # アセンブルのルールを定義 (警告もエラーもない場合は grep で出力をカット) # ディレクトリにも依存させて自動生成 $(OFILE): $(sourcefile) $(obj_dir_parent) $(VSASM) $(VSASM) $< $(PREFIXED_SHADER_INCLUDES) -O$@ | grep -v '^.*finished - 0 error, 0 warning' # クリーンのルールを定義 clean: rm -rf $(obj_dir_parent) return $(OFILES) # .shbin ファイルを生成する # name - .shbin の名前(拡張子無し) # sourcefiles - OMakefile で生成された .obj ファイル # sourcefiles_pre - resources 以下にあるビルド済み .obj ファイル VertexShaderBinary(name, sourcefiles, sourcefiles_pre) = # .obj を格納するディレクトリを求める obj_dir_parent = $(getShaderObjectDirectory) # 依存関係を正しく得る為 sourcefiles_pre をフルパスに変換する。 # (-I に頼ると、ビルド済み .obj が更新されたときに再ビルドされない。) sourcefiles_pre = $(addprefix $(SHADER_PREBUILT_ROOT)$(DIRSEP), $(sourcefiles_pre)) # 出力するファイル名をフルパスで求める 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) -M -nodebug -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), $(SHBIN_INSTALL_ROOT)) # インストール先のファイル名を求める 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)