20c74d64a2f4f1a14abb52cf0323ad1473ed8599
1 ################################################################################
2 # Desc: APC make script
5 ################################################################################
6 # This makefile builds APC, the Asset Package Compiler for Henge, on the system.
7 ################################################################################
14 YCMD
= $(strip $(YACC
) $(YFLAGS
) $(if
$2,$(dir $2))$1)
15 YCMD
+= $(if
$2,&& mv
$(notdir $(1:%.y
=%.tab.
[ch
])) $(dir $2))
20 RLCMD
= $(strip $(RLC
) $(RLFLAGS
) $(if
$2,-o
$2 $(dir $2))$1)
25 CCMD
= $(strip $(CC
) $(CFLAGS
) $(CPPFLAGS
) -c
$(if
$2,-o
$2) $1)
30 LDLIBS ?
= -lc
-lunistring
33 LDCMD
= $(strip $(LD
) $(LDFLAGS
) $(if
$2,-o
$2) $1) $(LDLIBS
) $($1LIBS)
35 # APC is built from Ragel, Bison and C source code only.
36 ySRC
:= $(shell find .
/src
-type f
-name
'*.y')
37 rlSRC
:= $(shell find .
/src
-type f
-name
'*.rl')
38 cSRC
:= $(shell find .
/src
-type f
-name
'*.c')
40 # Generated files from Yacc/Bison and Ragel
41 hGEN
:= $(ySRC
:%.y
=%.tab.h
)
42 cGEN
:= $(strip $(ySRC
:%.y
=%.tab.c
) $(rlSRC
:%.rl
=%.c
))
44 # Filter all other driver objects out of each driver's link commands.
45 OBJ
:= $(patsubst %.c
,%.o
,$(cSRC
) $(cGEN
))
46 $(foreach drv
,$(DRIVERS
),\
47 $(eval OTHERS
:= $(filter-out $(drv
),$(DRIVERS
)))\
48 $(eval
$(drv
)SRC
:= $(filter-out $(OTHERS
:%=\
%/%.o
),$(OBJ
)))\
49 $(eval
$(drv
)-dSRC
:= $($(drv
)SRC
:%.o
=%-d.o
)))
51 # Unless cleaning, deps should be generated for each source file
52 ifeq (,$(filter clean,$(MAKECMDGOALS
)))
53 cGENDEP
= $(if
$(wildcard $1),$(subst $(dir $1),,$(filter-out $1 \
%:,$(shell $(CC
) -MM
-MG
$1))),\
54 $(info [<$1>: no deps
- file not found
]))
57 # Construct the S2S function for generating source files during prerequisite
59 # If we are cleaning, stop. Else print the result of calling '1'. Then, unless
60 # we are in -n mode, invoke the result of calling '1' in the shell
61 $(if
$(filter clean,$(MAKECMDGOALS
)),,$(eval S2S
+= $$(info $$(call
$$1,$$2,$$3)))\
62 $(if
$(filter n
,$(MAKEFLAGS
)),,$(eval S2S
+= $$(shell $$(call
$$1,$$2,$$3)))))
66 $(DRIVERS
:%=%-d
) $(DRIVERS
): $$($$@SRC
) |
$(hGEN
)
67 $(strip $(call LDCMD
,$^
,$@
))
69 %-d.o
: CFLAGS
+= -Og
-ggdb
70 %.o
%-d.o
: %.c
$$(call cGENDEP
,$$(dir $$@
)%.c
)
74 %.tab.c
: %.y
$$(call S2S
,YCMD
,%.y
,$$@
) ;
75 %.c
: %.rl
$$(call S2S
,RLCMD
,%.rl
,$$@
) ;
77 clean: $(wildcard $(cGEN
) $(hGEN
) $(foreach drv
,$(DRIVERS
),$($(drv
)SRC
) $($(drv
)-dSRC
)))