From 6067a41d1e6b6de77d4e6e8bf2fd4292495679dd Mon Sep 17 00:00:00 2001 From: mkuta Date: Fri, 31 May 2024 21:18:33 +0200 Subject: [PATCH 1/2] Set up example --- examples/crossbuild/WORKSPACE | 54 +++++++++++++++++++++++++++++++++++ test/shell/test_examples.sh | 7 ++++- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 examples/crossbuild/WORKSPACE diff --git a/examples/crossbuild/WORKSPACE b/examples/crossbuild/WORKSPACE new file mode 100644 index 000000000..0df5e8335 --- /dev/null +++ b/examples/crossbuild/WORKSPACE @@ -0,0 +1,54 @@ +workspace(name = "cross_build") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "bazel_skylib", + sha256 = "d00f1389ee20b60018e92644e0948e16e350a7707219e7a390fb0a99b6ec9262", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.7.0/bazel-skylib-1.7.0.tar.gz", + "/~https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.0/bazel-skylib-1.7.0.tar.gz", + ], +) + +local_repository( + name = "io_bazel_rules_scala", + path = "../..", +) + +load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") + +scala_config( + scala_version = "3.3.1", + scala_versions = [ + "2.11.12", + "2.13.12", + "3.3.1", + ], +) + +load( + "@io_bazel_rules_scala//scala:scala.bzl", + "rules_scala_setup", + "rules_scala_toolchain_deps_repositories", +) + +rules_scala_setup() + +rules_scala_toolchain_deps_repositories() + +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") + +rules_proto_dependencies() + +rules_proto_toolchains() + +load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") + +scala_register_toolchains() + +load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") + +scalatest_repositories() + +scalatest_toolchain() diff --git a/test/shell/test_examples.sh b/test/shell/test_examples.sh index fb1c9b759..23f36f874 100755 --- a/test/shell/test_examples.sh +++ b/test/shell/test_examples.sh @@ -51,10 +51,15 @@ function semanticdb_example() { test_example examples/semanticdb build_semanticdb_example } +function cross_build_example() { + test_example examples/crossbuild "bazel build //..." +} + $runner scalatest_repositories_example $runner specs2_junit_repositories_example $runner multi_framework_toolchain_example $runner semanticdb_example $runner scala3_1_example $runner scala3_2_example -$runner scala3_3_example \ No newline at end of file +$runner scala3_3_example +$runner cross_build_example \ No newline at end of file From 150744c6821cf4ad3ece1ec0e5fdb1e63aa90bcc Mon Sep 17 00:00:00 2001 From: Adam Szady Date: Fri, 31 May 2024 21:51:44 +0200 Subject: [PATCH 2/2] A few examples --- examples/crossbuild/1_single/BUILD | 25 +++++++++++++ examples/crossbuild/1_single/bin.scala | 3 ++ examples/crossbuild/1_single/lib.scala | 1 + examples/crossbuild/1_single/test.scala | 7 ++++ examples/crossbuild/2_deps/BUILD | 37 ++++++++++++++++++++ examples/crossbuild/2_deps/bin.scala | 3 ++ examples/crossbuild/2_deps/lib.scala | 1 + examples/crossbuild/2_deps/lib_default.scala | 1 + examples/crossbuild/3_select/BUILD | 35 ++++++++++++++++++ examples/crossbuild/3_select/bin.scala | 3 ++ examples/crossbuild/3_select/lib2.scala | 3 ++ examples/crossbuild/3_select/lib3.scala | 3 ++ 12 files changed, 122 insertions(+) create mode 100644 examples/crossbuild/1_single/BUILD create mode 100644 examples/crossbuild/1_single/bin.scala create mode 100644 examples/crossbuild/1_single/lib.scala create mode 100644 examples/crossbuild/1_single/test.scala create mode 100644 examples/crossbuild/2_deps/BUILD create mode 100644 examples/crossbuild/2_deps/bin.scala create mode 100644 examples/crossbuild/2_deps/lib.scala create mode 100644 examples/crossbuild/2_deps/lib_default.scala create mode 100644 examples/crossbuild/3_select/BUILD create mode 100644 examples/crossbuild/3_select/bin.scala create mode 100644 examples/crossbuild/3_select/lib2.scala create mode 100644 examples/crossbuild/3_select/lib3.scala diff --git a/examples/crossbuild/1_single/BUILD b/examples/crossbuild/1_single/BUILD new file mode 100644 index 000000000..42e14517a --- /dev/null +++ b/examples/crossbuild/1_single/BUILD @@ -0,0 +1,25 @@ +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary", "scala_library", "scala_test") + +# Here we demonstrate the simplest case, +# single binary, test or library for which we set a specific version or use the default one: + +# This one will be compiled by 2.11 compiler: +scala_library( + name = "lib211", + srcs = ["lib.scala"], + scala_version = "2.11.12", +) + +# This one will be compiled by 2.13 compiler: +scala_test( + name = "test213", + srcs = ["test.scala"], + scala_version = "2.13.12", +) + +# This one will be compiled by 3.3 compiler (the default one): +scala_binary( + name = "bin33", + srcs = ["bin.scala"], + main_class = "X", +) diff --git a/examples/crossbuild/1_single/bin.scala b/examples/crossbuild/1_single/bin.scala new file mode 100644 index 000000000..e54a43743 --- /dev/null +++ b/examples/crossbuild/1_single/bin.scala @@ -0,0 +1,3 @@ +object C extends App { + println("Hello") +} diff --git a/examples/crossbuild/1_single/lib.scala b/examples/crossbuild/1_single/lib.scala new file mode 100644 index 000000000..83d15dc73 --- /dev/null +++ b/examples/crossbuild/1_single/lib.scala @@ -0,0 +1 @@ +class A diff --git a/examples/crossbuild/1_single/test.scala b/examples/crossbuild/1_single/test.scala new file mode 100644 index 000000000..248ce536b --- /dev/null +++ b/examples/crossbuild/1_single/test.scala @@ -0,0 +1,7 @@ +import org.scalatest.flatspec.AnyFlatSpec + +class Zero extends AnyFlatSpec { + "Equality" should "be tested" in { + assert (0 == -0) + } +} diff --git a/examples/crossbuild/2_deps/BUILD b/examples/crossbuild/2_deps/BUILD new file mode 100644 index 000000000..ff04ca111 --- /dev/null +++ b/examples/crossbuild/2_deps/BUILD @@ -0,0 +1,37 @@ +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary", "scala_library") + +# Here we demonstrate how scala_version is propagated through deps. + +# This one will always be compiled by 2.11 compiler: +scala_library( + name = "lib211", + srcs = ["lib.scala"], + scala_version = "2.11.12", +) + +# This one will be compiled by 3.3 compiler (unless requested otherwise) +scala_library( + name = "lib", + srcs = ["lib_default.scala"], +) + +scala_binary( + name = "bin213", + srcs = ["bin.scala"], # compiled with 2.13 (as per `scala_version`) + main_class = "C", + scala_version = "2.13.12", + deps = [ + ":lib", # compiled 2.13 (as per `scala_version`) + ":lib211", # compiled with 2.11 (that target overrides version) + ], +) + +scala_binary( + name = "bin33", + srcs = ["bin.scala"], # compiled with 3.3 (the default) + main_class = "C", + deps = [ + ":lib", # compiled with 3.3 (default) + ":lib211", # compiled with 2.11 (that target overrides version) + ], +) diff --git a/examples/crossbuild/2_deps/bin.scala b/examples/crossbuild/2_deps/bin.scala new file mode 100644 index 000000000..f038de22a --- /dev/null +++ b/examples/crossbuild/2_deps/bin.scala @@ -0,0 +1,3 @@ +object C extends App { + println("Hello, world") +} diff --git a/examples/crossbuild/2_deps/lib.scala b/examples/crossbuild/2_deps/lib.scala new file mode 100644 index 000000000..83d15dc73 --- /dev/null +++ b/examples/crossbuild/2_deps/lib.scala @@ -0,0 +1 @@ +class A diff --git a/examples/crossbuild/2_deps/lib_default.scala b/examples/crossbuild/2_deps/lib_default.scala new file mode 100644 index 000000000..179f0d275 --- /dev/null +++ b/examples/crossbuild/2_deps/lib_default.scala @@ -0,0 +1 @@ +class B diff --git a/examples/crossbuild/3_select/BUILD b/examples/crossbuild/3_select/BUILD new file mode 100644 index 000000000..2e58b6ff4 --- /dev/null +++ b/examples/crossbuild/3_select/BUILD @@ -0,0 +1,35 @@ +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary", "scala_library") +load("@io_bazel_rules_scala//scala:scala_cross_version_select.bzl", "select_for_scala_version") + +# Here we demonstrate how to provide distinct source files depending on the version requested + +# Trying to provide library that works with all Scala versions: +scala_library( + name = "lib", + srcs = select_for_scala_version( + before_3 = [ + # for Scala version < 3 + "lib2.scala", + ], + since_3 = [ + # for 3 ≤ Scala version + "lib3.scala", + ], + ), +) + +scala_binary( + name = "bin2", + srcs = ["bin.scala"], + main_class = "B", + scala_version = "2.13.12", + deps = [":lib"], +) + +scala_binary( + name = "bin3", + srcs = ["bin.scala"], + main_class = "B", + scala_version = "3.3.1", + deps = [":lib"], +) diff --git a/examples/crossbuild/3_select/bin.scala b/examples/crossbuild/3_select/bin.scala new file mode 100644 index 000000000..6b9920b9a --- /dev/null +++ b/examples/crossbuild/3_select/bin.scala @@ -0,0 +1,3 @@ +object B extends App { + (new A).say +} diff --git a/examples/crossbuild/3_select/lib2.scala b/examples/crossbuild/3_select/lib2.scala new file mode 100644 index 000000000..ce89f3dda --- /dev/null +++ b/examples/crossbuild/3_select/lib2.scala @@ -0,0 +1,3 @@ +class A { + def say = println("Hello 2") +} diff --git a/examples/crossbuild/3_select/lib3.scala b/examples/crossbuild/3_select/lib3.scala new file mode 100644 index 000000000..77b3e1f80 --- /dev/null +++ b/examples/crossbuild/3_select/lib3.scala @@ -0,0 +1,3 @@ +class A: + def say = + println("Hello 3")