1 | ifndef ODIN
|
---|
2 | $(error ODIN variable must be set)
|
---|
3 | else
|
---|
4 | ifeq ($(shell ls $(ODIN)/include/odin.h),)
|
---|
5 | $(error $(ODIN) does not contain include/odin.h)
|
---|
6 | endif
|
---|
7 | endif
|
---|
8 |
|
---|
9 | .PHONY: default
|
---|
10 |
|
---|
11 | default: all
|
---|
12 |
|
---|
13 | ODIN_DOS = $(subst /,\,$(ODIN))
|
---|
14 |
|
---|
15 | DEFINES += -D__WIN32OS2__ -D__i386__ -DSTRICT -D_POSIX_SOURCE \
|
---|
16 | -D_POSIX_C_SOURCE=200112 -D_EMX_SOURCE -D_XOPEN_SOURCE=600 \
|
---|
17 | -D_SVID_SOURCE
|
---|
18 |
|
---|
19 | INCLUDES += -I$(ODIN)/include -I$(ODIN)/include/win
|
---|
20 |
|
---|
21 | CFLAGS += $(DEFINES) $(INCLUDES) -g -DDEBUG -L$(ODIN)/lib/Debug -lkernel32.lib
|
---|
22 |
|
---|
23 | WRC = $(ODIN)/tools/wrc/bin/Release/wrc.exe
|
---|
24 |
|
---|
25 | ODIN_FLAVOR := Debug
|
---|
26 |
|
---|
27 | ifneq ($(RELEASE)$(REL),)
|
---|
28 | ODIN_FLAVOR := Release
|
---|
29 | endif
|
---|
30 |
|
---|
31 | RUN_SHELL =
|
---|
32 | DEBUG_SHELL = ipmd
|
---|
33 |
|
---|
34 | run-%: %
|
---|
35 | @echo [Running $<$(if $($<_ARGS), $($<_ARGS)) (shell=$(RUN_SHELL),flavor=$(ODIN_FLAVOR))]
|
---|
36 | @echo.
|
---|
37 | @cmd /c "set BEGINLIBPATH=$(ODIN_DOS)\bin\$(ODIN_FLAVOR);$(ODIN_DOS)\bin;%BEGINLIBPATH% && $(RUN_SHELL) $< $($<_ARGS)"
|
---|
38 | @echo.
|
---|
39 |
|
---|
40 | debug-%: RUN_SHELL = $(DEBUG_SHELL)
|
---|
41 | debug-%: run-%
|
---|
42 | @rem dummy, needed for the pattern rule to work...
|
---|
43 |
|
---|
44 | debug: RUN_SHELL = $(DEBUG_SHELL)
|
---|
45 | debug: run
|
---|
46 |
|
---|
47 | ipmd-%: RUN_SHELL = ipmd
|
---|
48 | ipmd-%: run-%
|
---|
49 | @rem dummy, needed for the pattern rule to work...
|
---|
50 |
|
---|
51 | ipmd: RUN_SHELL = ipmd
|
---|
52 | ipmd: run
|
---|
53 |
|
---|
54 | idbug-%: RUN_SHELL = idbug
|
---|
55 | idbug-%: run-%
|
---|
56 | @rem dummy, needed for the pattern rule to work...
|
---|
57 |
|
---|
58 | idbug: RUN_SHELL = idbug
|
---|
59 | idbug: run
|
---|
60 |
|
---|
61 | r-%: ODIN_FLAVOR = Release
|
---|
62 | r-%: %
|
---|
63 | @rem dummy, needed for the pattern rule to work...
|
---|
64 |
|
---|
65 | d-%: ODIN_FLAVOR = Debug
|
---|
66 | d-%: %
|
---|
67 | @rem dummy, needed for the pattern rule to work...
|
---|
68 |
|
---|
69 | help:
|
---|
70 | @echo.
|
---|
71 | @echo Targets:
|
---|
72 | @echo run-EXE Run EXE in normal shell (default: cmd, RUN_SHELL overrides)
|
---|
73 | @echo debug-EXE Run EXE in debug shell (default: ipmd, DEBUG_SHELL overrides)
|
---|
74 | @echo ipmd-EXE Run EXE in IPMD shell
|
---|
75 | @echo idbug-EXE Run EXE in IDBUG shell
|
---|
76 | @echo.
|
---|
77 | @echo Flavors:
|
---|
78 | @echo d-TARGET Run against debug Odin libraries (default)
|
---|
79 | @echo r-TARGET Run against release Odin libraries (RELEASE=1 makes it default)
|
---|
80 | @echo.
|
---|
81 |
|
---|
82 | %.exe: %.c
|
---|
83 | gcc $^ -Zomf -Zmap -Zlinker /PM:VIO -o $@ $(CFLAGS) $(foreach src, $^, $(CFLAGS.$(src))) $(CFLAGS.$@)
|
---|
84 |
|
---|
85 | %.exe:
|
---|
86 | gcc $^ -Zomf -Zmap -Zlinker /PM:VIO -o $@ $(CFLAGS) $(foreach src, $^, $(CFLAGS.$(src))) $(CFLAGS.$@)
|
---|
87 |
|
---|
88 | %.s: %.c
|
---|
89 | gcc $< -S -Zomf -o $@ $(CFLAGS)
|
---|
90 |
|
---|
91 | %.s: %.rc
|
---|
92 | $(WRC) -s $(DEFINES) $(INCLUDES) $< -o $@
|
---|
93 |
|
---|
94 | CLEAN = *.exe *.map *.log
|
---|
95 |
|
---|
96 | clean::
|
---|
97 | -rm $(CLEAN)
|
---|
98 |
|
---|
99 | define run-with-args-gen
|
---|
100 | .PHONY: run-$(1)-$(2) run-$(1)-$(3)
|
---|
101 | run-$(1)-$(2): $(1)
|
---|
102 | @make -s run-$(1) $(1)_ARGS=$($(1)_ARGS.$(2))
|
---|
103 | run-$(1)-$(3):: run-$(1)-$(2)
|
---|
104 | debug-$(1)-$(2): $(1)
|
---|
105 | @make -s debug-$(1) $(1)_ARGS=$($(1)_ARGS.$(2))
|
---|
106 | endef
|
---|
107 |
|
---|
108 | run-with-args = $(foreach i, $(2), $(eval $(call run-with-args-gen,$(1),$(i),$(3))))run-$(1)-$(3)
|
---|