mirror of https://github.com/stenzek/duckstation
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			CMake
		
	
			
		
		
	
	
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			CMake
		
	
| # Borrowed from PCSX2.
 | |
| 
 | |
| if(APPLE)
 | |
|   function(add_metal_sources target sources)
 | |
|     if(CMAKE_GENERATOR MATCHES "Xcode")
 | |
|       # If we're generating an xcode project, you can just add the shaders to the main pcsx2 target and xcode will deal with them properly
 | |
|       # This will make sure xcode supplies code completion, etc (if you use a custom command, it won't)
 | |
|       set_target_properties(${target} PROPERTIES
 | |
|         XCODE_ATTRIBUTE_MTL_ENABLE_DEBUG_INFO INCLUDE_SOURCE
 | |
|       )
 | |
|       foreach(shader IN LISTS sources)
 | |
|         target_sources(${target} PRIVATE ${shader})
 | |
|         set_source_files_properties(${shader} PROPERTIES LANGUAGE METAL)
 | |
|       endforeach()
 | |
|     else()
 | |
|       function(generateMetallib std triple outputName)
 | |
|         set(MetalShaderOut)
 | |
|         set(flags
 | |
|           -ffast-math
 | |
|           $<$<NOT:$<CONFIG:Release,MinSizeRel>>:-gline-tables-only>
 | |
|           $<$<NOT:$<CONFIG:Release,MinSizeRel>>:-MO>
 | |
|         )
 | |
|         foreach(shader IN LISTS sources)
 | |
|           file(RELATIVE_PATH relativeShader "${CMAKE_SOURCE_DIR}" "${shader}")
 | |
|           set(shaderOut ${CMAKE_CURRENT_BINARY_DIR}/${outputName}/${relativeShader}.air)
 | |
|           list(APPEND MetalShaderOut ${shaderOut})
 | |
|           get_filename_component(shaderDir ${shaderOut} DIRECTORY)
 | |
|           add_custom_command(OUTPUT ${shaderOut}
 | |
|             COMMAND ${CMAKE_COMMAND} -E make_directory ${shaderDir}
 | |
|             COMMAND xcrun metal ${flags} -std=${std} -target ${triple} -o ${shaderOut} -c ${shader}
 | |
|             DEPENDS ${shader}
 | |
|           )
 | |
|           set(metallib ${CMAKE_CURRENT_BINARY_DIR}/${outputName}.metallib)
 | |
|         endforeach()
 | |
|         add_custom_command(OUTPUT ${metallib}
 | |
|           COMMAND xcrun metallib -o ${metallib} ${MetalShaderOut}
 | |
|           DEPENDS ${MetalShaderOut}
 | |
|         )
 | |
|         target_sources(${target} PRIVATE ${metallib})
 | |
|         set_source_files_properties(${metallib} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
 | |
|       endfunction()
 | |
|       generateMetallib(macos-metal2.0 air64-apple-macos10.13 default)
 | |
|       generateMetallib(macos-metal2.2 air64-apple-macos10.15 Metal22)
 | |
|       generateMetallib(macos-metal2.3 air64-apple-macos11.0  Metal23)
 | |
|     endif()  
 | |
|   endfunction()
 | |
| endif() |