shader.mk 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #
  2. # Copyright 2011-2014 Branimir Karadzic. All rights reserved.
  3. # License: http://www.opensource.org/licenses/BSD-2-Clause
  4. #
  5. ifndef VERBOSE
  6. SILENT = @
  7. endif
  8. ifndef TARGET
  9. .PHONY: all
  10. all:
  11. @echo Usage: make TARGET=# [clean, all, rebuild]
  12. @echo " TARGET=0 (hlsl - dx9)"
  13. @echo " TARGET=1 (hlsl - dx11)"
  14. @echo " TARGET=2 (glsl - nacl)"
  15. @echo " TARGET=3 (glsl - android)"
  16. @echo " TARGET=4 (glsl - linux)"
  17. @echo " VERBOSE=1 show build commands."
  18. else
  19. THISDIR := $(dir $(lastword $(MAKEFILE_LIST)))
  20. UNAME := $(shell uname)
  21. ifeq ($(UNAME),$(filter $(UNAME),Linux Darwin))
  22. CMD_MKDIR=mkdir -p "$(1)"
  23. CMD_RMDIR=rm -r "$(1)"
  24. ifeq ($(UNAME),$(filter $(UNAME),Darwin))
  25. OS=darwin
  26. else
  27. OS=linux
  28. endif
  29. else
  30. CMD_MKDIR=cmd /C "if not exist "$(subst /,\,$(1))" mkdir "$(subst /,\,$(1))""
  31. CMD_RMDIR=cmd /C "if exist "$(subst /,\,$(1))" rmdir /S /Q "$(subst /,\,$(1))""
  32. OS=windows
  33. endif
  34. SHADERC="$(THISDIR)../tools/bin/$(OS)/shaderc"
  35. ifeq ($(TARGET), 0)
  36. VS_FLAGS=--platform windows -p vs_3_0 -O 3
  37. FS_FLAGS=--platform windows -p ps_3_0 -O 3
  38. SHADER_PATH=shaders/dx9
  39. else
  40. ifeq ($(TARGET), 1)
  41. VS_FLAGS=--platform windows -p vs_4_0 -O 3
  42. FS_FLAGS=--platform windows -p ps_4_0 -O 3
  43. SHADER_PATH=shaders/dx11
  44. else
  45. ifeq ($(TARGET), 2)
  46. VS_FLAGS=--platform nacl
  47. FS_FLAGS=--platform nacl
  48. SHADER_PATH=shaders/gles
  49. else
  50. ifeq ($(TARGET), 3)
  51. VS_FLAGS=--platform android
  52. FS_FLAGS=--platform android
  53. SHADER_PATH=shaders/gles
  54. else
  55. ifeq ($(TARGET), 4)
  56. VS_FLAGS=--platform linux -p 120
  57. FS_FLAGS=--platform linux -p 120
  58. SHADER_PATH=shaders/glsl
  59. endif
  60. endif
  61. endif
  62. endif
  63. endif
  64. THISDIR := $(dir $(lastword $(MAKEFILE_LIST)))
  65. VS_FLAGS+=-i $(THISDIR)../src/
  66. FS_FLAGS+=-i $(THISDIR)../src/
  67. BUILD_OUTPUT_DIR=$(addprefix ./, $(RUNTIME_DIR)/$(SHADER_PATH))
  68. BUILD_INTERMEDIATE_DIR=$(addprefix $(BUILD_DIR)/, $(SHADER_PATH))
  69. VS_SOURCES=$(wildcard vs_*.sc)
  70. VS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(VS_SOURCES))))
  71. FS_SOURCES=$(wildcard fs_*.sc)
  72. FS_DEPS=$(addprefix $(BUILD_INTERMEDIATE_DIR)/,$(addsuffix .bin.d, $(basename $(FS_SOURCES))))
  73. VS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(VS_SOURCES))))
  74. FS_BIN = $(addprefix $(BUILD_INTERMEDIATE_DIR)/, $(addsuffix .bin, $(basename $(FS_SOURCES))))
  75. BIN = $(VS_BIN) $(FS_BIN)
  76. ASM = $(VS_ASM) $(FS_ASM)
  77. $(BUILD_INTERMEDIATE_DIR)/vs_%.bin : vs_%.sc
  78. @echo [$(<)]
  79. $(SILENT) $(SHADERC) $(VS_FLAGS) --type vertex --depends -o $(@) -f $(<) --disasm
  80. $(SILENT) cp $(@) $(BUILD_OUTPUT_DIR)/$(@F)
  81. $(BUILD_INTERMEDIATE_DIR)/fs_%.bin : fs_%.sc
  82. @echo [$(<)]
  83. $(SILENT) $(SHADERC) $(FS_FLAGS) --type fragment --depends -o $(@) -f $(<) --disasm
  84. $(SILENT) cp $(@) $(BUILD_OUTPUT_DIR)/$(@F)
  85. .PHONY: all
  86. all: dirs $(BIN)
  87. @echo Target $(SHADER_PATH)
  88. .PHONY: clean
  89. clean:
  90. @echo Cleaning...
  91. @-rm -vf $(BIN)
  92. @-$(call CMD_RMDIR,$(BUILD_INTERMEDIATE_DIR))
  93. .PHONY: dirs
  94. dirs:
  95. @-$(call CMD_MKDIR,$(BUILD_INTERMEDIATE_DIR))
  96. @-$(call CMD_MKDIR,$(BUILD_OUTPUT_DIR))
  97. .PHONY: rebuild
  98. rebuild: clean all
  99. endif # TARGET
  100. -include $(VS_DEPS)
  101. -include $(FS_DEPS)