diff --git a/.gitignore b/.gitignore index f595e66e..3a84b3a1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ build obj lux +# autotools +autom4te.cache + # Linux executables (files without extensions) * !*/ diff --git a/Makefile b/Makefile index 04504df1..ce51fa11 100644 --- a/Makefile +++ b/Makefile @@ -9,18 +9,18 @@ # override LDFLAGS += $(LLVM_LDFLAGS) # # Detect platform and define commands -include config.mk +include config.default.mk # Detect platform and define commands ifeq ($(OS),Windows_NT) - SHELL := cmd.exe + SHELL ?= cmd.exe MKDIR = if not exist "$(subst /,\,$1)" mkdir "$(subst /,\,$1)" RMDIR = if exist "$(subst /,\,$1)" rmdir /s /q "$(subst /,\,$1)" DEL = if exist "$(subst /,\,$1)" del /q "$(subst /,\,$1)" EXE = .exe PATHSEP = \\ else - SHELL := /bin/sh + SHELL ?= /bin/sh MKDIR = mkdir -p $1 RMDIR = rm -rf $1 DEL = rm -f $1 @@ -30,7 +30,11 @@ endif BIN := luma$(EXE) -.PHONY: all clean debug test llvm-test +ifneq ($(wildcard config.mk),) +include config.mk +endif + +.PHONY: all clean debug test check llvm-test all: $(BIN) @@ -48,7 +52,10 @@ debug: all # Test targets test: $(BIN) @echo "Running basic tests..." - ./$(BIN) --help + ./$(BIN) --help || true # non-zero exit code expected + +# Alias +check: test llvm-test: $(BIN) @echo "Testing LLVM IR generation..." diff --git a/config.mk b/config.default.mk similarity index 81% rename from config.mk rename to config.default.mk index 839f6bcc..94e05051 100644 --- a/config.mk +++ b/config.default.mk @@ -1,9 +1,9 @@ -# config.mk +# config.default.mk -CC = g++ -CFLAGS = -Wall -Wextra -std=c17 -Wno-unused-variable -O2 -x c # -x c tells g++ to treat files as C code -LDFLAGS = -INCLUDES = -Isrc +CC ?= g++ +CFLAGS ?= -Wall -Wextra -std=c17 -Wno-unused-variable -O2 -x c # -x c tells g++ to treat files as C code +LDFLAGS ?= +INCLUDES ?= -Isrc # LLVM configuration - request all necessary components LLVM_CFLAGS := $(shell llvm-config --cflags) diff --git a/config.mk.in b/config.mk.in new file mode 100644 index 00000000..ade6a945 --- /dev/null +++ b/config.mk.in @@ -0,0 +1,14 @@ +CC = @CXX@ +CFLAGS += @CXXFLAGS@ +LDFLAGS += @LDFLAGS@ +PREFIX = @prefix@ + +INSTALL ?= install +DESTDIR ?= $(PREFIX)/bin + +.PHONY: install + +install: $(BIN) + $(INSTALL) -d $(DESTDIR) + $(INSTALL) -s -m 0755 $(BIN) $(DESTDIR)/$(BIN) + @echo "Installed to $(DESTDIR)/$(BIN)" diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..b798f135 --- /dev/null +++ b/configure.ac @@ -0,0 +1,21 @@ +AC_INIT([luma], [git], [https://github.com/TheDevConnor/Luma]) +AC_PREREQ([2.69]) +AC_CONFIG_SRCDIR([src/main.c]) # sanity check to make sure someone didn't pass a garbage --srcdir +#AM_INIT_AUTOMAKE([foreign 1.16 dist-bzip2]) + +AC_PROG_CXX +AC_LANG(C++) +AC_SUBST(CXX) +# connor, i have no idea why you're expecting CC to be a C++ compiler. +# that's what CXX is for. + +CXXFLAGS="$CXXFLAGS $CFLAGS $CPPFLAGS" # grab any env for flags +LDFLAGS="$LDFLAGS" +AC_SUBST(CXXFLAGS) +AC_SUBST(LDFLAGS) + +AC_PREFIX_DEFAULT(/usr/local) +AC_SUBST(prefix) + +AC_CONFIG_FILES([config.mk]) +AC_OUTPUT diff --git a/default.nix b/default.nix new file mode 100644 index 00000000..09acb8b6 --- /dev/null +++ b/default.nix @@ -0,0 +1,41 @@ +{ stdenv +, pkg-config +, llvmPackages +, autoconf +, doxygen +, graphviz-nox +}: + +llvmPackages.stdenv.mkDerivation { + pname = "luma"; + version = "0.0.0"; # TODO: versioning + + src = ./.; + + nativeBuildInputs = [ + pkg-config + autoconf + doxygen + graphviz-nox + ]; + + outputs = [ + "out" + "doc" + ]; + + preConfigure = '' + autoconf + ''; + + postInstall = '' + doxygen Doxyfile + mv docs/doxygen $doc + ''; + + buildInputs = [ + llvmPackages.libllvm + ]; + + doCheck = true; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..e54e9ae7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1762361079, + "narHash": "sha256-lz718rr1BDpZBYk7+G8cE6wee3PiBUpn8aomG/vLLiY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ffcdcf99d65c61956d882df249a9be53e5902ea5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-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 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..1112ddb1 --- /dev/null +++ b/flake.nix @@ -0,0 +1,20 @@ +{ + description = "Luma"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + packages = rec { + default = luma; + luma = pkgs.callPackage ./default.nix { }; + }; + } + ); +}