-include chad.mk
-DEBUG:=1
-CFLAGS:=-std=c99 -O2 $(if ${DEBUG}, ${CHAD_DEBUG},'')
-CPPFLAGS:=-D_FORTIFY_SOURCE=2
+include config.mk
+
+SRC.dir:=source
+OBJ.dir:=obj
-SRC.dir:=source/
SRC:=$(shell find ${SRC.dir} -iname '*.c')
HDR:=$(shell find ${SRC.dir} -iname '*.h')
-OBJ:=$(subst .c,.o,${SRC})
-
-OUT:=hl
-OUTARGS:=${OUT} < source/main.c
+OBJ:=$(SRC:.c=.o)
-main: ${OBJ} ${HDR}
- ${LINK.c} ${OBJ} -o hl
+VPATH=${SRC.dir} ${OBJ.dir}
-%.o: %.c
+${OBJ.dir}/%.o: ${SRC.dir}/%.c
${COMPILE.c} $< -o $@
-install:
- cp hl /usr/bin/hl
+${TARGET}: ${OBJ} | ${HDR}
+ ${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}
+++ /dev/null
-# Make script for Chad projects
-# This script depends on the following variables
-# - OUT : output program name
-# - OUTARGS : default flags to fork ${OUT} with
-
-#
-CHAD_DEBUG:=-Og -ggdb -pg -fno-inline
-
-# Programs to check warnings for as defined by the Chad standard
-GCC:=gcc
-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} ${GCC.warnings} ${SRC} -o ${OUT}
- ${CLANG} ${GCC.warnings} ${SRC} -o ${OUT}
- ${VALGRIND} ${VALGRIND.flags} ${OUT} ${OUTARGS}
-
-.DEFAULT_GOAL:=main
--- /dev/null
+# 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
+
+# Programs to check warnings for as defined by the chad standard
+
+GCC:=gcc
+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
+
+TARGET:=hl
+ARGS:=${TARGET} < source/main.c
+
+chad_test:
+ ${GCC} ${GCC.warnings} ${SRC} -o ${TARGET}
+ ${CLANG} ${GCC.warnings} ${SRC} -o ${TARGET}
+ ${VALGRIND} ${VALGRIND.flags} ${TARGET} ${ARGS}
+#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.
return 0;
}
+#endif
//register
//putchar()
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
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]);