summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/targets/zigbuild.py84
1 files changed, 66 insertions, 18 deletions
diff --git a/tools/targets/zigbuild.py b/tools/targets/zigbuild.py
index 8811639d34..26063de36e 100644
--- a/tools/targets/zigbuild.py
+++ b/tools/targets/zigbuild.py
@@ -6,11 +6,28 @@ Author: https://github.com/klivelinux
import os
import sys
import re
+import subprocess
import utils
import rtconfig
from utils import _make_path_relative
+def get_zig_version():
+ try:
+ result = subprocess.run(['zig', 'version'], capture_output=True, text=True)
+ version_str = result.stdout.strip()
+ parts = version_str.split('.')
+ major = int(parts[0])
+ minor = int(parts[1]) if len(parts) > 1 else 0
+ return (major, minor)
+ except Exception:
+ return (0, 0)
+
+
+ZIG_VERSION = get_zig_version()
+IS_ZIG_0_14_PLUS = ZIG_VERSION[0] > 0 or (ZIG_VERSION[0] == 0 and ZIG_VERSION[1] >= 14)
+
+
def GenerateCFiles(env,project):
info = utils.ProjectInfo(env)
@@ -23,12 +40,23 @@ def GenerateCFiles(env,project):
if zig_file:
zig_file.write("const std = @import(\"std\");\n\n")
- zig_file.write("const target = std.zig.CrossTarget{\n")
- zig_file.write(" .cpu_arch = {},\n".format(ARCH))
- zig_file.write(" .cpu_model = .{{ .explicit = &std.Target.{}.cpu.{} }},\n".format(rtconfig.ARCH, rtconfig.CPU.replace('-', '_')))
- zig_file.write(" .os_tag = .freestanding,\n")
- zig_file.write(" .abi = .eabi,\n")
- zig_file.write("};\n\n")
+ if IS_ZIG_0_14_PLUS:
+ zig_file.write("const target = std.Target.Query{\n")
+ zig_file.write(" .cpu_arch = {},\n".format(ARCH))
+ zig_file.write(" .cpu_model = .{{ .explicit = &std.Target.{}.cpu.{} }},\n".format(rtconfig.ARCH, rtconfig.CPU.replace('-', '_')))
+ zig_file.write(" .os_tag = .freestanding,\n")
+ if ARCH == ".thumb":
+ zig_file.write(" .abi = .eabihf,\n")
+ else:
+ zig_file.write(" .abi = .eabi,\n")
+ zig_file.write("};\n\n")
+ else:
+ zig_file.write("const target = std.zig.CrossTarget{\n")
+ zig_file.write(" .cpu_arch = {},\n".format(ARCH))
+ zig_file.write(" .cpu_model = .{{ .explicit = &std.Target.{}.cpu.{} }},\n".format(rtconfig.ARCH, rtconfig.CPU.replace('-', '_')))
+ zig_file.write(" .os_tag = .freestanding,\n")
+ zig_file.write(" .abi = .eabi,\n")
+ zig_file.write("};\n\n")
zig_file.write("const c_includes = [_][]const u8{\n")
for i in info['CPPPATH']:
@@ -60,20 +88,34 @@ def GenerateCFiles(env,project):
zig_file.write("};\n\n")
zig_file.write("pub fn build(b: *std.Build) void {\n")
- zig_file.write(" const optimize = .ReleaseSafe;\n\n")
+ zig_file.write(" const optimize = .ReleaseSmall;\n\n")
- zig_file.write(" const elf = b.addExecutable(.{\n")
- zig_file.write(" .name = \"rtthread.elf\",\n")
- zig_file.write(" .target = b.resolveTargetQuery(target),\n")
- zig_file.write(" .optimize = optimize,\n")
- zig_file.write(" .strip = false,\n")
- zig_file.write(" });\n\n")
- zig_file.write(" elf.entry = .{ .symbol_name = \"Reset_Handler\" };\n\n")
+ if IS_ZIG_0_14_PLUS:
+ zig_file.write(" const root_module = b.createModule(.{\n")
+ zig_file.write(" .root_source_file = null,\n")
+ zig_file.write(" .target = b.resolveTargetQuery(target),\n")
+ zig_file.write(" .optimize = optimize,\n")
+ zig_file.write(" .strip = false,\n")
+ zig_file.write(" });\n\n")
+
+ zig_file.write(" root_module.addCSourceFiles(.{ .files = &c_sources, .flags = &c_flags });\n")
+ zig_file.write(" for (c_includes) |include| {\n")
+ zig_file.write(" root_module.addIncludePath(b.path(include));\n")
+ zig_file.write(" }\n\n")
- zig_file.write(" elf.addCSourceFiles(.{ .files = &c_sources, .flags = &c_flags });\n")
- zig_file.write(" for (c_includes) |include| {\n")
- zig_file.write(" elf.addIncludePath(b.path(include));\n")
- zig_file.write(" }\n\n")
+ zig_file.write(" const elf = b.addExecutable(.{\n")
+ zig_file.write(" .name = \"rtthread.elf\",\n")
+ zig_file.write(" .root_module = root_module,\n")
+ zig_file.write(" });\n\n")
+ else:
+ zig_file.write(" const elf = b.addExecutable(.{\n")
+ zig_file.write(" .name = \"rtthread.elf\",\n")
+ zig_file.write(" .target = b.resolveTargetQuery(target),\n")
+ zig_file.write(" .optimize = optimize,\n")
+ zig_file.write(" .strip = false,\n")
+ zig_file.write(" });\n\n")
+
+ zig_file.write(" elf.entry = .{ .symbol_name = \"Reset_Handler\" };\n\n")
# find link script in rtconfig.LFLAGS
LINK_SCRIPT = re.search(r'-T\s*(\S+)', LFLAGS)
@@ -93,6 +135,12 @@ def GenerateCFiles(env,project):
return
def ZigBuildProject(env,project):
+ version_str = "{}.{}".format(ZIG_VERSION[0], ZIG_VERSION[1])
+ print('Detected Zig version: {}'.format(version_str))
+ if IS_ZIG_0_14_PLUS:
+ print('Using Zig 0.14+ compatible build configuration')
+ else:
+ print('Using legacy build configuration')
print('Update setting files for build.zig...')
GenerateCFiles(env,project)
print('Done!')