fix(c): simplify the template config files
This commit is contained in:
parent
57769ca9ed
commit
d981bc409e
2
c/.gitattributes
vendored
2
c/.gitattributes
vendored
|
@ -1,2 +0,0 @@
|
||||||
* text=lf
|
|
||||||
* eol=lf
|
|
63
c/.gitignore
vendored
63
c/.gitignore
vendored
|
@ -1,15 +1,64 @@
|
||||||
# binaries
|
# binaries
|
||||||
hello
|
hello
|
||||||
|
|
||||||
# build
|
# language support
|
||||||
*.[aod]
|
|
||||||
|
|
||||||
# config
|
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
.pre-commit-config.yaml
|
|
||||||
.cache
|
.cache
|
||||||
|
|
||||||
# nix
|
# nix
|
||||||
.direnv
|
.direnv
|
||||||
.envrc
|
result*
|
||||||
result
|
repl-result-*
|
||||||
|
|
||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.ko
|
||||||
|
*.obj
|
||||||
|
*.elf
|
||||||
|
|
||||||
|
# Linker output
|
||||||
|
*.ilk
|
||||||
|
*.map
|
||||||
|
*.exp
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
*.lib
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs)
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.i*86
|
||||||
|
*.x86_64
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
# Debug files
|
||||||
|
*.dSYM/
|
||||||
|
*.su
|
||||||
|
*.idb
|
||||||
|
*.pdb
|
||||||
|
|
||||||
|
# Kernel Module Compile Results
|
||||||
|
*.mod*
|
||||||
|
*.cmd
|
||||||
|
.tmp_versions/
|
||||||
|
modules.order
|
||||||
|
Module.symvers
|
||||||
|
Mkfile.old
|
||||||
|
dkms.conf
|
||||||
|
|
29
c/Dockerfile
29
c/Dockerfile
|
@ -1,29 +0,0 @@
|
||||||
# Credit to Mitchell Hashimoto
|
|
||||||
# post: https://mitchellh.com/writing/nix-with-dockerfiles
|
|
||||||
|
|
||||||
# Nix builder
|
|
||||||
FROM nixos/nix:latest AS builder
|
|
||||||
|
|
||||||
# Copy our source and setup our working dir.
|
|
||||||
COPY . /tmp/build
|
|
||||||
WORKDIR /tmp/build
|
|
||||||
|
|
||||||
# Build our Nix environment
|
|
||||||
RUN nix \
|
|
||||||
--extra-experimental-features "nix-command flakes" \
|
|
||||||
--option filter-syscalls false \
|
|
||||||
build
|
|
||||||
|
|
||||||
# Copy the Nix store closure into a directory. The Nix store closure is the
|
|
||||||
# entire set of Nix store values that we need for our build.
|
|
||||||
RUN mkdir /tmp/nix-store-closure
|
|
||||||
RUN cp -R $(nix-store -qR result/) /tmp/nix-store-closure
|
|
||||||
|
|
||||||
# Final image is based on scratch. We copy a bunch of Nix dependencies
|
|
||||||
# but they're fully self-contained so we don't need Nix anymore.
|
|
||||||
FROM scratch
|
|
||||||
|
|
||||||
# Copy /nix/store
|
|
||||||
COPY --from=builder /tmp/nix-store-closure /nix/store
|
|
||||||
COPY --from=builder /tmp/build/result /app
|
|
||||||
CMD ["/app/bin/hello"]
|
|
19
c/Makefile
19
c/Makefile
|
@ -1,21 +1,12 @@
|
||||||
.POSIX:
|
|
||||||
.SUFFIXES: .o
|
|
||||||
|
|
||||||
CC ?= gcc
|
CC ?= gcc
|
||||||
|
CFLAGS += -pedantic -Wall -Wextra -O2
|
||||||
|
|
||||||
OUT := hello
|
OUT := hello
|
||||||
|
BINDIR ?= /usr/bin
|
||||||
|
|
||||||
SRC += main.c
|
SRC += main.c
|
||||||
OBJ := $(SRC:.c=.o)
|
OBJ := $(SRC:.c=.o)
|
||||||
|
|
||||||
CFLAGS += @compile_flags.txt
|
|
||||||
CFLAGS += -ffunction-sections -fdata-sections
|
|
||||||
|
|
||||||
LDFLAGS := -fwhole-program -flto
|
|
||||||
LDFLAGS += -Wl,--gc-sections -s
|
|
||||||
|
|
||||||
RM ?= rm -f
|
|
||||||
|
|
||||||
.DEFAULT_GOAL: all
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: $(OUT)
|
all: $(OUT)
|
||||||
|
|
||||||
|
@ -33,3 +24,7 @@ fclean: clean
|
||||||
.PHONY: re
|
.PHONY: re
|
||||||
.NOTPARALLEL: re
|
.NOTPARALLEL: re
|
||||||
re: fclean all
|
re: fclean all
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install:
|
||||||
|
install -D hello ${BINDIR}/hello --mode 0755
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
-std=c99
|
|
||||||
-pedantic
|
|
||||||
-pipe
|
|
||||||
|
|
||||||
-Wall
|
|
||||||
-Wcast-qual
|
|
||||||
-Wconversion
|
|
||||||
-Werror=return-type
|
|
||||||
-Werror=vla-larger-than=0
|
|
||||||
-Wextra
|
|
||||||
-Wmissing-prototypes
|
|
||||||
-Wshadow
|
|
||||||
-Wstrict-prototypes
|
|
||||||
-Wwrite-strings
|
|
||||||
|
|
||||||
-O2
|
|
||||||
-march=native
|
|
||||||
-mtune=native
|
|
|
@ -1,13 +0,0 @@
|
||||||
{ stdenv, gnumake }:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "hello";
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
nativeBuildInputs = [ gnumake ];
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
install -D hello $out/bin/hello --mode 0755
|
|
||||||
'';
|
|
||||||
}
|
|
29
c/flake.nix
29
c/flake.nix
|
@ -8,37 +8,20 @@
|
||||||
let
|
let
|
||||||
forAllSystems =
|
forAllSystems =
|
||||||
function:
|
function:
|
||||||
nixpkgs.lib.genAttrs [
|
nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (
|
||||||
"x86_64-linux"
|
system: function nixpkgs.legacyPackages.${system}
|
||||||
"aarch64-linux"
|
);
|
||||||
"x86_64-darwin"
|
|
||||||
"aarch64-darwin"
|
|
||||||
"i686-linux"
|
|
||||||
"mipsel-linux"
|
|
||||||
"powerpc64le-linux"
|
|
||||||
] (system: function nixpkgs.legacyPackages.${system});
|
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
devShells = forAllSystems (pkgs: {
|
devShells = forAllSystems (pkgs: {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell { inputsFrom = [ packages.${pkgs.system}.hello ]; };
|
||||||
hardeningDisable = [ "fortify" ];
|
|
||||||
inputsFrom = pkgs.lib.attrsets.attrValues packages;
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
packages = forAllSystems (pkgs: rec {
|
packages = forAllSystems (pkgs: rec {
|
||||||
default = hello;
|
default = hello;
|
||||||
hello = pkgs.callPackage ./default.nix { };
|
hello = pkgs.callPackage ./hello.nix { };
|
||||||
});
|
});
|
||||||
|
|
||||||
overlays.default = final: prev: { hello = final.callPackage ./default.nix { }; };
|
overlays.default = final: prev: { hello = prev.callPackage ./default.nix { }; };
|
||||||
|
|
||||||
apps = forAllSystems (pkgs: rec {
|
|
||||||
default = hello;
|
|
||||||
hello = {
|
|
||||||
program = "${packages.${pkgs.system}.hello}/bin/hello";
|
|
||||||
type = "app";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
7
c/hello.nix
Normal file
7
c/hello.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ stdenv }:
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "hello";
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
|
env.BINDIR = "${placeholder "out"}/bin";
|
||||||
|
}
|
17
c/main.c
17
c/main.c
|
@ -1,16 +1,11 @@
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define lengthof(sstr) (sizeof (sstr) / sizeof *(sstr))
|
|
||||||
#define sstr_len(sstr) (lengthof(sstr) - 1)
|
|
||||||
#define sstr_unpack(sstr) (sstr), (sstr_len(sstr))
|
|
||||||
|
|
||||||
static const char GREETING[] = "hello, world!\n";
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
return (
|
char greet[] = "hello, world!\n";
|
||||||
write(STDOUT_FILENO, sstr_unpack(GREETING))
|
int written = printf("%s", greet);
|
||||||
== sstr_len(GREETING)
|
|
||||||
) ? EXIT_SUCCESS : EXIT_FAILURE;
|
return written == (sizeof(greet) - 1)
|
||||||
|
? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
columns = 80
|
|
||||||
sort = "lines"
|
|
||||||
types = ["C", "C Header", "Makefile", "Markdown"]
|
|
||||||
treat_doc_strings_as_comments = true
|
|
Loading…
Reference in a new issue