From be5d7022cc810dcc31f2ef14b0b1a02632f4c386 Mon Sep 17 00:00:00 2001 From: Francis Bouvier Date: Mon, 28 Oct 2024 21:08:46 +0100 Subject: [PATCH] build: support multi os/arch conf for libiconv Signed-off-by: Francis Bouvier --- Makefile | 19 +++++++++++++------ build.zig | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index a88cff4e..f84c6e83 100644 --- a/Makefile +++ b/Makefile @@ -112,7 +112,7 @@ install-netsurf: _install-netsurf install-netsurf: OPTCFLAGS := -DNDEBUG BC_NS := $(BC)vendor/netsurf -ICONV := $(BC)vendor/libiconv +ICONV := $(BC)vendor/libiconv/out/$(OS)-$(ARCH) # TODO: add Linux iconv path (I guess it depends on the distro) # TODO: this way of linking libiconv is not ideal. We should have a more generic way # and stick to a specif version. Maybe build from source. Anyway not now. @@ -169,16 +169,23 @@ test-netsurf: cd vendor/netsurf/libdom && \ BUILDDIR=$(BC_NS)/build/libdom make test -install-libiconv: -ifeq ("$(wildcard vendor/libiconv/lib/libiconv.a)","") +download-libiconv: +ifeq ("$(wildcard vendor/libiconv/libiconv-1.17)","") @mkdir -p vendor/libiconv @cd vendor/libiconv && \ curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz | tar -xvzf - - @cd vendor/libiconv/libiconv-1.17 && \ - ./configure --prefix=$(BC)vendor/libiconv --enable-static && \ - make && make install endif +install-libiconv: download-libiconv clean-libiconv + @cd vendor/libiconv/libiconv-1.17 && \ + ./configure --prefix=$(ICONV) --enable-static && \ + make && make install + +clean-libiconv: + @cd vendor/libiconv/libiconv-1.17 && \ + make clean > /dev/null && cd .. && \ + rm -Rf lib && rm -Rf share && rm -Rf bin && rm -Rf include + install-zig-js-runtime-dev: @cd vendor/zig-js-runtime && \ make install-dev diff --git a/build.zig b/build.zig index 9b356412..7b55b773 100644 --- a/build.zig +++ b/build.zig @@ -170,9 +170,23 @@ fn moduleNetSurf(b: *std.Build, target: std.Build.ResolvedTarget) !*std.Build.Mo .root_source_file = b.path("src/netsurf/netsurf.zig"), .target = target, }); + + const os = target.result.os.tag; + const arch = target.result.cpu.arch; + // iconv - mod.addObjectFile(b.path("vendor/libiconv/lib/libiconv.a")); - mod.addIncludePath(b.path("vendor/libiconv/include")); + const libiconv_lib_path = try std.fmt.allocPrint( + mod.owner.allocator, + "vendor/libiconv/out/{s}-{s}/lib/libiconv.a", + .{ @tagName(os), @tagName(arch) }, + ); + const libiconv_include_path = try std.fmt.allocPrint( + mod.owner.allocator, + "vendor/libiconv/out/{s}-{s}/lib/libiconv.a", + .{ @tagName(os), @tagName(arch) }, + ); + mod.addObjectFile(b.path(libiconv_lib_path)); + mod.addIncludePath(b.path(libiconv_include_path)); // mimalloc mod.addImport("mimalloc", (try moduleMimalloc(b, target)));