Skip to content

Commit 5a4ecca

Browse files
committed
Refactor Renode and Dotnet package configurations to enhance build and packaging processes, including improved version handling and environment variable management.
1 parent 2b98844 commit 5a4ecca

4 files changed

Lines changed: 42 additions & 60 deletions

File tree

conanfile.py

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,51 @@
11
from conan import ConanFile
2-
from conan.tools.files import copy
2+
from conan.tools.files import copy, load
33
import os
44

5-
65
class RenodeConan(ConanFile):
76
name = "renode"
87
license = "MIT"
9-
# We are having a copy of whatever is there on Stash in github for now.
108
url = "https://stash.silabs.com/projects/EMBSW/repos/renode/browse"
119
description = "Antmicro's open source simulation and virtual development framework for complex embedded systems"
1210
topics = ("iot", "simulation", "embedded-systems", "arm", "risc-v", "x86")
1311
settings = "os", "arch"
14-
# Copy all files from source folder to build folder
1512
exports_sources = "*"
1613
user = "silabs"
17-
# At this point, we do not have a process to build renode for multiple architectures.
18-
# So we are using the build_policy missing to build it for the other architectures, on the users machine.
19-
build_policy = "missing"
14+
15+
def set_version(self):
16+
version_path = os.path.join(self.recipe_folder, "tools", "version")
17+
self.version = load(self, version_path).strip()
2018

2119
def requirements(self):
2220
self.tool_requires("dotnet_tools/8.0.409@silabs")
2321
self.tool_requires("cmake/3.27.6")
2422

25-
def set_version(self) -> None:
26-
with open(os.path.join(self.recipe_folder, "tools", "version"), "r") as f:
27-
self.version = f.read().strip()
28-
29-
def layout(self):
30-
self.folders.build = "build"
31-
32-
def build(self) -> None:
23+
def build(self):
3324
if self.settings.os == "Windows":
3425
self.run("build.cmd", cwd=self.source_folder, shell=True)
3526
else:
36-
self.run("dotnet --version")
37-
self.run("cmake --version")
38-
self.run("chmod +x build.sh", cwd=self.source_folder)
27+
self.run("dotnet --version", env="conanbuild")
28+
self.run("cmake --version", env="conanbuild")
29+
30+
build_script = os.path.join(self.source_folder, "build.sh")
31+
if not os.path.isfile(build_script):
32+
raise FileNotFoundError(f"build.sh not found at {build_script}")
33+
self.run(f"chmod +x {build_script}")
34+
3935
if self.settings.arch == "armv8":
40-
self.run("./build.sh --net --host-arch aarch64", cwd=self.source_folder)
36+
arch = "aarch64"
4137
elif self.settings.arch == "x86_64":
42-
self.run("./build.sh --net --host-arch x86_64", cwd=self.source_folder)
38+
arch = "x86_64"
4339
else:
44-
self.run("./build.sh --net --host-arch x86", cwd=self.source_folder)
40+
arch = "x86"
4541

46-
def package(self) -> None:
47-
# Copy all files from build folder to package folder
48-
copy(self, "*", self.build_folder, self.package_folder)
42+
self.run(f"{build_script} --net --host-arch {arch}", cwd=self.source_folder)
4943

50-
# Copy all files from current directory to package folder
51-
copy(self, "*", self.source_folder, self.package_folder, keep_path=True)
44+
def package(self):
45+
# Copy build output
46+
copy(self, "*", src=self.source_folder, dst=self.package_folder, keep_path=True)
5247

53-
def package_info(self) -> None:
48+
def package_info(self):
49+
renode_path = os.path.join(self.package_folder, ".")
5450
self.runenv_info.define("RENODE_HOME", self.package_folder)
55-
self.runenv_info.append_path("PATH", os.path.join(self.package_folder, "renode"))
51+
self.runenv_info.append_path("PATH", renode_path)

