-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
108 lines (89 loc) · 3.54 KB
/
Copy pathMakefile
File metadata and controls
108 lines (89 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
PLATFORM ?= posix
AMIAPI_DIR ?= ../AmiAPI
BUILD := build/$(PLATFORM)
AMIAPI_INCLUDE := $(AMIAPI_DIR)/include
AMIAPI_LIB := $(AMIAPI_DIR)/build/libamiapi.a
CFLAGS ?= -O2 -Wall -Wextra -pedantic
CPPFLAGS += -Iinclude -I$(AMIAPI_INCLUDE)
COMMON_SRC := src/weather.c src/preferences.c src/openmeteo.c src/arexx_command.c
COMMON_OBJ := $(patsubst src/%.c,$(BUILD)/%.o,$(COMMON_SRC))
DOOR_OBJ := $(BUILD)/door/door.o $(BUILD)/door/adapter_abbs.o
ifeq ($(PLATFORM),posix)
CC ?= cc
PROGRAM := $(BUILD)/amiweather-posix
PLATFORM_OBJ := $(BUILD)/main_posix.o
DOOR_PROGRAM :=
LDLIBS += -lssl -lcrypto
else ifeq ($(PLATFORM),amiga)
ifeq ($(origin CC),default)
CC := m68k-amigaos-gcc
endif
CFLAGS += -m68020
CPPFLAGS += -I/opt/amiga/AmiSSL/Developer/include -DAMIWEATHER_AMIGA
PROGRAM := $(BUILD)/AmiWeather
PLATFORM_OBJ := $(BUILD)/main_amiga.o $(BUILD)/gui_amiga.o $(BUILD)/arexx_amiga.o
DOOR_PROGRAM := $(BUILD)/AmiWeatherDoor
DOOR_PLATFORM_OBJ := $(BUILD)/door/main_amiga.o $(BUILD)/door/terminal_amiga.o
LDLIBS += -L/opt/amiga/AmiSSL/Developer/lib/AmigaOS3 -lamisslauto
else
$(error Unknown PLATFORM '$(PLATFORM)'; use posix or amiga)
endif
.PHONY: all clean test door-test smoke check-sdk release validate-release door-release
all: check-sdk $(PROGRAM) $(DOOR_PROGRAM)
check-sdk:
@test -f "$(AMIAPI_INCLUDE)/amiapi/amiapi.h" || \
{ echo "Missing AmiAPI public headers under $(AMIAPI_INCLUDE)"; exit 1; }
@test -f "$(AMIAPI_LIB)" || \
{ echo "Missing AmiAPI library $(AMIAPI_LIB); build the matching platform in AmiAPI first"; exit 1; }
$(BUILD):
mkdir -p $@
$(BUILD)/%.o: src/%.c | $(BUILD)
mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(PROGRAM): $(COMMON_OBJ) $(PLATFORM_OBJ) $(AMIAPI_LIB)
$(CC) $(CFLAGS) $(COMMON_OBJ) $(PLATFORM_OBJ) $(AMIAPI_LIB) $(LDLIBS) -o $@
$(DOOR_PROGRAM): $(COMMON_OBJ) $(DOOR_OBJ) $(DOOR_PLATFORM_OBJ) $(AMIAPI_LIB)
$(CC) $(CFLAGS) $(COMMON_OBJ) $(DOOR_OBJ) $(DOOR_PLATFORM_OBJ) $(AMIAPI_LIB) -o $@
test: check-sdk
ifeq ($(PLATFORM),posix)
$(MAKE) $(BUILD)/test_openmeteo PLATFORM=posix AMIAPI_DIR="$(AMIAPI_DIR)"
$(BUILD)/test_openmeteo
$(MAKE) $(BUILD)/test_preferences PLATFORM=posix AMIAPI_DIR="$(AMIAPI_DIR)"
$(BUILD)/test_preferences
$(MAKE) $(BUILD)/test_arexx PLATFORM=posix AMIAPI_DIR="$(AMIAPI_DIR)"
$(BUILD)/test_arexx
sh tests/test_arexx_examples.sh
else
@echo "Fixture tests run on the POSIX host: make PLATFORM=posix test"
endif
door-test: check-sdk
ifeq ($(PLATFORM),posix)
$(MAKE) $(BUILD)/test_door PLATFORM=posix AMIAPI_DIR="$(AMIAPI_DIR)"
$(BUILD)/test_door
else
@echo "Door fixture tests run on the POSIX host: make PLATFORM=posix door-test"
endif
$(BUILD)/test_door: tests/test_door.c $(DOOR_OBJ) $(COMMON_OBJ) $(AMIAPI_LIB)
$(CC) $(CPPFLAGS) $(CFLAGS) $< $(DOOR_OBJ) $(COMMON_OBJ) $(AMIAPI_LIB) $(LDLIBS) -lm -o $@
$(BUILD)/test_openmeteo: tests/test_openmeteo.c $(COMMON_OBJ) $(AMIAPI_LIB)
$(CC) $(CPPFLAGS) $(CFLAGS) $< $(COMMON_OBJ) $(AMIAPI_LIB) $(LDLIBS) -lm -o $@
$(BUILD)/test_preferences: tests/test_preferences.c $(COMMON_OBJ) $(AMIAPI_LIB)
$(CC) $(CPPFLAGS) $(CFLAGS) $< $(COMMON_OBJ) $(AMIAPI_LIB) $(LDLIBS) -lm -o $@
$(BUILD)/test_arexx: tests/test_arexx.c $(COMMON_OBJ) $(AMIAPI_LIB)
$(CC) $(CPPFLAGS) $(CFLAGS) $< $(COMMON_OBJ) $(AMIAPI_LIB) $(LDLIBS) -lm -o $@
smoke: all
ifeq ($(PLATFORM),posix)
$(PROGRAM)
else
@echo "Run the Amiga executable on a configured AmigaOS system."
endif
release: PLATFORM := amiga
release: all
sh scripts/make_release.sh
sh scripts/validate_release.sh
validate-release:
sh scripts/validate_release.sh
door-release:
sh scripts/make_door_release.sh
clean:
rm -rf build