--!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 -- toolchain("kotlin-native") set_kind("standalone") set_homepage("https://kotlinlang.org") set_description("The Kotlin Programming Language Compiler. ") set_toolset("kc", "$(env KC)", "kotlinc-native") set_toolset("kcld", "$(env KC)", "kotlinc-native") set_toolset("kcsh", "$(env KC)", "kotlinc-native") set_toolset("kcar", "$(env KC)", "kotlinc-native") on_check(function (toolchain) import("lib.detect.find_tool") local paths = {} local runenvs = {} local java_home = os.getenv("JAVA_HOME") local pathenvs = os.getenv("PATH") if pathenvs then pathenvs = path.splitenv(pathenvs) else pathenvs = {} end for _, package in ipairs(toolchain:packages()) do local envs = package:envs() if envs then table.join2(paths, envs.PATH) table.join2(pathenvs, envs.PATH) if not java_home then java_home = envs.JAVA_HOME end end end if not find_tool("java") then if #pathenvs > 0 then runenvs.PATH = path.joinenv(pathenvs) end if java_home then runenvs.JAVA_HOME = table.unwrap(java_home) end end if toolchain:bindir() then table.insert(paths, toolchain:bindir()) end local kotlinc_native = find_tool("kotlinc-native", {paths = paths, envs = runenvs}) if kotlinc_native and kotlinc_native.program then kotlinc_native = kotlinc_native.program end if kotlinc_native then if path.is_absolute(kotlinc_native) then local bindir = path.directory(kotlinc_native) toolchain:config_set("bindir", bindir) toolchain:config_set("sdkdir", path.directory(bindir)) toolchain:config_set("runenvs", runenvs) end return true end end) on_load(function (toolchain) -- bind runenvs for java local runenvs = toolchain:config("runenvs") if runenvs then for k, v in pairs(runenvs) do toolchain:add("runenvs", k, table.unpack(path.splitenv(v))) end end -- kotlinc-native -list-targets local target_plat = toolchain:plat() local target_arch = toolchain:arch() if target_plat and target_arch and toolchain:is_cross() then if target_plat == "macosx" then target_plat = "macos" elseif target_plat == "iphoneos" then target_plat = "ios" local simulator = toolchain:config("appledev") == "simulator" if simulator then target_plat = target_plat .. "_simulator" end elseif target_plat == "appletvos" then target_plat = "tvos" local simulator = toolchain:config("appledev") == "simulator" if simulator then target_plat = target_plat .. "_simulator" end elseif target_plat == "harmony" then -- we need to port kotlin-native source code to add ohos_arm64 target support target_plat = "ohos" end if target_arch == "x86_64" then target_arch = "x64" elseif target_arch == "i386" then target_arch = "x86" elseif target_arch == "arm64-v8a" then target_arch = "arm64" elseif target_arch == "armeabi-v7a" then target_arch = "arm32" end local target = target_plat .. "_" .. target_arch toolchain:add("kcflags", {"-target", target}) else toolchain:set("kcshflags", "") toolchain:set("kcldflags", "") end end)