dot_net/conanfile.py

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,10 @@ class DotnetToolsConan(ConanFile):
99
url = "https://dotnet.microsoft.com/en-us/download/dotnet/8.0"
1010
description = ".NET 8.0 SDK"
1111
settings = "os", "arch"
12-
package_type = "application"
1312
user = "silabs"
14-
build_policy = "missing"
15-
16-
17-
def layout(self):
18-
self.folders.source = "."
19-
self.folders.build = "build"
20-
self.folders.packages = "package"
21-
22-
def requirements(self):
23-
pass # No dependenciesw
2413

2514
def build(self):
26-
# Download the correct SDK for the platform
27-
base_url = f"https://builds.dotnet.microsoft.com/dotnet/Sdk/{self.version}/"
15+
base_url = f"https://dotnetcli.azureedge.net/dotnet/Sdk/{self.version}"
2816
if self.settings.os == "Macos":
2917
if self.settings.arch == "x86_64":
3018
url = f"{base_url}/dotnet-sdk-{self.version}-osx-x64.tar.gz"
@@ -51,16 +39,13 @@ def build(self):
5139
else:
5240
raise ValueError("Unsupported OS")
5341

54-
# Use strip_root=True for tar.gz, but False for zip files to avoid ConanException
55-
if url.endswith(".zip"):
56-
get(self, url, strip_root=False, destination=self.build_folder)
57-
else:
58-
get(self, url, strip_root=True, destination=self.build_folder)
42+
# Always use strip_root=False for .NET SDK archives
43+
get(self, url, strip_root=False, keep_permissions=True)
5944

6045
def package(self):
61-
# Copy everything to the package folder
62-
copy(self, "*", src=self.build_folder, dst=os.path.join(self.package_folder, "."))
46+
copy(self, "*", src=self.source_folder, dst=self.package_folder)
6347

6448
def package_info(self):
65-
self.buildenv_info.append_path("PATH", os.path.join(self.package_folder, "."))
66-
self.runenv_info.append_path("PATH", os.path.join(self.package_folder, "."))
49+
bin_path = os.path.join(self.package_folder, ".")
50+
self.buildenv_info.append_path("PATH", bin_path)
51+
self.runenv_info.append_path("PATH", bin_path)

dot_net/test_package/conanfile.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55

66
class DotnetTestPkg(ConanFile):
7-
# Install dotnet with Conan and run the version command to make sure it boots.
8-
settings = ["os"]
7+
settings = "os", "arch"
8+
test_type = "explicit" # Explicitly define this is a test package
99

1010
def requirements(self):
11-
# This is a test package, so it must depend on the package under test.
11+
# This test package depends on the package under test
1212
self.requires(self.tested_reference_str)
1313

1414
def test(self):
15-
# Execute dotnet and make sure it runs.
1615
if can_run(self):
17-
self.run(f'dotnet --version', env="conanbuild")
18-
self.run(f'dotnet --help', env="conanbuild")
16+
self.output.info("Testing dotnet installation...")
17+
self.run("dotnet --version", env="conanrun")
18+
self.run("dotnet --help", env="conanrun")

test_package/conanfile.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
from conan.tools.files import copy
77

88
class TestRenodePackage(ConanFile):
9-
settings = ["os"]
9+
settings = "os", "arch"
10+
test_type = "explicit"
1011

1112
def requirements(self):
1213
self.requires(self.tested_reference_str)
1314
self.requires("dotnet_tools/8.0.409@silabs")
1415

1516
def test(self):
16-
renode_pkg = self.dependencies["renode"].package_folder
1717
if can_run(self):
18+
renode_pkg = self.dependencies["renode"].package_folder
1819
self.run("echo $PATH", env="conanrun")
1920
self.run("which dotnet", env="conanrun")
20-
self.run("./renode-test --help", env="conanrun", cwd=renode_pkg)
21-
self.run("./renode-test tests/unit-tests/RenodeTests/RenodeTests_NET.csproj", env="conanrun", cwd=renode_pkg)
21+
self.run("renode-test --help", env="conanrun", cwd=renode_pkg)
22+
self.run("renode-test tests/unit-tests/RenodeTests/RenodeTests_NET.csproj", env="conanrun", cwd=renode_pkg)

0 commit comments

Comments
 (0)