Skip to content

How to config buck2 to build a hello-world kotlin-library #1267

@huhuang03

Description

@huhuang03

I want build a hello-world kotlin, but failed. The error msg:

D:\repo (HEAD)> buck2 log what-failed
Showing commands from: "D:\\bin\\buck2.exe" build //buck-hello/kotlin:hello
build   root//buck-hello/kotlin:hello_lib (prelude//platforms:default#97667764a66ee3d4) (kotlincd_jar)  local   env --chdir="$(buck2 root --kind project)" -- "TEMP=D:\\repo\\buck-out\\v2\\tmp\\root\\0fb9d7d3017e3330\\kotlincd_jar" "TMP=D:\\repo\\buck-out\\v2\\tmp\\root\\0fb9d7d3017e3330\\kotlincd_jar" "BUCK_CLASSPATH=buck-out\\v2\\gen\\prelude\\97667764a66ee3d4\\toolchains\\android\\src\\com\\facebook\\buck\\jvm\\kotlin\\cd\\workertool\\__kotlincd_tool__\\kotlincd_tool.jar" "BUCK_SCRATCH_PATH=buck-out\\v2\\tmp\\root\\0fb9d7d3017e3330\\kotlincd_jar" 'JAVACD_ABSOLUTE_PATHS_ARE_RELATIVE_TO_CWD=1' 'BUCK2_DAEMON_UUID=ee027bd7-52a3-4370-9ca1-cdae13bce432' 'BUCK_BUILD_ID=b06e3abc-0820-44af-b5a4-2128e9de2edf' C:/Users/huhua/AppData/Local/mise/installs/java/21.0.2/bin/java -XX:-MaxFDLimit '--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED' '--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED' -cp "buck-out\\v2\\gen\\prelude\\97667764a66ee3d4\\toolchains\\android\\src\\com\\facebook\\buck\\jvm\\kotlin\\cd\\workertool\\__kotlincd_tool__\\kotlincd_tool.jar" -jar "buck-out\\v2\\gen\\prelude\\97667764a66ee3d4\\toolchains\\android\\src\\com\\facebook\\buck\\cli\\bootstrapper\\__bootstrapper__\\bootstrapper.jar" com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain --action-id root//buck-hello/kotlin:hello_lib --command-file "buck-out\\v2\\gen\\root\\97667764a66ee3d4\\buck-hello\\kotlin\\__hello_lib__\\jar_command.proto.json"

And my bzl:

kotlin_library(
  name = "hello_lib",
  srcs = glob(["*.kt"])
)

java_binary(
  name="hello",
  main_class = "HelloKt",
  deps = [
    ":hello_lib"
  ]
)

toolchain:

load("@prelude//toolchains:demo.bzl", "system_demo_toolchains")

# All the default toolchains, suitable for a quick demo or early prototyping.
# Most real projects should copy/paste the implementation to configure them.
system_demo_toolchains()

.buckconfig.local

[java]
  java_home = C:/Users/xxx/some_installed/java/21.0.2

After some check, I found that it use -cp "buck-out\\v2\\gen\\prelude\\97667764a66ee3d4\\toolchains\\android\\src\\com\\facebook\\buck\\jvm\\kotlin\\cd\\workertool\\__kotlincd_tool__\\kotlincd_tool.jar" with main class: com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain

But com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain is in kotilncd_tool-main.jar not kotlincd_tool.jar, prelude/toolchains/android/src/com/facebook/buck/jvm/toolchain/cd/worktool/BUCK:

buck_java_binary(
    name = "kotlincd_tool-main",
    main_class = "com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain",
    visibility = [
        "PUBLIC",
    ],
    deps = [
        ":main_lib",
    ],
)

buck_java_binary(
    name = "kotlincd_tool",
    main_class = "com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDGrpcWorkerToolMain",
    visibility = [
        "PUBLIC",
    ],
    deps = [
        ":grpc_worker_tool_lib",
    ],
)

And prelude/toolchains/kotlin.bzl:

def kotlincd_toolchain(
        name,
        visibility = None):
    _kotlin_toolchain_rule(
        name = name,
        annotation_processing_jar = "prelude//toolchains/android/third-party:kotlin-annotation-processing-embeddable",
        class_loader_bootstrapper = "prelude//toolchains/android/src/com/facebook/buck/cli/bootstrapper:bootstrapper",
        compile_kotlin = "prelude//kotlin/tools/compile_kotlin:compile_kotlin",
        dep_files = "none",
        kapt_base64_encoder = "prelude//kotlin/tools/kapt_base64_encoder:kapt_base64_encoder",
        kotlin_stdlib = "prelude//toolchains/android/third-party:kotlin-stdlib",
        kotlin_version = "2.0.0",
        kotlin_home_libraries = [
            "prelude//toolchains/android/third-party:kotlin-annotations",
            "prelude//toolchains/android/third-party:kotlin-build-tools-impl",
            "prelude//toolchains/android/third-party:kotlin-daemon-client",
            "prelude//toolchains/android/third-party:kotlin-compiler-embeddable",
            "prelude//toolchains/android/third-party:kotlin-reflect",
            "prelude//toolchains/android/third-party:kotlin-script-runtime",
            "prelude//toolchains/android/third-party:kotlin-stdlib",
            "prelude//toolchains/android/third-party:trove",
            "prelude//toolchains/android/third-party:kotlinx-coroutines-core-jvm",
        ],
        kotlinc = "prelude//toolchains/android/third-party:kotlin-compiler-binary",
        kotlincd = "prelude//toolchains/android/src/com/facebook/buck/jvm/kotlin/cd/workertool:kotlincd_tool",
        kotlinc_protocol = "kotlincd",
        kotlincd_main_class = "com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain",
        visibility = visibility,
    )

It used kotlincd = "prelude//toolchains/android/src/com/facebook/buck/jvm/kotlin/cd/workertool:kotlincd_tool", with main kotlincd_main_class = "com.facebook.buck.jvm.kotlin.cd.workertool.KotlinCDMain", seems like mismatch.

So how can I fix the error...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions