import com.jetbrains.rd.generator.gradle.RdGenTask plugins { // Version is configured in gradle.properties id("com.jetbrains.rdgen") id("org.jetbrains.kotlin.jvm") } repositories { maven("https://cache-redirector.jetbrains.com/intellij-dependencies") maven("https://cache-redirector.jetbrains.com/maven-central") val rd_version: String? by project if (rd_version == "SNAPSHOT") { mavenLocal() } } val isMonorepo = rootProject.projectDir != projectDir.parentFile val unrealLinkRepoRoot: File = projectDir.parentFile sourceSets { main { kotlin { srcDir(unrealLinkRepoRoot.resolve("protocol/src/main/kotlin/model")) } } } data class UnrealLinkGeneratorSettings( val ue4LibCsLibraryOutput: File, val ue4LibCppLibraryOutput: File, val ue4LibKtLibraryOutput: File, val riderModelCsOutput: File, val riderModelKtOutput: File, val csEditorOutput: File, val cppEditorOutput: File, val fileSuffix: String ) val ktOutputRelativePath = "src/rider/generated/kotlin/com/jetbrains/rider/model" val unrealLinkGeneratorSettings = if (isMonorepo) { val monorepoRoot = buildscript.sourceFile?.parentFile?.parentFile?.parentFile?.parentFile?.parentFile ?: error("Cannot find products home") check(monorepoRoot.resolve(".ultimate.root.marker").isFile) { error("Incorrect location in monorepo: monorepoRoot='$monorepoRoot'") } val monorepoPreGeneratedRootDir = monorepoRoot.resolve("dotnet/Plugins/_UnrealLink.Pregenerated") val monorepoPreGeneratedFrontendDir = monorepoPreGeneratedRootDir.resolve("Frontend") val monorepoPreGeneratedBackendDir = monorepoPreGeneratedRootDir.resolve("BackendModel") val monorepoPreGeneratedCppDir = monorepoPreGeneratedRootDir.resolve("CppModel") val ktOutputMonorepoRoot = monorepoPreGeneratedFrontendDir.resolve(ktOutputRelativePath) UnrealLinkGeneratorSettings( monorepoPreGeneratedBackendDir.resolve("Library"), monorepoPreGeneratedCppDir.resolve( "Library"), ktOutputMonorepoRoot.resolve("Library"), monorepoPreGeneratedBackendDir.resolve("RdRiderProtocol"), ktOutputMonorepoRoot.resolve("RdRiderProtocol"), monorepoPreGeneratedBackendDir.resolve("RdEditorProtocol"), monorepoPreGeneratedCppDir.resolve("RdEditorProtocol"), ".Pregenerated" ) } else { val csOutputRoot = File(unrealLinkRepoRoot, "src/dotnet/RiderPlugin.UnrealLink/obj/model") val cppOutputRoot = File(unrealLinkRepoRoot, "src/cpp/RiderLink/Source/RiderLink/Public/Model") val ktOutputRoot = File(unrealLinkRepoRoot, ktOutputRelativePath) UnrealLinkGeneratorSettings( csOutputRoot.resolve("Library"), cppOutputRoot.resolve( "Library"), ktOutputRoot.resolve("Library"), csOutputRoot.resolve("RdRiderProtocol"), ktOutputRoot.resolve("RdRiderProtocol"), csOutputRoot.resolve("RdEditorProtocol"), cppOutputRoot.resolve("RdEditorProtocol"), ".Pregenerated" ) } rdgen { verbose = true packages = "model.editorPlugin,model.lib.ue4,model.rider" generator { language = "csharp" transform = "symmetric" root = "model.lib.ue4.UE4Library" directory = unrealLinkGeneratorSettings.ue4LibCsLibraryOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "cpp" transform = "reversed" root = "model.lib.ue4.UE4Library" directory = unrealLinkGeneratorSettings.ue4LibCppLibraryOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "kotlin" transform = "asis" root = "model.lib.ue4.UE4Library" directory = unrealLinkGeneratorSettings.ue4LibKtLibraryOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "csharp" transform = "reversed" root = "com.jetbrains.rider.model.nova.ide.IdeRoot" directory = unrealLinkGeneratorSettings.riderModelCsOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "kotlin" transform = "asis" root = "com.jetbrains.rider.model.nova.ide.IdeRoot" directory = unrealLinkGeneratorSettings.riderModelKtOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "csharp" transform = "asis" root = "model.editorPlugin.RdEditorRoot" directory = unrealLinkGeneratorSettings.csEditorOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } generator { language = "cpp" transform = "reversed" root = "model.editorPlugin.RdEditorRoot" directory = unrealLinkGeneratorSettings.cppEditorOutput.absolutePath generatedFileSuffix = unrealLinkGeneratorSettings.fileSuffix } } tasks.withType { dependsOn(sourceSets["main"].runtimeClasspath) classpath(sourceSets["main"].runtimeClasspath) } dependencies { if (isMonorepo) { implementation(project(":rider-model")) } else { val rdVersion: String by project val rdKotlinVersion: String by project implementation("com.jetbrains.rd:rd-gen:$rdVersion") implementation("org.jetbrains.kotlin:kotlin-stdlib:$rdKotlinVersion") implementation( project( mapOf( "path" to ":", "configuration" to "riderModel" ) ) ) } }