feat: initialize modules setup w/ Nix
This commit is contained in:
		
				commit
				
					
						a42efe2c82
					
				
			
		
					 8 changed files with 298 additions and 0 deletions
				
			
		
							
								
								
									
										11
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | cmake_minimum_required(VERSION 3.28) | ||||||
|  | project(ModulesHelloWorld CXX) | ||||||
|  | 
 | ||||||
|  | set(CMAKE_CXX_EXTENSIONS OFF) | ||||||
|  | set(CMAKE_CXX_STANDARD 23) | ||||||
|  | 
 | ||||||
|  | add_library(lib) | ||||||
|  | target_sources(lib PUBLIC FILE_SET CXX_MODULES FILES lib.cxx) | ||||||
|  | 
 | ||||||
|  | add_executable(hellomodules main.cxx) | ||||||
|  | target_link_libraries(hellomodules lib) | ||||||
							
								
								
									
										21
									
								
								CMakePresets.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								CMakePresets.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | { | ||||||
|  |     "version": 6, | ||||||
|  |     "cmakeMinimumRequired": { | ||||||
|  |         "major": 3, | ||||||
|  |         "minor": 28, | ||||||
|  |         "patch": 0 | ||||||
|  |     }, | ||||||
|  |     "configurePresets": [ | ||||||
|  |         { | ||||||
|  |             "name": "linux-default", | ||||||
|  |             "displayName": "Debug", | ||||||
|  |             "description": "Sets Ninja generator, compilers, build and install directory, debug build type", | ||||||
|  |             "generator": "Ninja", | ||||||
|  |             "binaryDir": "${sourceDir}/out/build/${presetName}", | ||||||
|  |             "cacheVariables": { | ||||||
|  |                 "CMAKE_BUILD_TYPE": "Debug", | ||||||
|  |                 "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ] | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								flake.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								flake.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | ||||||
|  | { | ||||||
|  |   "nodes": { | ||||||
|  |     "flake-utils": { | ||||||
|  |       "inputs": { | ||||||
|  |         "systems": "systems" | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1726560853, | ||||||
|  |         "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "numtide", | ||||||
|  |         "repo": "flake-utils", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "nixpkgs": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1728492678, | ||||||
|  |         "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=", | ||||||
|  |         "owner": "nixos", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "nixos", | ||||||
|  |         "ref": "nixos-unstable", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "root": { | ||||||
|  |       "inputs": { | ||||||
|  |         "flake-utils": "flake-utils", | ||||||
|  |         "nixpkgs": "nixpkgs" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "systems": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1681028828, | ||||||
|  |         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||||
|  |         "owner": "nix-systems", | ||||||
|  |         "repo": "default", | ||||||
|  |         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "nix-systems", | ||||||
|  |         "repo": "default", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "root": "root", | ||||||
|  |   "version": 7 | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								flake.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								flake.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,51 @@ | ||||||
|  | { | ||||||
|  |   inputs = { | ||||||
|  |     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; | ||||||
|  |     flake-utils.url = "github:numtide/flake-utils"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   outputs = { | ||||||
|  |     self, | ||||||
|  |     nixpkgs, | ||||||
|  |     flake-utils, | ||||||
|  |   }: | ||||||
|  |     flake-utils.lib.eachDefaultSystem (system: let | ||||||
|  |       pkgs = nixpkgs.legacyPackages.${system}; | ||||||
|  |       inherit (pkgs.llvmPackages_19) stdenv; | ||||||
|  | 
 | ||||||
|  |       gooey = stdenv.mkDerivation { | ||||||
|  |         pname = "gooey"; | ||||||
|  |         version = "0.0.1"; | ||||||
|  |         # inherit system; | ||||||
|  | 
 | ||||||
|  |         src = ./.; | ||||||
|  |         buildInputs = [ | ||||||
|  |           pkgs.cmake | ||||||
|  |           pkgs.ninja | ||||||
|  | 
 | ||||||
|  |           (pkgs.callPackage ./nix/SDL3.nix {}) | ||||||
|  |           pkgs.llvmPackages_19.clang-tools | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         configurePhase = '' | ||||||
|  |           cmake -GNinja . | ||||||
|  |         ''; | ||||||
|  | 
 | ||||||
|  |         buildPhase = '' | ||||||
|  |           ninja | ||||||
|  |         ''; | ||||||
|  | 
 | ||||||
|  |         installPhase = '' | ||||||
|  |           mkdir -p $out/bin | ||||||
|  |           mv gooey $out/bin | ||||||
|  |         ''; | ||||||
|  |       }; | ||||||
|  |     in { | ||||||
|  |       packages.default = gooey; | ||||||
|  |       devShells.default = pkgs.mkShell { | ||||||
|  |         name = "gooey"; | ||||||
|  |         inputsFrom = [gooey]; | ||||||
|  |         CMAKE_GENERATOR = "Ninja"; | ||||||
|  |       }; | ||||||
|  |     }); | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								lib.cxx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lib.cxx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | // Global module fragment, where #includes can happen
 | ||||||
|  | module; | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | export module lib; | ||||||
|  | 
 | ||||||
|  | export class lib | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     lib(); | ||||||
|  |     ~lib(); | ||||||
|  |     void helloworld(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | lib::lib() = default; | ||||||
|  | lib::~lib() = default; | ||||||
|  | 
 | ||||||
|  | void lib::helloworld() | ||||||
|  | { | ||||||
|  |     std::cout << "Hello world!" << std::endl; | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								main.cxx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								main.cxx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | import lib; | ||||||
|  | 
 | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |     lib lib{}; | ||||||
|  |     lib.helloworld(); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | From 1999109df34e67ed7c34d2b6b42f59feafc22bf1 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: seth <getchoo@tuta.io> | ||||||
|  | Date: Fri, 12 Jul 2024 21:59:14 -0400 | ||||||
|  | Subject: [PATCH] cmake: use `FULL` install directory variants in pkg-config | ||||||
|  |  file | ||||||
|  | 
 | ||||||
|  | Instead of manually prepending the install prefix to | ||||||
|  | `CMAKE_INSTALL_<dir>` (which may already be an absolute path), we can | ||||||
|  | let cmake do it for us | ||||||
|  | ---
 | ||||||
|  |  cmake/sdl3.pc.in | 4 ++-- | ||||||
|  |  1 file changed, 2 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/cmake/sdl3.pc.in b/cmake/sdl3.pc.in
 | ||||||
|  | index bfc2afffe..3724d6cf8 100644
 | ||||||
|  | --- a/cmake/sdl3.pc.in
 | ||||||
|  | +++ b/cmake/sdl3.pc.in
 | ||||||
|  | @@ -1,7 +1,7 @@
 | ||||||
|  |  prefix=@SDL_PKGCONFIG_PREFIX@ | ||||||
|  |  exec_prefix=${prefix} | ||||||
|  | -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
 | ||||||
|  | -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
 | ||||||
|  | +libdir=@CMAKE_INSTALL_FULL_LIBDIR@
 | ||||||
|  | +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
 | ||||||
|  |   | ||||||
|  |  Name: sdl3 | ||||||
|  |  Description: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. | ||||||
|  | -- 
 | ||||||
|  | 2.45.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										95
									
								
								nix/SDL3.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								nix/SDL3.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,95 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   stdenv, | ||||||
|  |   fetchFromGitHub, | ||||||
|  |   alsa-lib, | ||||||
|  |   cmake, | ||||||
|  |   darwin, | ||||||
|  |   dbus, | ||||||
|  |   fcitx5, | ||||||
|  |   libdecor, | ||||||
|  |   libdrm, | ||||||
|  |   libjack2, | ||||||
|  |   libpulseaudio, | ||||||
|  |   libxkbcommon, | ||||||
|  |   mesa, | ||||||
|  |   nas, | ||||||
|  |   ninja, | ||||||
|  |   pipewire, | ||||||
|  |   sndio, | ||||||
|  |   systemdLibs, | ||||||
|  |   testers, | ||||||
|  |   validatePkgConfig, | ||||||
|  |   wayland, | ||||||
|  |   xorg, | ||||||
|  | }: | ||||||
|  | stdenv.mkDerivation (finalAttrs: { | ||||||
|  |   pname = "sdl3"; | ||||||
|  |   version = "3.1.2-unstable-2024-08-01"; | ||||||
|  | 
 | ||||||
|  |   src = fetchFromGitHub { | ||||||
|  |     owner = "libsdl-org"; | ||||||
|  |     repo = "SDL"; | ||||||
|  |     rev = "f01d4278c66e065e64bc934cd01e4f2952f613d7"; | ||||||
|  |     hash = "sha256-ok3ortmy5dm3zZdH+3tAvOIRDrDxDDXBjxBC3nGdHDM="; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   patches = [ | ||||||
|  |     # Case of https://github.com/NixOS/nixpkgs/issues/144170 | ||||||
|  |     # Remove if/when https://github.com/libsdl-org/SDL/pull/10246 is merged | ||||||
|  |     ./0001-cmake-use-FULL-install-directory-variants-in-pkg-con.patch | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   outputs = [ | ||||||
|  |     "lib" | ||||||
|  |     "dev" | ||||||
|  |     "out" | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   nativeBuildInputs = [ | ||||||
|  |     cmake | ||||||
|  |     ninja | ||||||
|  |     validatePkgConfig | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   buildInputs = | ||||||
|  |     lib.optionals stdenv.isLinux [ | ||||||
|  |       alsa-lib | ||||||
|  |       dbus | ||||||
|  |       fcitx5 | ||||||
|  |       libdecor | ||||||
|  |       libdrm | ||||||
|  |       libjack2 | ||||||
|  |       libpulseaudio | ||||||
|  |       mesa # libgbm | ||||||
|  |       nas # libaudo | ||||||
|  |       pipewire | ||||||
|  |       sndio | ||||||
|  |       systemdLibs # libudev | ||||||
|  | 
 | ||||||
|  |       # SDL_VIDEODRIVER=wayland | ||||||
|  |       wayland | ||||||
|  | 
 | ||||||
|  |       # SDL_VIDEODRIVER=x11 | ||||||
|  |       libxkbcommon | ||||||
|  |       xorg.libX11 | ||||||
|  |       xorg.libXcursor | ||||||
|  |       xorg.libXext | ||||||
|  |       xorg.libXfixes | ||||||
|  |       xorg.libXi | ||||||
|  |       xorg.libXrandr | ||||||
|  |     ] | ||||||
|  |     ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Cocoa ]); | ||||||
|  | 
 | ||||||
|  |   passthru = { | ||||||
|  |     tests.pkg-config = testers.hasPkgConfigModules { package = finalAttrs.finalPackage; }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     description = "Cross-platform development library (Pre-release version)"; | ||||||
|  |     homepage = "https://libsdl.org"; | ||||||
|  |     license = lib.licenses.zlib; | ||||||
|  |     maintainers = with lib.maintainers; [ getchoo ]; | ||||||
|  |     pkgConfigModules = [ "sdl3" ]; | ||||||
|  |   }; | ||||||
|  | }) | ||||||
		Reference in a new issue
	
	 Matias
				Matias