1#
2# c-ares Makefile for djgpp/gcc/Watt-32.
3# Copyright (C) Gisle Vanem <gvanem@yahoo.no>
4# SPDX-License-Identifier: MIT
5#
6include src/lib/Makefile.inc
7
8CSOURCES := $(addprefix src/lib/, $(CSOURCES))
9CSOURCES := $(filter-out src/lib/windows_port.c, $(CSOURCES))
10
11VPATH = src/lib src/tools
12
13#
14# Root directory for Waterloo tcp/ip.
15# WATT_ROOT should be set during Watt-32 install.
16#
17WATT32_ROOT = $(realpath $(WATT_ROOT))
18WATT32_LIB  = $(WATT32_ROOT)/lib/libwatt.a
19
20OBJ_DIR = djgpp
21
22CFLAGS = -g -O2 -I./include -I./src/lib \
23         -I$(WATT32_ROOT)/inc -Wall \
24         -DWATT32 -DHAVE_CONFIG_H   \
25         -Dselect=select_s
26
27LDFLAGS = -s
28
29ifeq ($(OS),Windows_NT)
30  #
31  # Windows hosted djgpp cross compiler. Get it from:
32  #   https://github.com/andrewwutw/build-djgpp/releases
33  #
34  DJ_PREFIX ?= c:/some-path/djgpp/bin/i586-pc-msdosdjgpp-
35  CC = $(DJ_PREFIX)gcc
36
37else
38  #
39  # The normal djgpp 'gcc' for MSDOS.
40  #
41  CC = gcc
42endif
43
44OBJECTS = $(addprefix $(OBJ_DIR)/, \
45            $(notdir $(CSOURCES:.c=.o)))
46
47GENERATED = src/lib/ares_config.h \
48            include/ares_build.h
49
50TARGETS = libcares.a adig.exe ahost.exe
51
52.SECONDARY: $(OBJ_DIR)/ares_getopt.o
53
54all: $(OBJ_DIR) $(GENERATED) $(TARGETS)
55	@echo Welcome to c-ares.
56
57libcares.a: $(OBJECTS)
58	ar rs $@ $(OBJECTS)
59
60src/lib/ares_config.h: src/lib/config-dos.h
61	cp --update $< $@
62
63include/ares_build.h: include/ares_build.h.dist
64	cp --update $< $@
65
66%.exe: src/tools/%.c $(OBJ_DIR)/ares_getopt.o libcares.a
67	$(call compile_and_link, $@, $^ $(WATT32_LIB))
68
69# Clean generated files and objects.
70#
71clean:
72	- rm -f depend.dj $(GENERATED) $(OBJ_DIR)/*.o
73	- rmdir $(OBJ_DIR)
74
75# Clean everything
76#
77realclean vclean: clean
78	- rm -f $(TARGETS) $(TARGETS:.exe=.map)
79
80$(OBJ_DIR):
81	- mkdir $@
82
83$(OBJ_DIR)/%.o: %.c
84	$(CC) $(CFLAGS) -o $@ -c $<
85	@echo
86
87define compile_and_link
88  $(CC) -o $(1) $(CFLAGS) $(LDFLAGS) -Wl,--print-map,--sort-common $(2) > $(1:.exe=.map)
89  @echo
90endef
91
92DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.o: @' \
93                  -e 's@$(WATT32_ROOT)@$$(WATT32_ROOT)@g'
94
95#
96# One may have to do 'make -f Makefile.dj clean' first in case
97# a foreign 'curl_config.h' is making trouble.
98#
99depend: $(GENERATED) Makefile.dj
100	$(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj
101
102-include depend.dj
103
104