From 5797bc26157cb4261b31d9bb1847e0230f7f0c19 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Sun, 3 Dec 2023 19:00:20 +0000 Subject: [PATCH] Create a LLVM based stdenv --- flake.lock | 8 +- flake.nix | 180 ++++++++++++++++-------- scripts/patches/p11-kit_skip_test.patch | 27 ++++ scripts/zsh/.zshrc | 72 ++++++++++ 4 files changed, 226 insertions(+), 61 deletions(-) create mode 100644 scripts/patches/p11-kit_skip_test.patch create mode 100644 scripts/zsh/.zshrc diff --git a/flake.lock b/flake.lock index d3f3551..ba5e85f 100644 --- a/flake.lock +++ b/flake.lock @@ -20,10 +20,10 @@ }, "nixpkgs": { "locked": { - "dirtyRev": "aa8d093e3bede559e5681ca69aa05e6e1ad4ee9a-dirty", - "dirtyShortRev": "aa8d093e3bed-dirty", - "lastModified": 1700918627, - "narHash": "sha256-gcbm/2a4Hp4k2dpOl33hGARAiHMHH5HKyCSkzRGhpLQ=", + "dirtyRev": "60a403eaffc56570ccc2fefebd1e09acd0ceab53-dirty", + "dirtyShortRev": "60a403eaffc5-dirty", + "lastModified": 1701178202, + "narHash": "sha256-WcFAx8yBoAGAUH6bCRJQWohtnzARZwpYh0H17LuAPZI=", "type": "git", "url": "file:///home/lxsameer/src/nixpkgs" }, diff --git a/flake.nix b/flake.nix index c0839c5..b86fa4c 100644 --- a/flake.nix +++ b/flake.nix @@ -1,3 +1,18 @@ +# Serene Programming Language +# +# Copyright (c) 2019-2023 Sameer Rahmani +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 2. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . { description = "Serene programming language"; @@ -7,6 +22,7 @@ outputs = inputs@{ self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let + zshDir = ./scripts/zsh; llvm = { url = "https://devheroes.codes/Serene/llvm-project.git"; major = "16"; @@ -16,32 +32,36 @@ rev-version = "17-disable-shared-1"; }; + overlays = [ - (self: super: - { - serene_toolchain = (super.callPackage (super.path + "/pkgs/development/compilers/llvm/${llvm.major}") ({ - inherit (super.stdenvAdapters) overrideCC; - buildLlvmTools = super.buildPackages.serene_toolchain.tools; - targetLlvmLibraries = self.targetPackages.serene_toolchain.libraries or self.serene_toolchain.libraries; - targetLlvm = self.targetPackages.serene_toolchain.llvm or self.serene_toolchain.llvm; - monorepoSrc = super.fetchgit { - url = llvm.url; - rev = llvm.rev; - hash = llvm.hash; - }; - officialRelease = null; - gitRelease = { - version = llvm.version; - rev = llvm.rev; - rev-version = llvm.rev-version; - }; - })); - }) + # (self: super: + # { + # serene_toolchain = (super.callPackage (super.path + "/pkgs/development/compilers/llvm/${llvm.major}") ({ + # inherit (super.stdenvAdapters) overrideCC; + # buildLlvmTools = super.buildPackages.serene_toolchain.tools; + # targetLlvmLibraries = self.targetPackages.serene_toolchain.libraries or self.serene_toolchain.libraries; + # targetLlvm = self.targetPackages.serene_toolchain.llvm or self.serene_toolchain.llvm; + # monorepoSrc = super.fetchgit { + # url = llvm.url; + # rev = llvm.rev; + # hash = llvm.hash; + # }; + # officialRelease = null; + # gitRelease = { + # version = llvm.version; + # rev = llvm.rev; + # rev-version = llvm.rev-version; + # }; + # })); + # }) (final: prev: { - cpio = prev.cpio.overrideAttrs (old: { + p11-kit = prev.p11-kit.overrideAttrs (old: { patches = [ - ./patches/0001-configure-Include-needed-header-for-major-minor-macr.patch + ./scripts/patches/p11-kit_skip_test.patch ]; + }); + + cpio = prev.cpio.overrideAttrs (old: { nativeBuildInputs = [ prev.autoreconfHook ]; NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration"; }); @@ -62,17 +82,34 @@ # We don't need systemd at all util-linux = prev.util-linux.override { systemdSupport = false; }; + + # iwyu = (prev.include-what-you-use.overrideAttrs (old: + # let + # version = "0.20"; + # in { + # inherit version; + + # src = prev.fetchurl { + # url = "${old.meta.homepage}/downloads/${old.pname}-${version}.src.tar.gz"; + # hash = "sha256-dfzh5khfKA+PE/TC0JCxHS/SECtQhXUHyEE6kZt6+Jk="; + # }; + # cmakeFlags = [ "-DCMAKE_PREFIX_PATH=${prev.llvmPackages_16.llvm.dev}" ]; + + # })).override { + # llvmPackages = prev.__splicedPackages.llvmPackages_16; + # }; + }) ]; get_pkgs = system: if system == "x86_64-linux" - then import nixpkgs { + then import nixpkgs { inherit system overlays; crossSystem = nixpkgs.lib.systems.examples.musl64 // { useLLVM = true; }; config.replaceCrossStdenv = { buildPackages, baseStdenv }: buildPackages.stdenvAdapters.overrideCC baseStdenv buildPackages.llvmPackages_16.clangUseLLVM; - } + } else import nixpkgs { inherit system overlays; }; @@ -83,54 +120,83 @@ #with pkgs; native_build_inputs = let + filterCmakeFlags = xs: builtins.filter + (x: !(x == "-DCMAKE_CROSSCOMPILING=True" || pkgs.lib.hasPrefix "-DLLVM_TABLEGEN=" x)) + xs; + git' = pkgs.git.overrideAttrs (old: { - preInstallCheck = - pkgs.lib.replaceStrings [ ''disable_test t0201-gettext-fallbacks'' ] - [ '' + preInstallCheck = + pkgs.lib.replaceStrings [ ''disable_test t0201-gettext-fallbacks'' ] + [ '' disable_test t0201-gettext-fallbacks disable_test t2082-parallel-checkout-attributes '' ] - old.preInstallCheck; + old.preInstallCheck; }); - in with pkgs; [ - cmake - ninja - ccache - # serene_toolchain.lldb - # serene_toolchain.lld - # serene_toolchain.libcxx - # serene_toolchain.libcxxabi - # serene_toolchain.compiler-rt - git' - zsh - python3 - ]; + # iwyu = (pkgs.include-what-you-use.overrideAttrs (old: + # let + # version = "0.20"; + # in { + # inherit version; - build_inputs = with pkgs; [ + # src = pkgs.fetchurl { + # url = "${old.meta.homepage}/downloads/${old.pname}-${version}.src.tar.gz"; + # hash = "sha256-dfzh5khfKA+PE/TC0JCxHS/SECtQhXUHyEE6kZt6+Jk="; + # }; + + + # })).override { + # llvmPackages = pkgs.__splicedPackages.llvmPackages_16;# .overrideAttrs (oldLLVM: { + # # cmakeFlags = builtins.trace ">> ${toString(filterCmakeFlags oldLLVM.cmakeFlags)}" filterCmakeFlags oldLLVM.cmakeFlags; + # # }); + # }; + # mlir_16' = pkgs.mlir_16.overrideAttrs (old: { + + # }); + in with pkgs; [ + cmake + ninja + ccache + git' + zsh + zsh-autosuggestions + zsh-autocomplete + zsh-syntax-highlighting + python3 + # iwyu + ]; + + build_inputs = with pkgs; [ boehmgc # llvm_16 + # llvm_16 + # mlir_16 + gtest gmock # zlib-ng # zstd - include-what-you-use ]; in { - inherit pkgs; - devShells.default = pkgs.mkShell { - nativeBuildInputs = native_build_inputs; - buildInputs = build_inputs; - shellHook = ''zsh --norcs && exit''; - }; + inherit pkgs; + devShells.default = pkgs.mkShell { + nativeBuildInputs = native_build_inputs; + buildInputs = build_inputs; + shellHook = + '' + ZDOTDIR=${zshDir} zsh -d && exit + ''; + }; - packages.cmake = pkgs.cmake; - packages.blah = pkgs.stdenv.mkDerivation { - pname = "blah"; - version = "0.1"; - nativeBuildInputs = native_build_inputs; - buildInputs = build_inputs; - }; - } + packages.cmake = pkgs.cmake; + packages.blah = pkgs.stdenv.mkDerivation { + pname = "blah"; + version = "0.1"; + nativeBuildInputs = native_build_inputs; + buildInputs = build_inputs; + }; + packages.mlir = pkgs.mlir_16; + } ); } diff --git a/scripts/patches/p11-kit_skip_test.patch b/scripts/patches/p11-kit_skip_test.patch new file mode 100644 index 0000000..34da908 --- /dev/null +++ b/scripts/patches/p11-kit_skip_test.patch @@ -0,0 +1,27 @@ +From 132b779414c2236c1350b578b59c8edcfc4c5a14 Mon Sep 17 00:00:00 2001 +From: Sameer Rahmani +Date: Sat, 25 Nov 2023 13:14:42 +0000 +Subject: [PATCH] test + +--- + common/test.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/common/test.c b/common/test.c +index 6cdbd1fa2118..6cd6f84bcdc7 100644 +--- a/common/test.c ++++ b/common/test.c +@@ -614,8 +614,9 @@ p11_test_copy_setgid (const char *input, + assert (fd >= 0); + + copy_file (input, fd); +- if (fchown (fd, getuid (), group) < 0) +- assert_not_reached (); ++ if (fchown (fd, getuid (), group) < 0) { ++ return NULL; ++ } + if (fchmod (fd, 02750) < 0) + assert_not_reached (); + if (close (fd) < 0) +-- +2.41.0 diff --git a/scripts/zsh/.zshrc b/scripts/zsh/.zshrc new file mode 100644 index 0000000..1571e04 --- /dev/null +++ b/scripts/zsh/.zshrc @@ -0,0 +1,72 @@ +#! /bin/zsh +# shellcheck disable=all +# Serene Programming Language +# +# Copyright (c) 2019-2023 Sameer Rahmani +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 2. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +mkdir -p "$HOME/.config/serene/" + +export HISTFILE="$HOME/.config/serene/.zsh_history" +export HISTFILESIZE=500 +export SAVEHIST=500 +export HISTSIZE=500 + +setopt HIST_IGNORE_DUPS +setopt NO_HIST_BEEP +setopt PROMPT_SUBST +setopt NO_BEEP +setopt AUTO_CD +setopt CORRECT +setopt SHARE_HISTORY +setopt HIST_IGNORE_ALL_DUPS + +function user_prompt () { + if [ $UID != 0 ]; then + echo "%F{028}%F{002}> " + else + echo "%F{001}# " + fi +} + +autoload -U colors && colors +autoload -Uz compinit +compinit + +# zstyle ':completion:*' auto-description 'specify: %d' +# zstyle ':completion:*' completer _expand _complete _correct _approximate +# zstyle ':completion:*' format 'Completing %d' +# zstyle ':completion:*' group-name '' +# if [ "$(uname 2> /dev/null)" = "Linux" ]; then +# zstyle ':completion:*' menu select=2 eval "$(dircolors -b)" +# fi +# zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} +# zstyle ':completion:*' list-colors '' +# zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s +# zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*' +# zstyle ':completion:*' menu select=long +# zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s +# zstyle ':completion:*' use-compctl false +# zstyle ':completion:*' verbose true + +# zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' +# zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' + +echo "Welcome to serene's development environment" + +PROMPT=' +%F{015}[%F{099}SERENE%F{015}][%F{198}$(git branch --show-current)%F{015}] +%F{005}%~%F{003} $(user_prompt)%f' + +export PROMPT