Move shared entry point functions to KSPCommonMain
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt
index e23e237..26af73f 100644
--- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt
+++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPCommonMain.kt
@@ -1,7 +1,15 @@
 package com.google.devtools.ksp.cmdline
 
+import com.google.devtools.ksp.impl.KotlinSymbolProcessing
+import com.google.devtools.ksp.processing.KSPConfig
+import com.google.devtools.ksp.processing.KspGradleLogger
+import com.google.devtools.ksp.processing.SymbolProcessorProvider
 import com.google.devtools.ksp.processing.kspCommonArgParser
 import com.google.devtools.ksp.processing.kspCommonArgParserHelp
+import java.io.File
+import java.net.URLClassLoader
+import java.util.ServiceLoader
+import kotlin.system.exitProcess
 
 class KSPCommonMain {
     companion object {
@@ -15,3 +23,47 @@
         }
     }
 }
+
+internal fun printHelpMsg(optionsList: String) {
+    println("Available options:")
+    println(optionsList)
+    println("where:")
+    println(" * is required")
+    println(" List is <path-separator> separated. E.g., arg1:arg2:arg3 on Linux/Mac, or arg1;arg2;arg3 on Windows")
+    println(" Map is in the form key1=value1:key2=value2 on Linux/Mac or key1=value1;key2=value2 on Windows")
+}
+
+internal fun runWithArgs(args: Array<String>, parse: (Array<String>) -> Pair<KSPConfig, List<String>>) {
+
+    val loggingVerbosity = System.getProperty("ksp.logging", "warn")
+    val loggingLevel = when (loggingVerbosity.lowercase()) {
+        "error" -> KspGradleLogger.LOGGING_LEVEL_ERROR
+        "warn" -> KspGradleLogger.LOGGING_LEVEL_WARN
+        "warning" -> KspGradleLogger.LOGGING_LEVEL_WARN
+        "info" -> KspGradleLogger.LOGGING_LEVEL_INFO
+        "debug" -> KspGradleLogger.LOGGING_LEVEL_LOGGING
+        else -> KspGradleLogger.LOGGING_LEVEL_WARN
+    }
+
+    val logger = KspGradleLogger(loggingLevel)
+
+    try {
+        val (config, classpath) = parse(args)
+        val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray())
+
+        @Suppress("UNCHECKED_CAST")
+        val processorProviders = ServiceLoader
+            .load(
+                processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"),
+                processorClassloader
+            )
+            .toList() as List<SymbolProcessorProvider>
+
+        val exitCode = KotlinSymbolProcessing(config, processorProviders, logger).execute()
+        exitProcess(exitCode.code)
+    } catch (t: Throwable) {
+        logger.exception(t)
+        t.printStackTrace()
+        exitProcess(KotlinSymbolProcessing.ExitCode.PROCESSING_ERROR.code)
+    }
+}
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt
index 0687a7c..755738c 100644
--- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt
+++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt
@@ -1,15 +1,7 @@
 package com.google.devtools.ksp.cmdline
 
-import com.google.devtools.ksp.impl.KotlinSymbolProcessing
-import com.google.devtools.ksp.processing.KSPConfig
-import com.google.devtools.ksp.processing.KspGradleLogger
-import com.google.devtools.ksp.processing.SymbolProcessorProvider
 import com.google.devtools.ksp.processing.kspJvmArgParser
 import com.google.devtools.ksp.processing.kspJvmArgParserHelp
-import java.io.File
-import java.net.URLClassLoader
-import java.util.ServiceLoader
-import kotlin.system.exitProcess
 
 class KSPJvmMain {
     companion object {
@@ -23,47 +15,3 @@
         }
     }
 }
-
-internal fun printHelpMsg(optionsList: String) {
-    println("Available options:")
-    println(optionsList)
-    println("where:")
-    println(" * is required")
-    println(" List is <path-separator> separated. E.g., arg1:arg2:arg3 on Linux/Mac, or arg1;arg2;arg3 on Windows")
-    println(" Map is in the form key1=value1:key2=value2 on Linux/Mac or key1=value1;key2=value2 on Windows")
-}
-
-internal fun runWithArgs(args: Array<String>, parse: (Array<String>) -> Pair<KSPConfig, List<String>>) {
-
-    val loggingVerbosity = System.getProperty("ksp.logging", "warn")
-    val loggingLevel = when (loggingVerbosity.lowercase()) {
-        "error" -> KspGradleLogger.LOGGING_LEVEL_ERROR
-        "warn" -> KspGradleLogger.LOGGING_LEVEL_WARN
-        "warning" -> KspGradleLogger.LOGGING_LEVEL_WARN
-        "info" -> KspGradleLogger.LOGGING_LEVEL_INFO
-        "debug" -> KspGradleLogger.LOGGING_LEVEL_LOGGING
-        else -> KspGradleLogger.LOGGING_LEVEL_WARN
-    }
-
-    val logger = KspGradleLogger(loggingLevel)
-
-    try {
-        val (config, classpath) = parse(args)
-        val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray())
-
-        @Suppress("UNCHECKED_CAST")
-        val processorProviders = ServiceLoader
-            .load(
-                processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"),
-                processorClassloader
-            )
-            .toList() as List<SymbolProcessorProvider>
-
-        val exitCode = KotlinSymbolProcessing(config, processorProviders, logger).execute()
-        exitProcess(exitCode.code)
-    } catch (t: Throwable) {
-        logger.exception(t)
-        t.printStackTrace()
-        exitProcess(KotlinSymbolProcessing.ExitCode.PROCESSING_ERROR.code)
-    }
-}