Skip to content

Commit b28a97b

Browse files
evelanceOpvolger
authored andcommitted
Meta: Add build support for RISC-V (riscv64)
Co-authored-by: Bas M. <bas@opvolger.net>
1 parent 5b2a71a commit b28a97b

File tree

9 files changed

+34
-8
lines changed

9 files changed

+34
-8
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
2+
set(VCPKG_TARGET_ARCHITECTURE riscv64)
3+
set(VCPKG_CRT_LINKAGE dynamic)
4+
set(VCPKG_FIXUP_ELF_RPATH ON)
5+
6+
include(${CMAKE_CURRENT_LIST_DIR}/base.cmake)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include (${CMAKE_CURRENT_LIST_DIR}/../base-triplets/riscv64-linux.cmake)
2+
include (${CMAKE_CURRENT_LIST_DIR}/debug.cmake)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include (${CMAKE_CURRENT_LIST_DIR}/../base-triplets/riscv64-linux.cmake)
2+
include (${CMAKE_CURRENT_LIST_DIR}/distribution.cmake)

Meta/CMake/vcpkg/generate_vcpkg_toolchain_variables.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ if (NOT DEFINED CACHE{VCPKG_TARGET_TRIPLET} AND NOT DEFINED CACHE{VCPKG_HOST_TRI
4949
cmake_host_system_information(RESULT os_name QUERY OS_NAME)
5050

5151
if(os_platform MATCHES "^(x86_64|AMD64|amd64)$")
52-
set(arch x64)
52+
set(arch x64)
53+
elseif(os_platform STREQUAL "riscv64")
54+
set(arch riscv64)
5355
elseif(os_platform MATCHES "^(aarch64|arm64|ARM64)$")
5456
set(arch arm64)
5557
else()

Meta/CMake/vcpkg/overlay-ports/angle/portfile.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
77
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
88
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
99
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
10+
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "riscv64")
11+
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
1012
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
1113
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
1214
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include (${CMAKE_CURRENT_LIST_DIR}/../base-triplets/riscv64-linux.cmake)
2+
include (${CMAKE_CURRENT_LIST_DIR}/release.cmake)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include (${CMAKE_CURRENT_LIST_DIR}/../base-triplets/riscv64-linux.cmake)
2+
include (${CMAKE_CURRENT_LIST_DIR}/sanitizer.cmake)

Meta/host_platform.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
class HostArchitecture(enum.IntEnum):
1313
x86_64 = enum.auto()
14+
riscv64 = enum.auto()
1415
AArch64 = enum.auto()
1516

1617

@@ -39,6 +40,8 @@ def __init__(self):
3940
self.architecture = platform.machine().lower()
4041
if self.architecture in ("x86_64", "amd64"):
4142
self.host_architecture = HostArchitecture.x86_64
43+
elif self.architecture == "riscv64":
44+
self.host_architecture = HostArchitecture.riscv64
4245
elif self.architecture in ("aarch64", "arm64"):
4346
self.host_architecture = HostArchitecture.AArch64
4447
else:

Meta/ladybird.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,12 @@ def main():
175175
build_main(build_dir, args.jobs, args.target, args.args)
176176
build_main(build_dir, args.jobs, "install", args.args)
177177
elif args.command == "vcpkg":
178-
configure_build_env(args.preset)
178+
configure_build_env(platform, args.preset)
179179
build_vcpkg()
180180
elif args.command == "clean":
181-
clean_main(args.preset)
181+
clean_main(platform, args.preset)
182182
elif args.command == "rebuild":
183-
clean_main(args.preset)
183+
clean_main(platform, args.preset)
184184
build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
185185
build_main(build_dir, args.jobs, args.target, args.args)
186186
elif args.command == "addr2line":
@@ -190,7 +190,7 @@ def main():
190190

191191

192192
def configure_main(platform: Platform, preset: str, cc: str, cxx: str) -> Path:
193-
ladybird_source_dir, build_preset_dir = configure_build_env(preset)
193+
ladybird_source_dir, build_preset_dir = configure_build_env(platform, preset)
194194
build_vcpkg()
195195

196196
if build_preset_dir.joinpath("build.ninja").exists() or build_preset_dir.joinpath("ladybird.sln").exists():
@@ -265,7 +265,7 @@ def configure_skia_jemalloc() -> list[str]:
265265
return cmake_args
266266

267267

268-
def configure_build_env(preset: str) -> tuple[Path, Path]:
268+
def configure_build_env(platform: Platform, preset: str) -> tuple[Path, Path]:
269269
ladybird_source_dir = ensure_ladybird_source_dir()
270270
build_root_dir = ladybird_source_dir / "Build"
271271

@@ -289,6 +289,11 @@ def configure_build_env(preset: str) -> tuple[Path, Path]:
289289
os.environ["PATH"] += os.pathsep + str(ladybird_source_dir.joinpath("Toolchain", "Local", "cmake", "bin"))
290290
os.environ["PATH"] += os.pathsep + vcpkg_root
291291
os.environ["VCPKG_ROOT"] = vcpkg_root
292+
if platform.host_architecture == HostArchitecture.riscv64:
293+
# vcpkg refuses to build ports on riscv64 and other less common architectures without this flag.
294+
# With it set vcpkg will use the system provided CMake and Ninja binaries but will still download,
295+
# build and use its own pinned versions of gn, meson and pkg-config.
296+
os.environ["VCPKG_FORCE_SYSTEM_BINARIES"] = "1"
292297

293298
return ladybird_source_dir, build_preset_dir
294299

@@ -417,8 +422,8 @@ def profile_main(host_system: HostSystem, build_dir: Path, target: str, args: li
417422
run_command(valgrind_args, exit_on_failure=True)
418423

419424

420-
def clean_main(preset: str):
421-
ladybird_source_dir, build_preset_dir = configure_build_env(preset)
425+
def clean_main(platform: Platform, preset: str):
426+
ladybird_source_dir, build_preset_dir = configure_build_env(platform, preset)
422427
shutil.rmtree(str(build_preset_dir), ignore_errors=True)
423428

424429
user_vars_cmake_module = ladybird_source_dir.joinpath("Meta", "CMake", "vcpkg", "user-variables.cmake")

0 commit comments

Comments
 (0)