1BASE_DIR = $(shell pwd -P) 2CFG_DIR = $(BASE_DIR)/cfg 3 4-include $(CFG_DIR)/global_vars.mk 5 6LIBS = toxcore ncursesw libconfig libcurl 7 8CFLAGS ?= -std=c99 -pthread -Wall -Wpedantic -Wunused -fstack-protector-all -Wvla -Wno-missing-braces 9CFLAGS += '-DTOXICVER="$(VERSION)"' -DHAVE_WIDECHAR -D_XOPEN_SOURCE_EXTENDED -D_FILE_OFFSET_BITS=64 10CFLAGS += '-DPACKAGE_DATADIR="$(abspath $(DATADIR))"' 11CFLAGS += ${USER_CFLAGS} 12LDFLAGS ?= 13LDFLAGS += ${USER_LDFLAGS} 14 15OBJ = autocomplete.o avatars.o bootstrap.o chat.o chat_commands.o configdir.o curl_util.o execute.o 16OBJ += file_transfers.o friendlist.o global_commands.o conference_commands.o conference.o help.o input.o line_info.o 17OBJ += log.o message_queue.o misc_tools.o name_lookup.o notify.o prompt.o qr_code.o settings.o 18OBJ += term_mplex.o toxic.o toxic_strings.o windows.o 19 20# Check if debug build is enabled 21RELEASE := $(shell if [ -z "$(ENABLE_RELEASE)" ] || [ "$(ENABLE_RELEASE)" = "0" ] ; then echo disabled ; else echo enabled ; fi) 22ifneq ($(RELEASE), enabled) 23 CFLAGS += -O0 -g -DDEBUG 24 LDFLAGS += -O0 25else 26 CFLAGS += -O2 -flto 27 LDFLAGS += -O2 -flto 28endif 29 30# Check if LLVM Address Sanitizer is enabled 31ASAN := $(shell if [ -z "$(ENABLE_ASAN)" ] || [ "$(ENABLE_ASAN)" = "0" ] ; then echo disabled ; else echo enabled ; fi) 32ifneq ($(ASAN), disabled) 33 CFLAGS += -fsanitize=address -fno-omit-frame-pointer 34endif 35 36# Check on wich system we are running 37UNAME_S = $(shell uname -s) 38ifeq ($(UNAME_S), Linux) 39LDFLAGS += -ldl -lrt 40endif 41ifeq ($(UNAME_S), FreeBSD) 42LIBS := $(filter-out ncursesw, $(LIBS)) 43LDFLAGS += -lncursesw 44endif 45ifeq ($(UNAME_S), OpenBSD) 46LIBS := $(filter-out ncursesw, $(LIBS)) 47LDFLAGS += -lncursesw 48endif 49ifeq ($(UNAME_S), NetBSD) 50LIBS := $(filter-out ncursesw, $(LIBS)) 51LDFLAGS += -lncursesw 52endif 53ifeq ($(UNAME_S), Darwin) 54 -include $(CFG_DIR)/systems/Darwin.mk 55endif 56 57# Check on which platform we are running 58UNAME_M = $(shell uname -m) 59ifeq ($(UNAME_M), x86_64) 60 -include $(CFG_DIR)/platforms/x86_64.mk 61endif 62ifneq ($(filter %86, $(UNAME_M)),) 63 -include $(CFG_DIR)/platforms/x86.mk 64endif 65ifneq ($(filter arm%, $(UNAME_M)),) 66 -include $(CFG_DIR)/platforms/arm.mk 67endif 68 69# Include all needed checks 70-include $(CFG_DIR)/checks/check_features.mk 71 72# Fix path for object files 73OBJ := $(addprefix $(BUILD_DIR)/, $(OBJ)) 74 75# Targets 76all: $(BUILD_DIR)/toxic 77 78$(BUILD_DIR)/toxic: $(OBJ) 79 @echo " LD $(@:$(BUILD_DIR)/%=%)" 80 @$(CC) $(CFLAGS) -o $(BUILD_DIR)/toxic $(OBJ) $(LDFLAGS) 81 82$(BUILD_DIR)/osx_video.o: $(SRC_DIR)/$(OSX_VIDEO) 83 @echo " CC $(@:$(BUILD_DIR)/)osx_video.o" 84 @$(CC) $(CFLAGS) -o $(BUILD_DIR)/osx_video.o -c $(SRC_DIR)/$(OSX_VIDEO) 85 86$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c 87 @if [ ! -e $(BUILD_DIR) ]; then \ 88 mkdir -p $(BUILD_DIR) ;\ 89 fi 90 @echo " CC $(@:$(BUILD_DIR)/%=%)" 91 @$(CC) $(CFLAGS) -o $(BUILD_DIR)/$*.o -c $(SRC_DIR)/$*.c 92 @$(CC) -MM $(CFLAGS) $(SRC_DIR)/$*.c >$(BUILD_DIR)/$*.d 93 94clean: 95 rm -f $(BUILD_DIR)/*.d $(BUILD_DIR)/*.o $(BUILD_DIR)/toxic 96 97-include $(BUILD_DIR)/$(OBJ:.o=.d) 98 99-include $(CFG_DIR)/targets/*.mk 100 101.PHONY: clean all 102