--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, Xmake Open Source Community.
--
-- @author      ruki
-- @file        xmake.lua
--

platform("windows")
    set_os("windows")
    set_hosts("windows")
    set_archs("x86", "x64", "arm", "arm64", "arm64ec")

    set_formats("static", "$(name).lib")
    set_formats("object", "$(name).obj")
    set_formats("shared", "$(name).dll")
    set_formats("binary", "$(name).exe")
    set_formats("symbol", "$(name).pdb")

    set_toolchains("msvc", "clang", "yasm", "nasm", "cuda", "rust", "swift", "go", "gfortran", "zig", "fpc", "nim", "dotnet")

    set_menu {
                config =
                {
                    {category = "Visual Studio SDK Configuration"                                   }
                ,   {nil, "vs",          "kv", "auto", "The Microsoft Visual Studio"
                                                    , "  e.g. --vs=2017"                            }
                ,   {nil, "vs_toolset",  "kv", nil,    "The Microsoft Visual Studio Toolset Version"
                                                    , "  e.g. --vs_toolset=14.0"                    }
                ,   {nil, "vs_sdkver",   "kv", nil,    "The Windows SDK Version of Visual Studio"
                                                    , "  e.g. --vs_sdkver=10.0.15063.0"             }
                ,   {nil, "vs_runtime",  "kv", nil,    "The Runtime library of Visual Studio (deprecated, please use --runtimes)"
                                                    , values = {"MT", "MTd", "MD", "MDd"}           }
                ,   {category = "Cuda SDK Configuration"                                            }
                ,   {nil, "cuda",        "kv", "auto", "The Cuda SDK Directory"                     }
                ,   {nil, "cuda_sdkver", "kv", "auto", "The Cuda SDK Version"                       }
                ,   {category = "Qt SDK Configuration"                                              }
                ,   {nil, "qt",          "kv", "auto", "The Qt SDK Directory"                       }
                ,   {nil, "qt_host",     "kv", "auto", "The Qt Host SDK Directory"                  }
                ,   {nil, "qt_sdkver",   "kv", "auto", "The Qt SDK Version"                         }
                ,   {category = "WDK Configuration"                                                 }
                ,   {nil, "wdk",         "kv", "auto", "The WDK Directory"                          }
                ,   {nil, "wdk_sdkver",  "kv", "auto", "The WDK Version"                            }
                ,   {nil, "wdk_winver",  "kv", "auto", "The WDK Windows Version"
                                                    , values = function (complete)
                                                        if complete then
                                                            return {"win10_rs3", "win10", "win81", "win8", "win7_sp3", "win7_sp2", "win7_sp1", "win7"}
                                                        else
                                                            return {"win10[|_rs3]", "win81", "win8", "win7[|_sp1|_sp2|_sp3]"}
                                                        end
                                                    end                                             }
                ,   {category = "Vcpkg Configuration"                                               }
                ,   {nil, "vcpkg",       "kv", "auto", "The Vcpkg Directory"                        }
                }

            ,   global =
                {
                    {category = "Visual Studio SDK Configuration"                                   }
                ,   {nil, "vs",          "kv", "auto", "The Microsoft Visual Studio"                }
                ,   {category = "Cuda SDK Configuration"                                            }
                ,   {nil, "cuda",        "kv", "auto", "The Cuda SDK Directory"                     }
                ,   {category = "Qt SDK Configuration"                                              }
                ,   {nil, "qt",          "kv", "auto", "The Qt SDK Directory"                       }
                ,   {nil, "qt_host",     "kv", "auto", "The Qt Host SDK Directory"                  }
                ,   {category = "WDK Configuration"                                                 }
                ,   {nil, "wdk",         "kv", "auto", "The WDK Directory"                          }
                ,   {category = "Vcpkg Configuration"                                               }
                ,   {nil, "vcpkg",       "kv", "auto", "The Vcpkg Directory"                        }
                }
            }


