musl-cross-make/Makefile

188 lines
5.5 KiB
Makefile
Raw Normal View History

2015-08-25 21:32:46 +02:00
SOURCES = sources
2015-08-25 21:32:46 +02:00
CONFIG_SUB_REV = 3d5db9ebe860
BINUTILS_VER = 2.33.1
2020-01-22 07:13:14 +01:00
GCC_VER = 9.2.0
2019-11-10 18:34:26 +01:00
MUSL_VER = 1.1.24
GMP_VER = 6.1.2
MPC_VER = 1.1.0
MPFR_VER = 4.0.2
LINUX_VER = headers-4.19.88
2015-08-25 21:32:46 +02:00
GNU_SITE = https://ftp.gnu.org/pub/gnu
GCC_SITE = $(GNU_SITE)/gcc
BINUTILS_SITE = $(GNU_SITE)/binutils
GMP_SITE = $(GNU_SITE)/gmp
MPC_SITE = $(GNU_SITE)/mpc
MPFR_SITE = $(GNU_SITE)/mpfr
ISL_SITE = http://isl.gforge.inria.fr/
MUSL_SITE = https://www.musl-libc.org/releases
MUSL_REPO = git://git.musl-libc.org/musl
2015-08-25 21:32:46 +02:00
LINUX_SITE = https://cdn.kernel.org/pub/linux/kernel
LINUX_HEADERS_SITE = http://ftp.barfooze.de/pub/sabotage/tarballs/
DL_CMD = wget -c -O
COWPATCH = $(PWD)/cowpatch.sh
HOST = $(if $(NATIVE),$(TARGET))
BUILD_DIR = build/$(if $(HOST),$(HOST),local)/$(TARGET)
OUTPUT = $(CURDIR)/output$(if $(HOST),-$(HOST))
REL_TOP = ../../..
2015-08-25 21:32:46 +02:00
-include config.mak
SRC_DIRS = gcc-$(GCC_VER) binutils-$(BINUTILS_VER) musl-$(MUSL_VER) \
$(if $(GMP_VER),gmp-$(GMP_VER)) \
$(if $(MPC_VER),mpc-$(MPC_VER)) \
$(if $(MPFR_VER),mpfr-$(MPFR_VER)) \
$(if $(ISL_VER),isl-$(ISL_VER)) \
$(if $(LINUX_VER),linux-$(LINUX_VER))
2015-08-25 21:32:46 +02:00
all:
2015-08-25 21:32:46 +02:00
2015-08-25 23:28:55 +02:00
clean:
rm -rf gcc-* binutils-* musl-* gmp-* mpc-* mpfr-* isl-* build build-* linux-*
2015-08-25 23:28:55 +02:00
distclean: clean
rm -rf sources
2015-08-25 21:32:46 +02:00
# Rules for downloading and verifying sources. Treat an external SOURCES path as
# immutable and do not try to download anything into it.
ifeq ($(SOURCES),sources)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/gmp*)): SITE = $(GMP_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/mpc*)): SITE = $(MPC_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/mpfr*)): SITE = $(MPFR_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/isl*)): SITE = $(ISL_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/binutils*)): SITE = $(BINUTILS_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/gcc*)): SITE = $(GCC_SITE)/$(basename $(basename $(notdir $@)))
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/musl*)): SITE = $(MUSL_SITE)
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/linux-4*)): SITE = $(LINUX_SITE)/v4.x
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/linux-3*)): SITE = $(LINUX_SITE)/v3.x
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/linux-2.6*)): SITE = $(LINUX_SITE)/v2.6
$(patsubst hashes/%.sha1,$(SOURCES)/%,$(wildcard hashes/linux-headers-*)): SITE = $(LINUX_HEADERS_SITE)
$(SOURCES):
mkdir -p $@
2015-08-25 21:32:46 +02:00
$(SOURCES)/config.sub: | $(SOURCES)
mkdir -p $@.tmp
cd $@.tmp && $(DL_CMD) $(notdir $@) "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=$(CONFIG_SUB_REV)"
cd $@.tmp && touch $(notdir $@)
cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).$(CONFIG_SUB_REV).sha1
mv $@.tmp/$(notdir $@) $@
rm -rf $@.tmp
$(SOURCES)/%: hashes/%.sha1 | $(SOURCES)
mkdir -p $@.tmp
cd $@.tmp && $(DL_CMD) $(notdir $@) $(SITE)/$(notdir $@)
cd $@.tmp && touch $(notdir $@)
cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).sha1
mv $@.tmp/$(notdir $@) $@
rm -rf $@.tmp
2015-08-25 21:32:46 +02:00
endif
2015-08-25 21:32:46 +02:00
# Rules for extracting and patching sources, or checking them out from git.
2015-08-25 21:32:46 +02:00
musl-git-%:
rm -rf $@.tmp
git clone -b $(patsubst musl-git-%,%,$@) $(MUSL_REPO) $@.tmp
cd $@.tmp && git fsck
mv $@.tmp $@
2015-08-25 21:32:46 +02:00
%.orig: $(SOURCES)/%.tar.gz
case "$@" in */*) exit 1 ;; esac
rm -rf $@.tmp
mkdir $@.tmp
( cd $@.tmp && tar zxvf - ) < $<
rm -rf $@
touch $@.tmp/$(patsubst %.orig,%,$@)
mv $@.tmp/$(patsubst %.orig,%,$@) $@
rm -rf $@.tmp
2015-08-25 21:32:46 +02:00
%.orig: $(SOURCES)/%.tar.bz2
case "$@" in */*) exit 1 ;; esac
rm -rf $@.tmp
mkdir $@.tmp
( cd $@.tmp && tar jxvf - ) < $<
rm -rf $@
touch $@.tmp/$(patsubst %.orig,%,$@)
mv $@.tmp/$(patsubst %.orig,%,$@) $@
rm -rf $@.tmp
2015-08-25 21:32:46 +02:00
%.orig: $(SOURCES)/%.tar.xz
case "$@" in */*) exit 1 ;; esac
rm -rf $@.tmp
mkdir $@.tmp
( cd $@.tmp && tar Jxvf - ) < $<
rm -rf $@
touch $@.tmp/$(patsubst %.orig,%,$@)
mv $@.tmp/$(patsubst %.orig,%,$@) $@
rm -rf $@.tmp
%: %.orig | $(SOURCES)/config.sub
case "$@" in */*) exit 1 ;; esac
rm -rf $@.tmp
mkdir $@.tmp
( cd $@.tmp && find ../$< -path '*/*/*' -prune -exec sh -c 'ln -s "$$@" .' ':' {} + )
test ! -d patches/$@ || cat patches/$@/* | ( cd $@.tmp && $(COWPATCH) -p1 )
test ! -f $</config.sub || ( rm -f $@.tmp/config.sub && cp -f $(SOURCES)/config.sub $@.tmp/ )
rm -rf $@
mv $@.tmp $@
# Add deps for all patched source dirs on their patchsets
$(foreach dir,$(notdir $(basename $(basename $(basename $(wildcard hashes/*))))),$(eval $(dir): $$(wildcard patches/$(dir) patches/$(dir)/*)))
extract_all: | $(SRC_DIRS)
2015-08-25 21:32:46 +02:00
# Rules for building.
2015-08-25 21:32:46 +02:00
ifeq ($(TARGET),)
2015-08-25 21:32:46 +02:00
all:
@echo TARGET must be set via config.mak or command line.
@exit 1
2015-08-25 21:32:46 +02:00
else
2015-08-25 21:32:46 +02:00
$(BUILD_DIR):
mkdir -p $@
2015-08-25 21:32:46 +02:00
$(BUILD_DIR)/Makefile: | $(BUILD_DIR)
ln -sf $(REL_TOP)/litecross/Makefile $@
2015-08-25 21:32:46 +02:00
$(BUILD_DIR)/config.mak: | $(BUILD_DIR)
printf >$@ '%s\n' \
"TARGET = $(TARGET)" \
"HOST = $(HOST)" \
"MUSL_SRCDIR = $(REL_TOP)/musl-$(MUSL_VER)" \
"GCC_SRCDIR = $(REL_TOP)/gcc-$(GCC_VER)" \
"BINUTILS_SRCDIR = $(REL_TOP)/binutils-$(BINUTILS_VER)" \
$(if $(GMP_VER),"GMP_SRCDIR = $(REL_TOP)/gmp-$(GMP_VER)") \
$(if $(MPC_VER),"MPC_SRCDIR = $(REL_TOP)/mpc-$(MPC_VER)") \
$(if $(MPFR_VER),"MPFR_SRCDIR = $(REL_TOP)/mpfr-$(MPFR_VER)") \
$(if $(ISL_VER),"ISL_SRCDIR = $(REL_TOP)/isl-$(ISL_VER)") \
$(if $(LINUX_VER),"LINUX_SRCDIR = $(REL_TOP)/linux-$(LINUX_VER)") \
"-include $(REL_TOP)/config.mak"
2015-08-25 21:32:46 +02:00
all: | $(SRC_DIRS) $(BUILD_DIR) $(BUILD_DIR)/Makefile $(BUILD_DIR)/config.mak
cd $(BUILD_DIR) && $(MAKE) $@
2015-08-25 21:32:46 +02:00
install: | $(SRC_DIRS) $(BUILD_DIR) $(BUILD_DIR)/Makefile $(BUILD_DIR)/config.mak
cd $(BUILD_DIR) && $(MAKE) OUTPUT=$(OUTPUT) $@
2015-08-25 21:32:46 +02:00
endif
.SECONDARY: