mirror of
https://github.com/dpogue/CMake-MetalShaderSupport.git
synced 2025-04-04 13:05:06 +00:00
85 lines
2.9 KiB
CMake
85 lines
2.9 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file LICENCE.txt or https://cmake.org/licensing for details.
|
|
|
|
# CMakeDetermine(LANG)Compiler.cmake -> this should find the compiler for LANG and configure CMake(LANG)Compiler.cmake.in
|
|
|
|
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
|
|
|
|
if(NOT CMAKE_Metal_COMPILER_NAMES)
|
|
set(CMAKE_Metal_COMPILER_NAMES metal)
|
|
endif()
|
|
|
|
if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
|
|
set(CMAKE_Metal_COMPILER_XCODE_TYPE sourcecode.metal)
|
|
|
|
execute_process(COMMAND xcrun --find metal
|
|
OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_VARIABLE _xcrun_err RESULT_VARIABLE _xcrun_result
|
|
)
|
|
|
|
if(_xcrun_result EQUAL 0 AND EXISTS "${_xcrun_out}")
|
|
set(CMAKE_Metal_COMPILER "${_xcrun_out}")
|
|
else()
|
|
_cmake_find_compiler_path(Metal)
|
|
endif()
|
|
else()
|
|
if(CMAKE_Metal_COMPILER)
|
|
_cmake_find_compiler_path(Metal)
|
|
else()
|
|
set(CMAKE_Metal_COMPILER_INIT NOTFOUND)
|
|
|
|
if(NOT $ENV{METALC} STREQUAL "")
|
|
get_filename_component(CMAKE_Metal_COMPILER_INIT $ENV{METALC} PROGRAM PROGRAM_ARGS CMAKE_Metal_FLAGS_ENV_INIT)
|
|
if(CMAKE_Metal_FLAGS_ENV_INIT)
|
|
set(CMAKE_Metal_COMPILER_ARG1 "${CMAKE_Metal_FLAGS_ENV_INIT}" CACHE STRING "Arguments to the Metal compiler")
|
|
endif()
|
|
if(NOT EXISTS ${CMAKE_Metal_COMPILER_INIT})
|
|
message(FATAL_ERROR "Could not find compiler set in environment variable METALC\n$ENV{METALC}.\n${CMAKE_Metal_COMPILER_INIT}")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT CMAKE_Metal_COMPILER_INIT)
|
|
set(CMAKE_Metal_COMPILER_LIST metal ${_CMAKE_TOOLCHAIN_PREFIX}metal)
|
|
endif()
|
|
|
|
_cmake_find_compiler(Metal)
|
|
endif()
|
|
|
|
mark_as_advanced(CMAKE_Metal_COMPILER)
|
|
endif()
|
|
|
|
# For Metal we need to explicitly query the version.
|
|
if(CMAKE_Metal_COMPILER AND NOT CMAKE_Metal_COMPILER_VERSION)
|
|
execute_process(
|
|
COMMAND "${CMAKE_Metal_COMPILER}" --version
|
|
OUTPUT_VARIABLE output ERROR_VARIABLE output
|
|
RESULT_VARIABLE result
|
|
TIMEOUT 10
|
|
)
|
|
message(CONFIGURE_LOG
|
|
"Running the Metal compiler: \"${CMAKE_Metal_COMPILER}\" --version\n"
|
|
"${output}\n"
|
|
)
|
|
|
|
if(output MATCHES [[metal version ([0-9]+\.[0-9]+(\.[0-9]+)?)]])
|
|
set(CMAKE_Metal_COMPILER_VERSION "${CMAKE_MATCH_1}")
|
|
if(NOT CMAKE_Metal_COMPILER_ID)
|
|
set(CMAKE_Metal_COMPILER_ID "Apple")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT _CMAKE_TOOLCHAIN_LOCATION)
|
|
get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Metal_COMPILER}" PATH)
|
|
endif ()
|
|
|
|
set(_CMAKE_PROCESSING_LANGUAGE "Metal")
|
|
include(CMakeFindBinUtils)
|
|
unset(_CMAKE_PROCESSING_LANGUAGE)
|
|
|
|
configure_file(
|
|
${CMAKE_CURRENT_LIST_DIR}/CMakeMetalCompiler.cmake.in
|
|
${CMAKE_PLATFORM_INFO_DIR}/CMakeMetalCompiler.cmake
|
|
)
|
|
|
|
set(CMAKE_Metal_COMPILER_ENV_VAR "METALC")
|