2019-03-21 22:54:06 +01:00
|
|
|
#! /usr/bin/make -f
|
|
|
|
|
|
|
|
# Require config file if not cleaning up
|
|
|
|
ifeq "$(filter clean distclean,$(MAKECMDGOALS))" ""
|
|
|
|
include Makefile.cfg
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Compiler flags
|
2019-05-03 11:19:36 +02:00
|
|
|
cflags = -Wall -Wextra -std=c11 -g -I $(dir $<) -D_GNU_SOURCE \
|
2019-03-21 22:54:06 +01:00
|
|
|
-DFXSDK_PREFIX='"$(PREFIX)"' $(CFLAGS)
|
|
|
|
# Linker flags
|
|
|
|
lflags = -lpng
|
|
|
|
# Dependency generation flags
|
|
|
|
dflags = -MT $@ -MMD -MP -MF $(@:%.o=%.d)
|
|
|
|
|
|
|
|
#
|
|
|
|
# Main targets and symbolic targets
|
|
|
|
# $TARGETS is provided by Makefile.cfg.
|
|
|
|
#
|
|
|
|
|
2020-02-13 22:13:04 +01:00
|
|
|
TARGETS := $(filter-out fxconv,$(TARGETS))
|
|
|
|
TARGETS := $(TARGETS:fxsdk=fxsdk.sh)
|
2019-03-21 22:54:06 +01:00
|
|
|
bin = $(TARGETS:%=bin/%)
|
|
|
|
|
2019-06-16 17:58:30 +02:00
|
|
|
# fxconv has no sources files because it's written in Python, and fxsdk has no
|
|
|
|
# source either because it's written in Bash.
|
2019-03-21 22:54:06 +01:00
|
|
|
src = $(wildcard $1/*.c)
|
|
|
|
src-fxg1a := $(call src,fxg1a)
|
|
|
|
src-fxos := $(call src,fxos)
|
2019-05-03 11:19:36 +02:00
|
|
|
lex-fxos := $(wildcard fxos/*.l)
|
2019-03-21 22:54:06 +01:00
|
|
|
|
2019-05-03 11:19:36 +02:00
|
|
|
obj = $($1:%=build/%.o)
|
|
|
|
lex = $($1:%.l=build/%.yy.c.o)
|
|
|
|
obj-fxg1a := $(call obj,src-fxg1a)
|
|
|
|
obj-fxos := $(call obj,src-fxos) $(call lex,lex-fxos)
|
2019-03-21 22:54:06 +01:00
|
|
|
|
2020-02-13 22:13:04 +01:00
|
|
|
# Sed command to copy install path to fxsdk.sh. On Mac OS, BSD sed is used so
|
|
|
|
# we need to do it a bit differently with a printf helper to insert a literal
|
|
|
|
# newline into the command.
|
|
|
|
sed := '/^PREFIX=\\$$/ a \$(PREFIX)'
|
|
|
|
ifeq "$(shell uname)" "Darwin"
|
|
|
|
sed := "$$(printf '/^PREFIX=/ a \\\n$(PREFIX)')"
|
|
|
|
endif
|
|
|
|
|
2019-03-21 22:54:06 +01:00
|
|
|
# Symbolic targets
|
|
|
|
|
|
|
|
all: $(bin)
|
|
|
|
|
2020-02-13 22:13:04 +01:00
|
|
|
all-fxsdk: bin/fxsdk.sh
|
2019-03-21 22:54:06 +01:00
|
|
|
all-fxg1a: bin/fxg1a
|
|
|
|
all-fxos: bin/fxos
|
|
|
|
|
|
|
|
# Explicit targets
|
|
|
|
|
2020-02-19 23:22:11 +01:00
|
|
|
bin/fxsdk.sh: fxsdk/fxsdk.sh | bin/
|
2020-02-13 22:13:04 +01:00
|
|
|
sed -e $(sed) $< > $@
|
2019-03-21 22:54:06 +01:00
|
|
|
bin/fxg1a: $(obj-fxg1a) | bin/
|
|
|
|
gcc $^ -o $@ $(lflags)
|
|
|
|
bin/fxos: $(obj-fxos) | bin/
|
|
|
|
gcc $^ -o $@ $(lflags)
|
|
|
|
|
|
|
|
bin/:
|
|
|
|
mkdir -p $@
|
|
|
|
|
|
|
|
#
|
|
|
|
# Source rules
|
|
|
|
#
|
|
|
|
|
|
|
|
build/%.c.o: %.c
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
gcc -c $< -o $@ $(cflags) $(dflags)
|
|
|
|
|
2019-05-03 11:19:36 +02:00
|
|
|
# Flex lexers for the fxos database
|
|
|
|
build/fxos/lexer-%.yy.c: fxos/lexer-%.l
|
|
|
|
flex -o $@ -s $<
|
|
|
|
build/fxos/lexer-%.yy.c.o: build/fxos/lexer-%.yy.c
|
|
|
|
gcc -c $< -o $@ $(cflags) -Wno-unused-function $(dflags) -I fxos
|
2019-03-21 22:54:06 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Dependency system, misc.
|
|
|
|
#
|
|
|
|
|
|
|
|
include $(wildcard build/*/*.d)
|
|
|
|
|
|
|
|
# Dependency on configuration file
|
|
|
|
Makefile.cfg:
|
|
|
|
@ if [[ ! -f Makefile.cfg ]]; then \
|
|
|
|
echo "error: Makefile.cfg is missing, did you ./configure?" >&2; \
|
|
|
|
false; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
.PHONY: all clean distclean
|
|
|
|
|
2019-06-17 01:47:19 +02:00
|
|
|
.PRECIOUS: build/fxos/lexer-%.yy.c
|
|
|
|
|
2019-03-21 22:54:06 +01:00
|
|
|
#
|
|
|
|
# Installing
|
|
|
|
#
|
|
|
|
|
2019-06-29 17:49:00 +02:00
|
|
|
m644 := -m 644
|
|
|
|
m755 := -m 755
|
|
|
|
|
2020-02-13 22:13:04 +01:00
|
|
|
# Disable -m on Mac OS
|
2019-06-29 17:49:00 +02:00
|
|
|
ifeq "$(shell uname)" "Darwin"
|
|
|
|
m644 :=
|
|
|
|
m755 :=
|
|
|
|
endif
|
|
|
|
|
2019-03-21 22:54:06 +01:00
|
|
|
install: $(bin)
|
|
|
|
install -d $(PREFIX)/bin
|
2019-05-03 11:19:36 +02:00
|
|
|
install -d $(PREFIX)/share/fxsdk
|
2020-02-13 22:13:04 +01:00
|
|
|
install $(bin:bin/fxsdk.sh=) $(m755) $(PREFIX)/bin
|
2019-06-29 17:49:00 +02:00
|
|
|
install fxos/*.txt $(m644) $(PREFIX)/share/fxsdk
|
2019-06-16 17:58:30 +02:00
|
|
|
install -d $(PREFIX)/share/fxsdk/assets
|
2019-06-29 17:49:00 +02:00
|
|
|
install fxsdk/assets/* $(m644) $(PREFIX)/share/fxsdk/assets
|
2020-02-13 22:13:04 +01:00
|
|
|
install bin/fxsdk.sh $(m755) $(PREFIX)/bin/fxsdk
|
2019-06-29 17:49:00 +02:00
|
|
|
install fxconv/fxconv-main.py $(m755) $(PREFIX)/bin/fxconv
|
|
|
|
install fxconv/fxconv.py $(m644) $(PREFIX)/bin
|
2019-03-21 22:54:06 +01:00
|
|
|
|
2019-05-03 11:19:36 +02:00
|
|
|
uninstall:
|
|
|
|
rm -f $(PREFIX)/bin/{fxsdk,fxg1a,fxos,fxconv,fxconv.py}
|
|
|
|
rm -rf $(PREFIX)/share/fxsdk
|
|
|
|
|
2019-03-21 22:54:06 +01:00
|
|
|
#
|
|
|
|
# Cleaning
|
|
|
|
#
|
|
|
|
|
|
|
|
clean-fxg1a:
|
|
|
|
@rm -rf build/fxg1a
|
|
|
|
clean-fxos:
|
|
|
|
@rm -rf build/fxos
|
|
|
|
|
|
|
|
clean:
|
|
|
|
@rm -rf build
|
|
|
|
distclean: clean
|
|
|
|
@rm -rf bin
|
|
|
|
@rm -f Makefile.cfg
|