diff --git a/Makefile b/Makefile index b364514..7d81f1a 100644 --- a/Makefile +++ b/Makefile @@ -1,27 +1,37 @@ +include config.mk include chad.mk -DEBUG:=1 -CFLAGS:=-std=c99 -O2 $(if ${DEBUG}, ${CHAD_DEBUG},'') -CPPFLAGS:=-D_FORTIFY_SOURCE=2 -SRC.dir:=source/ +SRC.dir:=source +OBJ.dir:=object + SRC:=$(shell find ${SRC.dir} -iname '*.c') HDR:=$(shell find ${SRC.dir} -iname '*.h') -OBJ:=$(subst .c,.o,${SRC}) +OBJ:=$(subst $(SRC.dir),$(OBJ.dir),$(SRC:.c=.o)) -OUT:=hl -OUTARGS:=${OUT} < source/main.c +VPATH=${SRC.dir} ${OBJ.dir} -main: ${OBJ} ${HDR} - ${LINK.c} ${OBJ} -o hl - -%.o: %.c +${OBJ.dir}/%.o: ${SRC.dir}/%.c ${COMPILE.c} $< -o $@ -install: - cp hl /usr/bin/hl +${TARGET}: ${HDR} ${OBJ.dir} | ${OBJ} + ${LINK.c} $| -o $@ + +${SRC} ${HDR}: + +${PREFIX} ${OBJ.dir}: + mkdir -p $@ + +install: ${PREFIX} + install -v -g ${USER} -o ${USER} -m 744 ${TARGET} ${PREFIX}/bin/ + +uninstall: + -rm ${PREFIX}/bin/${TARGET} clean: - -rm ${OBJ} - -rm ${OUT} + -rm ${OBJ} ${TARGET} test: chad_test + +.PHONY: test clean install + +.DEFAULT_GOAL:=${TARGET} diff --git a/chad.mk b/chad.mk index e5ebf78..1acd32a 100644 --- a/chad.mk +++ b/chad.mk @@ -1,23 +1,18 @@ -# Make script for Chad projects -# This script depends on the following variables -# - OUT : output program name -# - OUTARGS : default flags to fork ${OUT} with +# Programs to check warnings for as defined by the chad standard -# -CHAD_DEBUG:=-Og -ggdb -pg -fno-inline - -# Programs to check warnings for as defined by the Chad standard GCC:=gcc D.versions:=-D_XOPEN_SOURCE=700 GCC.warnings:=-Wall -Wextra -Wpedantic -Wvla -Wshadow -Wundef CLANG:=clang CLANG.warnings:=-Weverything + VALGRIND:=valgrind VALGRIND.flags:=--track-origins=yes --leak-check=full --show-leak-kinds=all -chad_test: - ${GCC} ${D.versions} ${GCC.warnings} ${SRC} -o ${OUT} - ${CLANG} ${D.versions} ${GCC.warnings} ${SRC} -o ${OUT} - ${VALGRIND} ${VALGRIND.flags} ${OUT} ${OUTARGS} +TARGET:=hl +ARGS:=${TARGET} < source/main.c -.DEFAULT_GOAL:=main +chad_test: + ${GCC} ${D.versions} ${GCC.warnings} ${SRC} -o ${TARGET} + ${CLANG} ${D.versions} ${GCC.warnings} ${SRC} -o ${TARGET} + ${VALGRIND} ${VALGRIND.flags} $(shell pwd)/${TARGET} ${ARGS} diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..f883c75 --- /dev/null +++ b/config.mk @@ -0,0 +1,17 @@ +# Make script for Chad projects +# This script depends on the following variables +# - TARGET : output program name +# - ARGS : default flags to fork ${OUT} with + +PREFIX:=/usr/bin + +CFLAGS:=-std=c99 +CPPFLAGS:=-D_GNU_SOURCE -D_FORTIFY_SOURCE=2 + +DEBUG=1 + +ifeq (${DEBUG},1) + CFLAGS += -Og -ggdb -pg -fno-inline +else + CFLAGS += -O2 -flto=auto +endif diff --git a/source/hl_xolatile.c b/source/hl_xolatile.c index 3a5054c..a264c20 100755 --- a/source/hl_xolatile.c +++ b/source/hl_xolatile.c @@ -1,3 +1,4 @@ +#if 0 // Listen, this is still prototype, it's not code-merged with other stuff... // Once I prototype out more stuff, this will use chad.h and hl.h... // So, this file can run on its' own when compiled, gonna rewrite later. @@ -244,3 +245,4 @@ int main(int argc, return 0; } +#endif diff --git a/source/main.c b/source/main.c index 54f6348..6dda8c7 100644 --- a/source/main.c +++ b/source/main.c @@ -1,5 +1,6 @@ //register //putchar() +#include #include #include #include @@ -52,7 +53,8 @@ int main(int argc, buffer = realloc(buffer, ++chunks * ALLOCATION_CHUNK); } buffer[buffer_size] = '\0'; - read(STDIN_FILENO, &buffer[buffer_size], sizeof (*buffer)); + /* TODO handle me */ + assert(read(STDIN_FILENO, &buffer[buffer_size], sizeof (*buffer)) != -1); ++buffer_size; } while (buffer[buffer_size - 1]);