https://github.com/shader-slang/slang
Raw File
Tip revision: 14764896c34b230a5563f48d8b8e565de2f3aa10 authored by Yong He on 03 February 2024, 06:28:02 UTC
Capability type checking. (#3530)
Tip revision: 1476489
AutoOption.cmake
function(auto_option name package description)
    set(${name} "AUTO" CACHE STRING ${description})
    set_property(CACHE ${name} PROPERTY STRINGS AUTO ON OFF)

    if(${${name}} OR ${${name}} STREQUAL "AUTO")
        if(${${name}} STREQUAL "AUTO")
            set(req)
        else()
            set(req REQUIRED)
        endif()
        find_package(${package} ${req})

        if(${${package}_FOUND})
            set(${name} TRUE CACHE STRING ${description} FORCE)
        else()
            set(${name} FALSE CACHE STRING ${description} FORCE)
        endif()
    endif()
endfunction()

function(enum_option name init description)
    set(enums)
    set(is_enum TRUE)
    foreach(enum_or_desc ${ARGN})
        if(is_enum)
            list(APPEND enums ${enum_or_desc})
            string(APPEND description "\n" "${enum_or_desc}" ": ")
            set(is_enum FALSE)
        else()
            string(APPEND description "${enum_or_desc}")
            set(is_enum TRUE)
        endif()
    endforeach()

    set(${name} ${init} CACHE STRING ${description})
    set_property(CACHE ${name} PROPERTY STRINGS ${enums})

    foreach(enum ${enums})
        if(${${name}} STREQUAL ${enum})
            return()
        endif()
    endforeach()
    message(FATAL_ERROR "${name} must be one of ${enums}")
endfunction()
back to top