for d in $(DIRS) {
SOURCES += [ Wildcard $(d) : *.c *.h ] ;
}
+
+actions RunGenerator bind GENERATOR {
+ $(GENERATOR) $(>) > $(<)
+}
+
+rule BuiltinGenerator {
+ local target = [ LocateTarget $(<) : $(SUBDIR) ] ;
+ local source = [ SearchSource $(>) ] ;
+ local generator = [ SearchSource $(3) ] ;
+ local header = $(target) ;
+ Depends $(<) : $(target) ;
+ Depends $(target) : $(generator) ;
+ Depends $(target) : $(source) ;
+ RunGenerator $(target) : $(source) ;
+ GENERATOR on $(target) = $(generator) ;
+
+ Includes $(header:G=) : $(header) ;
+
+ Clean clean : $(target) ;
+
+ return $(target) ;
+}
+BuiltinGenerator gen_builtins.h : builtins/builtins.c : create_builtins_h.sh ;
+
Application cparser : $(SOURCES) ;
CppFlags cparser : -DFIRM_BACKEND -I$(top_srcdir)/libfirm/include ;
IncludeDir cparser : . ;
parser.c \
ast.c \
ast2firm.c \
+ builtins.c \
diagnostic.c \
driver/firm_cmdline.c \
driver/firm_codegen.c \
@echo "===> MKDIR $@"
$(Q)mkdir -p $@
-builtins.h: builtins/builtins.c create_builtins_h.sh
+gen_builtins.h: builtins/builtins.c create_builtins_h.sh
@echo '===> CREATE_BUILTINS $<'
- $(Q)./create_builtins_h.sh > $@
+ $(Q)./create_builtins_h.sh "$<" > $@
-main.c: builtins.h
+main.c: gen_builtins.h
build/cpb/%.o: %.c build/cparser
@echo '===> CPARSER $<'
#!/bin/sh
+INPUT="$1"
+
cat <<__EOF__
/* WARNING: automatically generated file. Generated from builtins/builtins.c */
static const char builtins[] =
__EOF__
-cat builtins/builtins.c | sed -e "s/^/\\\"/g" -e "s/$/\\\n\\\"/g"
+cat "$INPUT" | sed -e "s/^/\\\"/g" -e "s/$/\\\n\\\"/g"
cat << __EOF__
;