Add the bs build system from mpd-ke
Dealing with autotools is too painful when having to deal with multiple build environments and configurations. git-svn-id: https://svn.musicpd.org/mpd/trunk@7368 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/make -f
|
||||
# default target
|
||||
all:
|
||||
|
||||
# output directory can be set with O:=dir
|
||||
ifeq ($(O),)
|
||||
O := .
|
||||
endif
|
||||
srcdir := src
|
||||
include src/Makefile.am
|
||||
mpd_SRC := $(addprefix src/,$(filter %.c,$(mpd_SOURCES)))
|
||||
mpd_HDR := $(addprefix src/,$(filter %.h,$(mpd_SOURCES)))
|
||||
mpd_OBJ := $(subst .c,.o,$(addprefix $(O)/,$(mpd_SRC)))
|
||||
mpd_DEP := $(subst .o,.d,$(mpd_OBJ))
|
||||
|
||||
-include $(mpd_DEP)
|
||||
|
||||
uname_s := $(shell uname -s | tr A-Z a-z 2>/dev/null || echo unknown)
|
||||
uname_m := $(shell uname -m | tr A-Z a-z 2>/dev/null || echo unknown)
|
||||
|
||||
# build: the machine type this builds on
|
||||
# HOST: the machine this runs on
|
||||
build := $(uname_s)-$(uname_m)
|
||||
HOST ?= $(build)
|
||||
-include $(O)/config.mk
|
||||
-include $(O)/config_detected.mk
|
||||
include bs/deps-audio.mk
|
||||
include bs/deps-input.mk
|
||||
include bs/deps-misc.mk
|
||||
include bs/deps-conflicts.mk
|
||||
|
||||
RANLIB ?= ranlib
|
||||
ifneq ($(HOST),$(build))
|
||||
ifeq ($(origin CC),default)
|
||||
CC := $(HOST)-$(CC)
|
||||
endif
|
||||
ifeq ($(origin RANLIB),default)
|
||||
RANLIB := $(HOST)-$(RANLIB)
|
||||
endif
|
||||
ifeq ($(origin AR),default)
|
||||
AR := $(HOST)-$(AR)
|
||||
endif
|
||||
endif
|
||||
|
||||
mpd_CFLAGS += -I$(O)/src
|
||||
mpd_LDFLAGS += -lm
|
||||
mpd_DIRS := $(O)/src/inputPlugins $(O)/src/audioOutputs
|
||||
|
||||
STRIP ?= strip
|
||||
export O CC CPPFLAGS CFLAGS HOST SHELL
|
||||
|
||||
defconfig: $(O)/config.mk
|
||||
|
||||
$(O)/config.mk:
|
||||
@test -d "$(@D)" || $(SHELL) ./bs/mkdir_p.sh "$(@D)"
|
||||
@if ! test -e $@; then \
|
||||
sed -e 's/@@HOST@@/$(HOST)/g' \
|
||||
< bs/config.mk.default > $@+ && mv $@+ $@ && \
|
||||
echo Please edit $(O)/config.mk to your liking; fi
|
||||
@touch $@
|
||||
|
||||
$(O)/src/../config.h: $(O)/config.h
|
||||
$(O)/config.h: $(O)/config.mk $(O)/config_detected.h
|
||||
$(MAKE) -f bs/mkconfig.h.mk $(O)/config.h
|
||||
|
||||
$(O)/config_detected.h:
|
||||
@test -d "$(@D)" || $(SHELL) ./bs/mkdir_p.sh "$(@D)"
|
||||
> $@+ && $(SHELL) ./bs/mkconfig-header.sh >> $@+ && \
|
||||
$(SHELL) ./bs/cross-arch.sh >> $@+ && mv $@+ $@
|
||||
|
||||
all: $(O)/src/mpd
|
||||
@echo OK $<
|
||||
strip: $(O)/src/mpd
|
||||
$(STRIP) $(STRIP_OPTS) $<
|
||||
$(O)/src/mpd: $(mpd_OBJ)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(mpd_CFLAGS) $(LDFLAGS) $(mpd_LDFLAGS)
|
||||
$(O)/src/%.o: src/%.c $(O)/config.h
|
||||
@HDR_DEP_HACK="$(O)/config.h $(mpd_HDR)" \
|
||||
CFLAGS="$(CFLAGS) $(mpd_CFLAGS)" \
|
||||
$(SHELL) ./bs/mkdep.sh $< $(dir $<) $(subst .o,.d,$@)
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(mpd_CFLAGS) -c -o $@ $<
|
||||
$(mpd_SRC): $(O)/config.h
|
||||
clean:
|
||||
$(RM) $(O)/src/mpd $(mpd_OBJ)
|
||||
reallyclean: clean
|
||||
$(RM) $(mpd_DEP) $(O)/depmode $(O)/config.h
|
||||
|
||||
# in case a .d file had a dep on a deleted file, we have this:
|
||||
src/%.h src/%.c::
|
||||
@true
|
||||
# we only do static linking in bs (since our main goal is cross-compiling),
|
||||
# if you want dynamic linking, use autotools
|
||||
$(O)/%.a::
|
||||
$(RM) $@
|
||||
$(AR) cru $@ $^
|
||||
$(RANLIB) $@
|
||||
dist:
|
||||
$(SHELL) ./bs/mkdist.sh
|
||||
|
||||
.PHONY: clean reallyclean defconfig all
|
||||
.PRECIOUS: $(O)/%.h
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .h .d
|
||||
Reference in New Issue
Block a user