alsa-lib ported to zig-build
This commit is contained in:
		
							parent
							
								
									165abc7fbe
								
							
						
					
					
						commit
						e91610bc54
					
				
					 6 changed files with 224 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| .zig-cache/ | ||||
| zig-out/ | ||||
							
								
								
									
										11
									
								
								.mise.toml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.mise.toml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| [tools] | ||||
| zig = "0.15.1" | ||||
| zls = "0.15.0" | ||||
| pre-commit = "latest" | ||||
| "ubi:DonIsaac/zlint" = "latest" | ||||
| 
 | ||||
| [hooks] | ||||
| enter = 'echo use "nix develop" if you want to build' | ||||
| 
 | ||||
| [settings] | ||||
| experimental = true | ||||
							
								
								
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| MIT License | ||||
| 
 | ||||
| Copyright (c) 2025 Emil Lerch | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
							
								
								
									
										0
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										172
									
								
								build.zig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								build.zig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,172 @@ | |||
| const std = @import("std"); | ||||
| 
 | ||||
| pub fn build(b: *std.Build) void { | ||||
|     const target = b.standardTargetOptions(.{}); | ||||
|     const optimize = b.standardOptimizeOption(.{}); | ||||
| 
 | ||||
|     const upstream = b.dependency("alsa-lib", .{}); | ||||
| 
 | ||||
|     // Create config header matching autotools output | ||||
|     const config = b.addConfigHeader(.{ | ||||
|         .style = .blank, | ||||
|         .include_path = "config.h", | ||||
|     }, .{ | ||||
|         .PACKAGE_NAME = "alsa-lib", | ||||
|         .VERSION = "1.2.14", | ||||
|         .HAVE_USELOCALE = 1, | ||||
|         .HAVE_EACCESS = 1, | ||||
|         .HAVE_ENDIAN_H = 1, | ||||
|         .HAVE_SYS_SHM_H = 1, | ||||
|         .HAVE_MALLOC_H = 1, | ||||
|         .HAVE_LFS = 1, | ||||
|         .HAVE_LIBDL = 1, | ||||
|         .PIC = 1, | ||||
|         .BUILD_PCM = "1", | ||||
|         .BUILD_MIXER = "1", | ||||
|         .BUILD_HWDEP = "1", | ||||
|         .ALSA_DEVICE_DIRECTORY = "/dev/snd/", | ||||
|         .ALSA_CONFIG_DIR = "/usr/share/alsa", | ||||
|         .ALSA_PLUGIN_DIR = "/usr/lib/alsa-lib", | ||||
|         .SND_MAX_CARDS = 32, | ||||
|         .__SYMBOL_PREFIX = "", | ||||
|         ._GNU_SOURCE = 1, | ||||
|         .HAVE_GNU_LD = 1, | ||||
|         .HAVE_ELF = 1, | ||||
|         .HAVE_ASM_PREVIOUS_DIRECTIVE = 1, | ||||
|     }); | ||||
| 
 | ||||
|     // Create version.h | ||||
|     const version_h = b.addWriteFiles(); | ||||
|     _ = version_h.add("version.h", | ||||
|         \\/* | ||||
|         \\ *  version.h | ||||
|         \\ */ | ||||
|         \\ | ||||
|         \\#define SND_LIB_MAJOR 1 /**< major number of library version */ | ||||
|         \\#define SND_LIB_MINOR 2 /**< minor number of library version */ | ||||
|         \\#define SND_LIB_SUBMINOR 14 /**< subminor number of library version */ | ||||
|         \\#define SND_LIB_EXTRAVER 1000000 /**< extra version number, used mainly for betas */ | ||||
|         \\/** library version */ | ||||
|         \\#define SND_LIB_VER(maj, min, sub) (((maj)<<16)|((min)<<8)|(sub)) | ||||
|         \\#define SND_LIB_VERSION SND_LIB_VER(SND_LIB_MAJOR, SND_LIB_MINOR, SND_LIB_SUBMINOR) | ||||
|         \\/** library version (string) */ | ||||
|         \\#define SND_LIB_VERSION_STR "1.2.14" | ||||
|         \\ | ||||
|     ); | ||||
| 
 | ||||
|     // Generate asoundlib.h | ||||
|     const asoundlib_h = b.addWriteFiles(); | ||||
|     _ = asoundlib_h.add("asoundlib.h", | ||||
|         \\/* | ||||
|         \\ *  ALSA library - main header file | ||||
|         \\ */ | ||||
|         \\ | ||||
|         \\#ifndef __ALSA_ASOUNDLIB_H | ||||
|         \\#define __ALSA_ASOUNDLIB_H | ||||
|         \\ | ||||
|         \\#include <stdio.h> | ||||
|         \\#include <stdlib.h> | ||||
|         \\#include <string.h> | ||||
|         \\#include <fcntl.h> | ||||
|         \\#include <assert.h> | ||||
|         \\#include <endian.h> | ||||
|         \\#include <sys/poll.h> | ||||
|         \\#include <errno.h> | ||||
|         \\#include <stdint.h> | ||||
|         \\#include <sys/types.h> | ||||
|         \\#include <unistd.h> | ||||
|         \\ | ||||
|         \\#include <alsa/asoundef.h> | ||||
|         \\#include <alsa/version.h> | ||||
|         \\#include <alsa/global.h> | ||||
|         \\#include <alsa/input.h> | ||||
|         \\#include <alsa/output.h> | ||||
|         \\#include <alsa/error.h> | ||||
|         \\#include <alsa/conf.h> | ||||
|         \\#include <alsa/control.h> | ||||
|         \\#include <alsa/pcm.h> | ||||
|         \\ | ||||
|         \\#endif /* __ALSA_ASOUNDLIB_H */ | ||||
|         \\ | ||||
|     ); | ||||
| 
 | ||||
|     const lib = b.addLibrary(.{ | ||||
|         .name = "asound", | ||||
|         .linkage = .static, | ||||
|         .root_module = b.createModule(.{ | ||||
|             .target = target, | ||||
|             .optimize = optimize, | ||||
|             .link_libc = true, | ||||
|         }), | ||||
|     }); | ||||
| 
 | ||||
|     lib.addConfigHeader(config); | ||||
|     lib.addIncludePath(upstream.path("include")); | ||||
|     lib.addIncludePath(version_h.getDirectory()); | ||||
|     lib.addIncludePath(asoundlib_h.getDirectory()); | ||||
| 
 | ||||
|     // Create alsa as symlink for the include directory. Not sure why upstream | ||||
|     // does this, but since we're not using their scripts, we need to do that | ||||
|     // as well | ||||
|     const create_symlink = b.addSystemCommand(&.{ "sh", "-c", "rm -f alsa; ln -sf . alsa" }); | ||||
|     create_symlink.setCwd(upstream.path("include")); | ||||
|     lib.step.dependOn(&create_symlink.step); | ||||
| 
 | ||||
|     lib.addCSourceFiles(.{ | ||||
|         .root = upstream.path(""), | ||||
|         .files = &.{ | ||||
|             "src/conf.c", | ||||
|             "src/confeval.c", | ||||
|             "src/confmisc.c", | ||||
|             "src/input.c", | ||||
|             "src/output.c", | ||||
|             "src/async.c", | ||||
|             "src/error.c", | ||||
|             "src/dlmisc.c", | ||||
|             "src/socket.c", | ||||
|             "src/shmarea.c", | ||||
|             "src/userfile.c", | ||||
|             "src/names.c", | ||||
|             "src/control/control.c", | ||||
|             "src/control/control_hw.c", | ||||
|             "src/control/cards.c", | ||||
|             "src/control/namehint.c", | ||||
|             "src/control/hcontrol.c", | ||||
|             "src/control/tlv.c", | ||||
|             "src/control/setup.c", | ||||
|             "src/control/ctlparse.c", | ||||
|             "src/control/eld.c", | ||||
|             "src/pcm/pcm.c", | ||||
|             "src/pcm/pcm_hw.c", | ||||
|             "src/pcm/pcm_params.c", | ||||
|             "src/pcm/pcm_misc.c", | ||||
|             "src/pcm/pcm_mmap.c", | ||||
|             "src/pcm/mask.c", | ||||
|             "src/pcm/interval.c", | ||||
|         }, | ||||
|         .flags = &.{ | ||||
|             "-D_GNU_SOURCE", | ||||
|             "-DALSA_LIBRARY_BUILD", | ||||
|         }, | ||||
|     }); | ||||
| 
 | ||||
|     lib.installHeadersDirectory(upstream.path("include"), "alsa", .{ | ||||
|         .include_extensions = &.{ | ||||
|             "asoundef.h", | ||||
|             "version.h", | ||||
|             "global.h", | ||||
|             "input.h", | ||||
|             "output.h", | ||||
|             "error.h", | ||||
|             "conf.h", | ||||
|             "control.h", | ||||
|             "pcm.h", | ||||
|         }, | ||||
|     }); | ||||
| 
 | ||||
|     // Install generated asoundlib.h and version.h | ||||
|     lib.installHeader(asoundlib_h.getDirectory().path(b, "asoundlib.h"), "alsa/asoundlib.h"); | ||||
|     lib.installHeader(version_h.getDirectory().path(b, "version.h"), "alsa/version.h"); | ||||
| 
 | ||||
|     b.installArtifact(lib); | ||||
| } | ||||
							
								
								
									
										18
									
								
								build.zig.zon
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								build.zig.zon
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| .{ | ||||
|     .name = .alsa, | ||||
|     .version = "1.2.14", | ||||
|     .minimum_zig_version = "0.15.1", | ||||
|     .fingerprint = 0xddb406c516c1eb8d, | ||||
|     .dependencies = .{ | ||||
|         .@"alsa-lib" = .{ | ||||
|             .url = "git+https://github.com/alsa-project/alsa-lib?ref=v1.2.14#81d70a27136840fa8fb1bec6eb8e04fc1475a380", | ||||
|             .hash = "N-V-__8AACPMQgBfqlZq9Kx2qUwCMrZVkl-5dDd5bVDiF06E", | ||||
|         }, | ||||
|     }, | ||||
|     .paths = .{ | ||||
|         "LICENSE", | ||||
|         "README.md", | ||||
|         "build.zig", | ||||
|         "build.zig.zon", | ||||
|     }, | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue