From d8b4c8e8cf66241a3ab74e051ef2c8574d9304ca Mon Sep 17 00:00:00 2001 From: Filipriec Date: Mon, 9 Mar 2026 09:06:04 +0100 Subject: [PATCH] build.zig and memory.x as ld file for tivatm4c123g --- build.zig => basics/build.zig | 4 +- basics/src/calc.zig | 16 ++++++++ basics/src/main.zig | 26 +++++++++++++ src/main.zig | 12 ------ tiva/.gitignore | 1 + tiva/build.zig | 35 +++++++++++++++++ tiva/layout.ld | 72 +++++++++++++++++++++++++++++++++++ tiva/src/main.zig | 0 8 files changed, 153 insertions(+), 13 deletions(-) rename build.zig => basics/build.zig (85%) create mode 100644 basics/src/calc.zig create mode 100644 basics/src/main.zig delete mode 100644 src/main.zig create mode 100644 tiva/.gitignore create mode 100644 tiva/build.zig create mode 100644 tiva/layout.ld create mode 100644 tiva/src/main.zig diff --git a/build.zig b/basics/build.zig similarity index 85% rename from build.zig rename to basics/build.zig index 6e74a4a..425519b 100644 --- a/build.zig +++ b/basics/build.zig @@ -5,7 +5,9 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const exe = b.addExecutable(.{ - .name = "zig-learn", + .name = "HAL-9000", + .version = "0.1.0", + .debug = true, .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, diff --git a/basics/src/calc.zig b/basics/src/calc.zig new file mode 100644 index 0000000..4cd7897 --- /dev/null +++ b/basics/src/calc.zig @@ -0,0 +1,16 @@ + +pub fn add(a: i32, b: i32) i32 { + return a + b; +} + +pub fn sub(a: i32, b: i32) i32 { + return a - b; +} + +pub fn mul(a: i32, b: i32) i32 { + return a * b; +} + +pub fn divFloor(a: i32, b: i32) i32 { + return @divFloor(a, b); +} diff --git a/basics/src/main.zig b/basics/src/main.zig new file mode 100644 index 0000000..f866f34 --- /dev/null +++ b/basics/src/main.zig @@ -0,0 +1,26 @@ +// src/main.zig +const std = @import("std"); + +fn sumUpTo(comptime n: u32) u64 { + var sum: u64 = 0; + var i: usize = 0; + while (i < n+1) : (i+=1) { + sum = sum + i; + } + return sum; +} + +fn sumUpTo2(comptime n: u32) u64 { + var sum: u64 = 0; + for (0..n + 1) |i| { + sum += i; + } + return sum; +} + +pub fn main() !void { + const r1 = comptime sumUpTo(100); + const r2 = sumUpTo2(1_000_000); + std.debug.print("{d}\n", .{r1}); + std.debug.print("{d}\n", .{r2}); +} diff --git a/src/main.zig b/src/main.zig deleted file mode 100644 index 692a40c..0000000 --- a/src/main.zig +++ /dev/null @@ -1,12 +0,0 @@ -// src/main.zig - -const std = @import("std"); - -var x: u32 = 42; -const name = "world"; -var buf: [64]u8 = undefined; -pub fn main() void { - std.debug.print("{d} {s}\n", .{x, name}); - x += 1; - std.debug.print("{d}\n", .{x}); -} diff --git a/tiva/.gitignore b/tiva/.gitignore new file mode 100644 index 0000000..1dfcbd2 --- /dev/null +++ b/tiva/.gitignore @@ -0,0 +1 @@ +.zig-cache/ diff --git a/tiva/build.zig b/tiva/build.zig new file mode 100644 index 0000000..1cb8377 --- /dev/null +++ b/tiva/build.zig @@ -0,0 +1,35 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.resolveTargetQuery(.{ + .cpu_arch = .thumb, + .os_tag = .freestanding, + .abi = .eabi, + .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 }, + }); + + const optimize = b.standardOptimizeOption(.{}); + + // Create the module separately + const tiva_module = b.createModule(.{ + .root_source_file = b.path("src/main.zig"), + .target = target, + .optimize = optimize, + }); + + const elf = b.addExecutable(.{ + .name = "tiva-app", + .root_module = tiva_module, + }); + + // Disable red zone for bare metal + elf.root_module.red_zone = false; + + // Provide basic built-in functions + elf.bundle_compiler_rt = true; + + // Use your custom linker script + elf.setLinkerScript(b.path("layout.ld")); + + b.installArtifact(elf); +} diff --git a/tiva/layout.ld b/tiva/layout.ld new file mode 100644 index 0000000..29ff8d8 --- /dev/null +++ b/tiva/layout.ld @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2018, Shawn D'silva +* All rights reserved. +* +* This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . +* +* File: TM4C123GH6PHM.ld +* Author: Shawn D'silva . +* Version: 1.0.0. +* Description: linker file for the TM4C Launchpad +*/ + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K /* FLASH size 256KB */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 32K/* RAM size 32KB */ + +} + +SECTIONS +{ + + + /* + * initial stack pointer pointing to top of stack,starts from higher addresses + * i.e ORIGIN(RAM) + LENGTH(RAM)-1 in this case 0x20007FFF to lower addesses i.e + * those lesser than 0x20007FFF to 0x2000000,which is the origina address of RAM, + * until it comes in contact with .bss or .data in which case a buffer overflow occurs + */ + PROVIDE( _stack_ptr = ORIGIN(RAM) + LENGTH(RAM)); + + /* constants and other code stored in FLASH */ + .text : + { + _text = .; /* beginning of .text segment,also called code memory */ + KEEP(*(.vector_table)) /* vector table defined in startup.c to be included */ + *(.text*) /* other code */ + *(.rodata*) /* constants go here */ + _etext = .; /* end of .text segment */ + } > FLASH + + /* data, initialized variables, to be copied to RAM upon by startup.c */ + .data : + { + _data = .; /* beginning of .data segment */ + *(.data*) /* data goes here */ + _edata = .; /* end of .data segment */ + } > RAM AT >FLASH /* .data segment starts directly after the .text section in FLASH */ + + /* uninitialized data which is initialized to 0 upon by startup.c */ + .bss : + { + _bss = .; /* beginning of .bss segment */ + *(.bss*) /* .bss content goes here */ + *(COMMON) + _ebss = .; /* end of .bss segment */ + } > RAM + + + +} diff --git a/tiva/src/main.zig b/tiva/src/main.zig new file mode 100644 index 0000000..e69de29