From e1bdad1ed4220b2393a7c51d3c77552a2cf41768 Mon Sep 17 00:00:00 2001 From: pkova Date: Thu, 17 Oct 2024 19:02:32 +0300 Subject: [PATCH] build: merge develop to next/kelvin/410, convert lagoon to zig build --- build.zig | 9 +++++ build.zig.zon | 3 ++ ext/softblas/build.zig | 80 ++++++++++++++++++++++++++++++++++++++ ext/softblas/build.zig.zon | 16 ++++++++ pkg/noun/jets/e/crc32.c | 2 +- pkg/noun/jets/i/lagoon.c | 7 ++-- 6 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 ext/softblas/build.zig create mode 100644 ext/softblas/build.zig.zon diff --git a/build.zig b/build.zig index e6f1b25970..815aedeb69 100644 --- a/build.zig +++ b/build.zig @@ -283,6 +283,11 @@ fn build_single( .optimize = optimize, }); + const softblas = b.dependency("softblas", .{ + .target = target, + .optimize = optimize, + }); + const softfloat = b.dependency("softfloat", .{ .target = target, .optimize = optimize, @@ -485,10 +490,12 @@ fn build_single( pkg_noun.linkLibrary(pdjson.artifact("pdjson")); pkg_noun.linkLibrary(sigsegv.artifact("sigsegv")); pkg_noun.linkLibrary(softfloat.artifact("softfloat")); + pkg_noun.linkLibrary(softblas.artifact("softblas")); if (t.os.tag == .linux) pkg_noun.linkLibrary(unwind.artifact("unwind")); pkg_noun.linkLibrary(urcrypt.artifact("urcrypt")); pkg_noun.linkLibrary(whereami.artifact("whereami")); + pkg_noun.linkLibrary(zlib.artifact("z")); pkg_noun.linkLibC(); pkg_noun.addIncludePath(b.path("pkg/noun")); @@ -615,6 +622,7 @@ fn build_single( "jets/e/argon2.c", "jets/e/base.c", "jets/e/blake.c", + "jets/e/crc32.c", "jets/e/cue.c", "jets/e/ed_add_double_scalarmult.c", "jets/e/ed_add_scalarmult_scalarmult_base.c", @@ -678,6 +686,7 @@ fn build_single( "jets/f/ut_mull.c", "jets/f/ut_nest.c", "jets/f/ut_rest.c", + "jets/i/lagoon.c", "jets/tree.c", "log.c", "manage.c", diff --git a/build.zig.zon b/build.zig.zon index f39c710e39..3f6a8c07b7 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -49,6 +49,9 @@ .softfloat = .{ .path = "./ext/softfloat", }, + .softblas = .{ + .path = "./ext/softblas", + }, .unwind = .{ .path = "./ext/unwind", }, diff --git a/ext/softblas/build.zig b/ext/softblas/build.zig new file mode 100644 index 0000000000..1fb3b066b5 --- /dev/null +++ b/ext/softblas/build.zig @@ -0,0 +1,80 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const lib = b.addStaticLibrary(.{ + .name = "softblas", + .target = target, + .optimize = optimize, + }); + + const dep_c = b.dependency("softblas", .{ + .target = target, + .optimize = optimize, + }); + + const softfloat = b.dependency("softfloat", .{ + .target = target, + .optimize = optimize, + }); + + lib.addIncludePath(dep_c.path("include")); + + lib.addCSourceFiles(.{ + .root = dep_c.path(""), + .files = &.{ + "src/softblas_state.c", + "src/blas/level1/sasum.c", + "src/blas/level1/dasum.c", + "src/blas/level1/hasum.c", + "src/blas/level1/qasum.c", + "src/blas/level1/saxpy.c", + "src/blas/level1/daxpy.c", + "src/blas/level1/haxpy.c", + "src/blas/level1/qaxpy.c", + "src/blas/level1/scopy.c", + "src/blas/level1/dcopy.c", + "src/blas/level1/hcopy.c", + "src/blas/level1/qcopy.c", + "src/blas/level1/sdot.c", + "src/blas/level1/ddot.c", + "src/blas/level1/hdot.c", + "src/blas/level1/qdot.c", + "src/blas/level1/snrm2.c", + "src/blas/level1/dnrm2.c", + "src/blas/level1/hnrm2.c", + "src/blas/level1/qnrm2.c", + "src/blas/level1/sscal.c", + "src/blas/level1/dscal.c", + "src/blas/level1/hscal.c", + "src/blas/level1/qscal.c", + "src/blas/level1/sswap.c", + "src/blas/level1/dswap.c", + "src/blas/level1/hswap.c", + "src/blas/level1/qswap.c", + "src/blas/level1/isamax.c", + "src/blas/level1/idamax.c", + "src/blas/level1/ihamax.c", + "src/blas/level1/iqamax.c", + "src/blas/level2/sgemv.c", + "src/blas/level2/dgemv.c", + "src/blas/level2/hgemv.c", + "src/blas/level2/qgemv.c", + "src/blas/level3/sgemm.c", + "src/blas/level3/dgemm.c", + "src/blas/level3/hgemm.c", + "src/blas/level3/qgemm.c", + }, + .flags = &.{ + "-fno-sanitize=all", + }, + }); + + lib.installHeader(dep_c.path("include/softblas.h"), "softblas.h"); + + lib.linkLibC(); + lib.linkLibrary(softfloat.artifact("softfloat")); + b.installArtifact(lib); +} diff --git a/ext/softblas/build.zig.zon b/ext/softblas/build.zig.zon new file mode 100644 index 0000000000..431171b53b --- /dev/null +++ b/ext/softblas/build.zig.zon @@ -0,0 +1,16 @@ +.{ + .name = "softblas", + .version = "0.0.1", + .dependencies = .{ + .softfloat = .{ + .path = "../softfloat", + }, + .softblas = .{ + .url = "https://github.com/urbit/SoftBLAS/archive/cbffb33f19ea02f9ffbd184d445123c57929ec53.tar.gz", + .hash = "1220617c11d869ef2316571a430f51f93470e2d714141deb3bdfaa6b578cf151f258", + }, + }, + .paths = .{ + "", + }, +} diff --git a/pkg/noun/jets/e/crc32.c b/pkg/noun/jets/e/crc32.c index 1afc473a30..0daa032c7f 100644 --- a/pkg/noun/jets/e/crc32.c +++ b/pkg/noun/jets/e/crc32.c @@ -21,7 +21,7 @@ u3qe_crc32(u3_noun input_octs) c3_y* input; if (c3y == u3a_is_cat(tail)) { - input = &tail; + input = (c3_y*)&tail; } else { u3a_atom* vat_u = u3a_to_ptr(tail); diff --git a/pkg/noun/jets/i/lagoon.c b/pkg/noun/jets/i/lagoon.c index 13c0f2a138..6d2c3edb43 100644 --- a/pkg/noun/jets/i/lagoon.c +++ b/pkg/noun/jets/i/lagoon.c @@ -3,6 +3,8 @@ #include "jets/q.h" #include "jets/w.h" +#include "c3/c3.h" + #include "noun.h" #include "softfloat.h" #include "softblas.h" @@ -1628,7 +1630,7 @@ for (c3_d i = 0; i < len_x; i++) { float32_t x_val32 = ((float32_t*)x_bytes)[i]; // Perform division x/n - float32_t div_result32 = f32_mul((float32_t)in32, (float32_t)x_val32); + float32_t div_result32 = f32_mul(in32, x_val32); // Compute floor of the division result c3_ds floor_result32 = f32_to_i64(div_result32, softfloat_round_minMag, false); float32_t floor_float32 = i64_to_f32(floor_result32); @@ -3284,13 +3286,12 @@ { return u3m_bail(c3__exit); } else { - u3_noun x_shape, x_bloq, x_kind, x_tail, + u3_noun x_shape, x_bloq, x_kind, y_shape, rnd; x_shape = u3h(x_meta); // 2 x_bloq = u3h(u3t(x_meta)); // 6 x_kind = u3h(u3t(u3t(x_meta))); // 14 - x_tail = u3t(u3t(u3t(x_meta))); // 15 y_shape = u3h(y_meta); // 2 rnd = u3h(u3t(u3t(u3t(cor)))); // 30 if ( c3n == _check(u3nc(x_meta, x_data)) ||