xref: /aosp_15_r20/external/kotlinc/bin/kotlinc.bat (revision db694bcbe6ddf7a54139cd11aad3e01286b7b463)
1*db694bcbSAndroid Build Coastguard Worker@echo off
2*db694bcbSAndroid Build Coastguard Worker
3*db694bcbSAndroid Build Coastguard Workerrem Based on scalac.bat from the Scala distribution
4*db694bcbSAndroid Build Coastguard Workerrem Copyright 2002-2011, LAMP/EPFL
5*db694bcbSAndroid Build Coastguard Workerrem Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
6*db694bcbSAndroid Build Coastguard Workerrem Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
7*db694bcbSAndroid Build Coastguard Worker
8*db694bcbSAndroid Build Coastguard Workerrem We adopt the following conventions:
9*db694bcbSAndroid Build Coastguard Workerrem - System/user environment variables start with a letter
10*db694bcbSAndroid Build Coastguard Workerrem - Local batch variables start with an underscore ('_')
11*db694bcbSAndroid Build Coastguard Worker
12*db694bcbSAndroid Build Coastguard Workersetlocal
13*db694bcbSAndroid Build Coastguard Workercall :set_home
14*db694bcbSAndroid Build Coastguard Worker
15*db694bcbSAndroid Build Coastguard Workerif "%_KOTLIN_COMPILER%"=="" set _KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
16*db694bcbSAndroid Build Coastguard Worker
17*db694bcbSAndroid Build Coastguard Workerif not "%JAVA_HOME%"=="" (
18*db694bcbSAndroid Build Coastguard Worker  rem Prepend JAVA_HOME to local PATH to be able to simply execute "java" later in the script.
19*db694bcbSAndroid Build Coastguard Worker  set "PATH=%JAVA_HOME%\bin;%PATH%"
20*db694bcbSAndroid Build Coastguard Worker)
21*db694bcbSAndroid Build Coastguard Worker
22*db694bcbSAndroid Build Coastguard Workerrem We use the value of the JAVA_OPTS environment variable if defined
23*db694bcbSAndroid Build Coastguard Workerif "%JAVA_OPTS%"=="" set JAVA_OPTS=-Xmx256M -Xms128M
24*db694bcbSAndroid Build Coastguard Worker
25*db694bcbSAndroid Build Coastguard Workerrem Iterate through arguments and split them into java and kotlin ones
26*db694bcbSAndroid Build Coastguard Worker:loop
27*db694bcbSAndroid Build Coastguard Workerset _arg=%~1
28*db694bcbSAndroid Build Coastguard Workerif "%_arg%" == "" goto loopend
29*db694bcbSAndroid Build Coastguard Worker
30*db694bcbSAndroid Build Coastguard Workerif "%_arg:~0,2%"=="-J" (
31*db694bcbSAndroid Build Coastguard Worker  if "%_arg:~2%"=="" (
32*db694bcbSAndroid Build Coastguard Worker    echo error: empty -J argument
33*db694bcbSAndroid Build Coastguard Worker    goto error
34*db694bcbSAndroid Build Coastguard Worker  )
35*db694bcbSAndroid Build Coastguard Worker  set JAVA_OPTS=%JAVA_OPTS% "%_arg:~2%"
36*db694bcbSAndroid Build Coastguard Worker) else (
37*db694bcbSAndroid Build Coastguard Worker  if "%_arg:~0,2%"=="-D" (
38*db694bcbSAndroid Build Coastguard Worker    set JAVA_OPTS=%JAVA_OPTS% "%_arg%"
39*db694bcbSAndroid Build Coastguard Worker  ) else (
40*db694bcbSAndroid Build Coastguard Worker    set KOTLIN_OPTS=%KOTLIN_OPTS% "%_arg%"
41*db694bcbSAndroid Build Coastguard Worker  )
42*db694bcbSAndroid Build Coastguard Worker)
43*db694bcbSAndroid Build Coastguard Workershift
44*db694bcbSAndroid Build Coastguard Workergoto loop
45*db694bcbSAndroid Build Coastguard Worker:loopend
46*db694bcbSAndroid Build Coastguard Worker
47*db694bcbSAndroid Build Coastguard Workersetlocal EnableDelayedExpansion
48*db694bcbSAndroid Build Coastguard Worker
49*db694bcbSAndroid Build Coastguard Workercall :set_java_version
50*db694bcbSAndroid Build Coastguard Workerif !_java_major_version! geq 9 (
51*db694bcbSAndroid Build Coastguard Worker  rem Workaround the illegal reflective access warning from ReflectionUtil to ResourceBundle.setParent, see IDEA-248785.
52*db694bcbSAndroid Build Coastguard Worker  set JAVA_OPTS=!JAVA_OPTS! "--add-opens" "java.base/java.util=ALL-UNNAMED"
53*db694bcbSAndroid Build Coastguard Worker)
54*db694bcbSAndroid Build Coastguard Worker
55*db694bcbSAndroid Build Coastguard Workerif "!_KOTLIN_RUNNER!"=="1" (
56*db694bcbSAndroid Build Coastguard Worker  java !JAVA_OPTS! "-Dkotlin.home=%_KOTLIN_HOME%" -cp "%_KOTLIN_HOME%\lib\kotlin-runner.jar" ^
57*db694bcbSAndroid Build Coastguard Worker    org.jetbrains.kotlin.runner.Main %KOTLIN_OPTS%
58*db694bcbSAndroid Build Coastguard Worker) else (
59*db694bcbSAndroid Build Coastguard Worker  set _ADDITIONAL_CLASSPATH=
60*db694bcbSAndroid Build Coastguard Worker
61*db694bcbSAndroid Build Coastguard Worker  if !_java_major_version! lss 13 (
62*db694bcbSAndroid Build Coastguard Worker    set JAVA_OPTS=!JAVA_OPTS! "-noverify"
63*db694bcbSAndroid Build Coastguard Worker  )
64*db694bcbSAndroid Build Coastguard Worker
65*db694bcbSAndroid Build Coastguard Worker  if not "%_KOTLIN_TOOL%"=="" (
66*db694bcbSAndroid Build Coastguard Worker    set _ADDITIONAL_CLASSPATH=;%_KOTLIN_HOME%\lib\%_KOTLIN_TOOL%
67*db694bcbSAndroid Build Coastguard Worker  )
68*db694bcbSAndroid Build Coastguard Worker
69*db694bcbSAndroid Build Coastguard Worker  java !JAVA_OPTS! -cp "%_KOTLIN_HOME%\lib\kotlin-preloader.jar" ^
70*db694bcbSAndroid Build Coastguard Worker    org.jetbrains.kotlin.preloading.Preloader -cp "%_KOTLIN_HOME%\lib\kotlin-compiler.jar!_ADDITIONAL_CLASSPATH!" ^
71*db694bcbSAndroid Build Coastguard Worker    %_KOTLIN_COMPILER% %KOTLIN_OPTS%
72*db694bcbSAndroid Build Coastguard Worker)
73*db694bcbSAndroid Build Coastguard Worker
74*db694bcbSAndroid Build Coastguard Workergoto end
75*db694bcbSAndroid Build Coastguard Worker
76*db694bcbSAndroid Build Coastguard Workerrem ##########################################################################
77*db694bcbSAndroid Build Coastguard Workerrem # subroutines
78*db694bcbSAndroid Build Coastguard Worker
79*db694bcbSAndroid Build Coastguard Worker:set_home
80*db694bcbSAndroid Build Coastguard Worker  set _BIN_DIR=
81*db694bcbSAndroid Build Coastguard Worker  for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi
82*db694bcbSAndroid Build Coastguard Worker  set _KOTLIN_HOME=%_BIN_DIR%..
83*db694bcbSAndroid Build Coastguard Workergoto :eof
84*db694bcbSAndroid Build Coastguard Worker
85*db694bcbSAndroid Build Coastguard Workerrem Parses "java -version" output and stores the major version to _java_major_version.
86*db694bcbSAndroid Build Coastguard Workerrem Note that this only loads the first component of the version, so "1.8.0_265" -> "1".
87*db694bcbSAndroid Build Coastguard Workerrem But it's fine because major version is 9 for JDK 9, and so on.
88*db694bcbSAndroid Build Coastguard Workerrem Needs to be executed in the EnableDelayedExpansion mode.
89*db694bcbSAndroid Build Coastguard Worker:set_java_version
90*db694bcbSAndroid Build Coastguard Worker  set _version=
91*db694bcbSAndroid Build Coastguard Worker  rem Parse output and take the third token from the string containing " version ".
92*db694bcbSAndroid Build Coastguard Worker  rem It should be something like "1.8.0_275" or "15.0.1".
93*db694bcbSAndroid Build Coastguard Worker  for /f "tokens=3" %%i in ('java -version 2^>^&1 ^| findstr /i " version "') do (
94*db694bcbSAndroid Build Coastguard Worker    rem Split the string by "-" or "." and take the first token.
95*db694bcbSAndroid Build Coastguard Worker    for /f "delims=-. tokens=1" %%j in ("%%i") do (
96*db694bcbSAndroid Build Coastguard Worker      rem At this point, _version should be something like "1 or "15. Note the leading quote.
97*db694bcbSAndroid Build Coastguard Worker      set _version=%%j
98*db694bcbSAndroid Build Coastguard Worker    )
99*db694bcbSAndroid Build Coastguard Worker  )
100*db694bcbSAndroid Build Coastguard Worker  if "!_version!"=="" (
101*db694bcbSAndroid Build Coastguard Worker    rem If failed to parse the output, set the version to 1.
102*db694bcbSAndroid Build Coastguard Worker    set _java_major_version=1
103*db694bcbSAndroid Build Coastguard Worker  ) else (
104*db694bcbSAndroid Build Coastguard Worker    rem Strip the leading quote.
105*db694bcbSAndroid Build Coastguard Worker    set _java_major_version=!_version:~1!
106*db694bcbSAndroid Build Coastguard Worker  )
107*db694bcbSAndroid Build Coastguard Workergoto :eof
108*db694bcbSAndroid Build Coastguard Worker
109*db694bcbSAndroid Build Coastguard Worker:error
110*db694bcbSAndroid Build Coastguard Workerset ERRORLEVEL=1
111*db694bcbSAndroid Build Coastguard Worker
112*db694bcbSAndroid Build Coastguard Worker:end
113*db694bcbSAndroid Build Coastguard Workerexit /b %ERRORLEVEL%