All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.library.KotlinLibraryLayout.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/**
 * Copyright 2010-2019 JetBrains s.r.o.
 *
 * 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.
 */

package org.jetbrains.kotlin.library

import org.jetbrains.kotlin.konan.file.File

const val KLIB_MANIFEST_FILE_NAME = "manifest"
const val KLIB_MODULE_METADATA_FILE_NAME = "module"
const val KLIB_IR_FOLDER_NAME = "ir"

/**
 * This scheme describes the Kotlin/Native Library (KLIB) layout.
 */
interface KotlinLibraryLayout {
    val libDir: File
    val libraryName: String
        get() = libDir.path
    val component: String?
    val componentDir: File
        get() = File(libDir, component!!)
    val manifestFile
        get() = File(componentDir, KLIB_MANIFEST_FILE_NAME)
    val resourcesDir
        get() = File(componentDir, "resources")
    val pre_1_4_manifest: File
        get() = File(libDir, KLIB_MANIFEST_FILE_NAME)
}

interface MetadataKotlinLibraryLayout : KotlinLibraryLayout {
    val metadataDir
        get() = File(componentDir, "linkdata")
    val moduleHeaderFile
        get() = File(metadataDir, KLIB_MODULE_METADATA_FILE_NAME)

    fun packageFragmentsDir(packageName: String) =
        File(metadataDir, if (packageName == "") "root_package" else "package_$packageName")

    fun packageFragmentFile(packageFqName: String, partName: String) =
        File(packageFragmentsDir(packageFqName), "$partName$KLIB_METADATA_FILE_EXTENSION_WITH_DOT")
}

interface IrKotlinLibraryLayout : KotlinLibraryLayout {
    val irDir
        get() = File(componentDir, KLIB_IR_FOLDER_NAME)
    val irDeclarations
        get() = File(irDir, "irDeclarations.knd")
    val irTypes
        get() = File(irDir, "types.knt")
    val irSignatures
        get() = File(irDir, "signatures.knt")
    val irStrings
        get() = File(irDir, "strings.knt")
    val irBodies
        get() = File(irDir, "bodies.knb")
    val irFiles
        get() = File(irDir, "files.knf")
    val dataFlowGraphFile
        get() = File(irDir, "module_data_flow_graph")

    fun irDeclarations(file: File): File = File(file, "irCombined.knd")
    fun irTypes(file: File): File = File(file, "types.knt")
    fun irSignatures(file: File): File = File(file, "signatures.knt")
    fun irStrings(file: File): File = File(file, "strings.knt")
    fun irBodies(file: File): File = File(file, "body.knb")
    fun irFile(file: File): File = File(file, "file.knf")
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy