shader.mk 3.3 KB

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