aboutsummaryrefslogblamecommitdiffstats
path: root/Makefile
blob: 783f58ef82e6cb185171e9770838ff80d3aa9732 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                

                 

                 

                              
                           

                                  
                                          
                               





                             
                             
                             


                        
                             

                        
                                               
             
                                                                    
                 
 
                                                                          
                                                          
 
                                                                             
 




                             

                                                       




                                    


                                                                                              






                                                                                     




                                                             
 
                                  
                                               
 
                                    
                                               

                
                                               
 
                     
                                                                                                                                                                     
 
                                 
                                                        
                                                 
 


                          
                            
                                 
                                                                                                                                                             
                                                   
 
                          
                                                                                                                                               
 
                                        

                                         
 
                                     
OUT      = runes
DOUT     = runesd
COUT     = runesc
BUILD    = build/
SRC      = src/
BASE_OBJ = $(BUILD)util.o
TERM_OBJ = $(BUILD)display.o \
	   $(BUILD)term.o \
	   $(BUILD)config.o \
	   $(BUILD)window-xlib.o \
	   $(BUILD)window-backend-xlib.o \
	   $(BUILD)pty-unix.o \
	   $(BUILD)loop.o
SOCK_OBJ = $(BUILD)socket.o \
	   $(BUILD)protocol.o
OBJ      = $(BUILD)runes.o \
	   $(BASE_OBJ) \
	   $(TERM_OBJ)
DOBJ     = $(BUILD)runesd.o \
	   $(BUILD)daemon.o \
	   $(BASE_OBJ) \
	   $(TERM_OBJ) \
	   $(SOCK_OBJ)
COBJ     = $(BUILD)runesc.o \
	   $(BASE_OBJ) \
	   $(SOCK_OBJ)
LIBS     = cairo cairo-xlib libevent pangocairo
OPT     ?= -g
CFLAGS  ?= $(OPT) -Wall -Wextra -Werror -std=c1x -D_XOPEN_SOURCE=600
LDFLAGS ?= $(OPT)

ALLCFLAGS  = $(shell pkg-config --cflags $(LIBS)) -Ilibvt100/src $(CFLAGS)
ALLLDFLAGS = $(shell pkg-config --libs $(LIBS)) $(LDFLAGS)

MAKEDEPEND = $(CC) $(ALLCFLAGS) -M -MP -MT '$@ $(@:$(BUILD)%.o=$(BUILD).%.d)'

ifndef VERBOSE
QUIET_CC  = @echo "  CC  $@";
QUIET_LD  = @echo "  LD  $@";
endif

all: $(OUT) $(DOUT) $(COUT) ## Build all of the targets

release: ## Build optimized binaries
	$(MAKE) clean
	$(MAKE) OPT=-O2
	strip $(OUT) $(DOUT) $(COUT)

debug: CFLAGS += -DRUNES_PROGRAM_NAME='"runes-debug"'
debug: $(OUT) $(DOUT) $(COUT) ## Like 'all', but with a different window class and socket path

release-profile: OPT = -O2 -pg
release-profile: $(OUT) $(DOUT) $(COUT) ## Like 'release', but with profiling enabled

profile: CFLAGS += -DRUNES_PROGRAM_NAME='"runes-debug"'
profile: OPT = -g -pg
profile: $(OUT) $(DOUT) $(COUT) ## Like 'debug', but with profiling enabled

run: $(OUT) ## Build and run the standalone runes terminal
	@./$(OUT)

run-daemon: $(DOUT) $(COUT) ## Build and run the runes daemon
	@./$(DOUT)

$(OUT): $(OBJ) libvt100/libvt100.a
	$(QUIET_LD)$(CC) -o $@ $^ $(ALLLDFLAGS)

$(DOUT): $(DOBJ) libvt100/libvt100.a
	$(QUIET_LD)$(CC) -o $@ $^ $(ALLLDFLAGS)

$(COUT): $(COBJ)
	$(QUIET_LD)$(CC) -o $@ $^ $(ALLLDFLAGS)

libvt100/libvt100.a::
	@if ! $(MAKE) -q -C libvt100 static; then $(MAKE) -C libvt100 static OPT="$(OPT)" && MAKELEVEL=$(echo "${MAKELEVEL}-1" | bc) exec $(MAKE) $(MAKECMDGOALS); fi

$(BUILD)%.o: $(SRC)%.c | $(BUILD)
	@$(MAKEDEPEND) -o $(<:$(SRC)%.c=$(BUILD).%.d) $<
	$(QUIET_CC)$(CC) $(ALLCFLAGS) -c -o $@ $<

$(BUILD):
	@mkdir -p $(BUILD)

clean: ## Remove build files
	cd libvt100 && make clean
	rm -f $(OUT) $(OBJ) $(OBJ:$(BUILD)%.o=$(BUILD).%.d) $(DOUT) $(DOBJ) $(DOBJ:$(BUILD)%.o=$(BUILD).%.d) $(COUT) $(COBJ) $(COBJ:$(BUILD)%.o=$(BUILD).%.d)
	@rmdir -p $(BUILD) > /dev/null 2>&1 || true

help: ## Display this help
	@grep -HE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":|##"}; {printf "\033[36m%-16s\033[0m %s\n", $$2, $$4}'

-include $(OBJ:$(BUILD)%.o=$(BUILD).%.d)
-include $(DOBJ:$(BUILD)%.o=$(BUILD).%.d)
-include $(COBJ:$(BUILD)%.o=$(BUILD).%.d)

.PHONY: all run run-daemon clean help