blob: 9d442c6ebea2c442079faeeeb4780ca4553529fc [file] [log] [blame]
Gavin Howardb33afd02018-08-28 17:08:20 -06001#
2# Copyright 2018 Gavin D. Howard
3#
4# Permission to use, copy, modify, and/or distribute this software for any
5# purpose with or without fee is hereby granted.
6#
7# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13# PERFORMANCE OF THIS SOFTWARE.
14#
15
16BC_SRC = $(sort $(wildcard src/*.c))
17BC_OBJ = $(BC_SRC:.c=.o)
18
19GEN = gen
20
21BC_LIB = lib/lib.bc
22
23BC_LIB_C = lib/lib.c
24BC_LIB_O = lib/lib.o
25
26BC_EXEC = bc
27
28PREFIX ?= /usr/local
29
30INSTALL = ./install.sh
31
32-include config.mak
33
34CFLAGS += -Wall -Wextra -pedantic -std=c99 -funsigned-char
35CPPFLAGS += -I./include/ -D_POSIX_C_SOURCE=200809L
36
37LDLIBS += -lm
38
39HOSTCC ?= $(CC)
40
41all: $(BC_EXEC)
42
43help:
44 @echo "available targets:"
45 @echo ""
46 @echo " all build bc (uses config.mak if there is one)"
47 @echo " clean remove all build files"
48 @echo " install install to $(PREFIX)/bin"
49 @echo " uninstall uninstall from $(PREFIX)/bin"
50 @echo ""
51 @echo "useful environment variables:"
52 @echo ""
53 @echo "CC C compiler"
54 @echo "HOSTCC Host C compiler"
55 @echo "CFLAGS C compiler flags"
56 @echo "CPPFLAGS C preprocessor flags"
57 @echo "LDLIBS Libraries to link to"
58 @echo "PREFIX the prefix to install to"
59 @echo " if PREFIX is \"/usr\", $(BC_EXEC) will be installed to \"/usr/bin\""
60 @echo "GEN_EMU Emulator to run $(GEN) under (leave empty if not necessary)"
61
62$(GEN):
63 $(HOSTCC) -o $(GEN) lib/$(GEN).c
64
65$(BC_LIB_C): $(GEN)
66 $(GEN_EMU) ./$(GEN) $(BC_LIB) $(BC_LIB_C)
67
68$(BC_EXEC): $(BC_OBJ) $(BC_LIB_O)
69 $(CC) $(CFLAGS) -o $(BC_EXEC) $(BC_OBJ) $(BC_LIB_O) $(LDLIBS) $(LDFLAGS)
70
71test:
72 tests/all.sh
73
74clean:
75 $(RM) $(BC_OBJ)
76 $(RM) $(BC_EXEC)
77 $(RM) $(GEN)
78 $(RM) $(BC_LIB_C)
79 $(RM) $(BC_LIB_O)
80 $(RM) tests/parse.txt tests/print.txt tests/arctan.txt
81 $(RM) log_test.txt log_bc.txt
82
83install: $(BC_EXEC)
84 $(INSTALL) -Dm 755 $(BC_EXEC) $(DESTDIR)$(PREFIX)/bin/$(BC_EXEC)
85
86uninstall:
87 rm -rf $(DESTDIR)$(PREFIX)/bin/$(BC_EXEC)
88
89.PHONY: all help clean install uninstall test