• Macros.cmake
  • CMAKE_MINIMUM_REQUIRED(VERSION 3.25)
    
    MACRO(DoSource)
    	#IF(${wd} MATCHES ".+")
    	#	MESSAGE("> Listing ${wd}")
    	#ELSE()
    	#	MESSAGE("> Listing Root")
    	#ENDIF()
    	
    	STRING(REGEX REPLACE "/" "\\\\" srcgrp "${wd}")
    	STRING(REGEX REPLACE "Source" "" srcgrp "${srcgrp}")
    	STRING(REGEX REPLACE "^\\\\" "" srcgrp "${srcgrp}")
    	
    	IF(${wd} MATCHES ".+")
    		SET(LocalFixed)
    		SET(LocalShaders)
    		FOREACH(L ${Local}) 
    			IF(IS_DIRECTORY "${CMAKE_SOURCE_DIR}/${wd}/${L}")
    			ELSEIF(L MATCHES ".*\\.glsl")
    				LIST(APPEND LocalShaders "${wd}/${L}")
    			ELSE()
    				LIST(APPEND LocalFixed "${wd}/${L}")
    			ENDIF()
    		ENDFOREACH()
    	ELSE()
    		SET(LocalFixed)
    		SET(LocalShaders)
    		FOREACH(L ${Local}) 
    			IF(IS_DIRECTORY "${CMAKE_SOURCE_DIR}/${wd}/${L}")
    			ELSEIF(L MATCHES ".*\\.glsl")
    				LIST(APPEND LocalShaders ${L})
    			ELSE()
    				LIST(APPEND LocalFixed ${L})
    			ENDIF()
    		ENDFOREACH()
    	ENDIF()
    
    	LIST(APPEND All ${LocalFixed} ${LocalShaders})
    	LIST(LENGTH LocalFixed len)
    	IF(len GREATER 7)
    		SET(headergrpfiles)
    		SET(srcgrpfiles)
    		 
    		FOREACH(S ${LocalFixed})
    			IF(S MATCHES ".*\\.h")
    				LIST(APPEND headergrpfiles ${S})
    			ELSE()
    				LIST(APPEND srcgrpfiles ${S})
    			ENDIF()
    		ENDFOREACH()
    		
    		SOURCE_GROUP("${srcgrp}" FILES ${headergrpfiles})
    		SOURCE_GROUP("${srcgrp}\\Source" FILES ${srcgrpfiles})
    	ELSE()
    		SOURCE_GROUP("${srcgrp}" FILES ${LocalFixed})
    	ENDIF()
    	
    	SOURCE_GROUP("${srcgrp}\\Shaders" FILES ${LocalShaders})
    	
    	FOREACH(S ${Local})
    		IF(IS_DIRECTORY "${CMAKE_SOURCE_DIR}/${wd}/${S}")
    			IF("${wd}" MATCHES "^[^\\/]+")
    				SET(wd "${wd}/${S}")
    			ELSE()
    				SET(wd "${S}")
    			ENDIF()
    
    			LIST(APPEND pwd "${wd}")
    			
    			INCLUDE("${wd}/dir.cmake")
    			DoSource()
    
    			LIST(REMOVE_AT pwd -1)
    			LIST(GET pwd -1 wd)
    		ENDIF()
    	ENDFOREACH()
    ENDMACRO()
    
    MACRO(StartSource src)
    	SET(wd)
    	SET(pwd "/")
    	SET(testid 0)
    	SET(Local ${src})
    	SET(ExcludeDoc)
    	SET(deps)
    	DoSource()
    ENDMACRO()
    
    list(APPEND deps ShaderEmbedder)
    
    MACRO(EmbedShaders out for) #inputs
    	set(listv)
    	
    	foreach(a ${ARGN})
    		list(APPEND listv ${CMAKE_SOURCE_DIR}/${wd}/${a})
    	endforeach()
    	
    	add_custom_command(
    		OUTPUT ${CMAKE_SOURCE_DIR}/${wd}/${out}
    		COMMAND "${CMAKE_SOURCE_DIR}/Tools/ShaderEmbedder/Bin/ShaderEmbedder" ${out} ${ARGN}
    		DEPENDS ShaderEmbedder ${listv}
    		WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/${wd}"
    		COMMENT "Embedding shaders into ${out}"
    	)
    	
    	list(APPEND Local ${ARGN})
    	list(APPEND Local ${out})
    	
    	get_property(cur SOURCE ${CMAKE_SOURCE_DIR}/${wd}/${for} PROPERTY OBJECT_DEPENDS)
    	set_property(SOURCE ${CMAKE_SOURCE_DIR}/${wd}/${for} APPEND PROPERTY OBJECT_DEPENDS "${cur};${CMAKE_SOURCE_DIR}/${wd}/${out}")
    ENDMACRO()
    
    list(APPEND deps GscriptGenerator)
    
    MACRO(GenerateGscript out) #inputs
    	set(listv)
    	
    	foreach(a ${ARGN})
    		list(APPEND listv ${CMAKE_SOURCE_DIR}/${wd}/${a})
    	endforeach()
    	
    	add_custom_command(
    		OUTPUT ${CMAKE_SOURCE_DIR}/${wd}/${out}
    		COMMAND "${CMAKE_SOURCE_DIR}/Tools/GscriptGenerator/Bin/GscriptGenerator" ${out} ${ARGN}
    		DEPENDS GscriptGenerator ${listv}
    		WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/${wd}"
    		COMMENT "Creating Gscript files into ${out}"
    	)
    	
    	list(APPEND Local ${ARGN})
    ENDMACRO()