mirror of
https://github.com/richfelker/musl-cross-make.git
synced 2025-03-12 10:07:00 +01:00

the logic for processing the NATIVE var (shortcut for HOST=$(TARGET)) and HOST var took place before inclusion of config.mak, causing NATIVE not to be honored and wrong BUILD_DIR and OUTPUT defaults to be used if either was set from config.mak rather than on the make command line. the current preferred interface is the command line, but the regression was unintentional. to fix it, replace the conditional blocks of the makefile with conditional functions in recursively-expanded variables HOST, BUILD_DIR, and OUTPUT. this way, assignments to NATIVE or HOST that take place later in config.mak will affect the resulting values, as intended.
171 lines
5.0 KiB
Makefile
171 lines
5.0 KiB
Makefile
|
|
SOURCES = sources
|
|
|
|
CONFIG_SUB_REV = 3d5db9ebe860
|
|
BINUTILS_VER = 2.27
|
|
GCC_VER = 6.4.0
|
|
MUSL_VER = 1.1.19
|
|
GMP_VER = 6.1.1
|
|
MPC_VER = 1.0.3
|
|
MPFR_VER = 3.1.4
|
|
LINUX_VER = 4.4.10
|
|
|
|
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
|
|
|
|
LINUX_SITE = https://cdn.kernel.org/pub/linux/kernel
|
|
|
|
DL_CMD = wget -c -O
|
|
|
|
HOST = $(if $(NATIVE),$(TARGET))
|
|
BUILD_DIR = build/$(if $(HOST),$(HOST),local)/$(TARGET)
|
|
OUTPUT = $(CURDIR)/output$(if $(HOST),-$(HOST))
|
|
|
|
REL_TOP = ../../..
|
|
|
|
-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))
|
|
|
|
all:
|
|
|
|
clean:
|
|
rm -rf gcc-* binutils-* musl-* gmp-* mpc-* mpfr-* isl-* build build-* linux-*
|
|
|
|
distclean: clean
|
|
rm -rf sources
|
|
|
|
|
|
# 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
|
|
|
|
$(SOURCES):
|
|
mkdir -p $@
|
|
|
|
$(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
|
|
|
|
endif
|
|
|
|
|
|
# Rules for extracting and patching sources, or checking them out from git.
|
|
|
|
musl-git-%:
|
|
rm -rf $@.tmp
|
|
git clone -b $(patsubst musl-git-%,%,$@) $(MUSL_REPO) $@.tmp
|
|
cd $@.tmp && git fsck
|
|
mv $@.tmp $@
|
|
|
|
%: $(SOURCES)/%.tar.gz | $(SOURCES)/config.sub
|
|
rm -rf $@.tmp
|
|
mkdir $@.tmp
|
|
( cd $@.tmp && tar zxvf - ) < $<
|
|
test ! -d patches/$@ || cat patches/$@/* | ( cd $@.tmp/$@ && patch -p1 )
|
|
test ! -f $@.tmp/$@/config.sub || cp -f $(SOURCES)/config.sub $@.tmp/$@
|
|
rm -rf $@
|
|
touch $@.tmp/$@
|
|
mv $@.tmp/$@ $@
|
|
rm -rf $@.tmp
|
|
|
|
%: $(SOURCES)/%.tar.bz2 | $(SOURCES)/config.sub
|
|
rm -rf $@.tmp
|
|
mkdir $@.tmp
|
|
( cd $@.tmp && tar jxvf - ) < $<
|
|
test ! -d patches/$@ || cat patches/$@/* | ( cd $@.tmp/$@ && patch -p1 )
|
|
test ! -f $@.tmp/$@/config.sub || cp -f $(SOURCES)/config.sub $@.tmp/$@
|
|
rm -rf $@
|
|
touch $@.tmp/$@
|
|
mv $@.tmp/$@ $@
|
|
rm -rf $@.tmp
|
|
|
|
%: $(SOURCES)/%.tar.xz | $(SOURCES)/config.sub
|
|
rm -rf $@.tmp
|
|
mkdir $@.tmp
|
|
( cd $@.tmp && tar Jxvf - ) < $<
|
|
test ! -d patches/$@ || cat patches/$@/* | ( cd $@.tmp/$@ && patch -p1 )
|
|
test ! -f $@.tmp/$@/config.sub || cp -f $(SOURCES)/config.sub $@.tmp/$@
|
|
rm -rf $@
|
|
touch $@.tmp/$@
|
|
mv $@.tmp/$@ $@
|
|
rm -rf $@.tmp
|
|
|
|
extract_all: | $(SRC_DIRS)
|
|
|
|
|
|
# Rules for building.
|
|
|
|
ifeq ($(TARGET),)
|
|
|
|
all:
|
|
@echo TARGET must be set via config.mak or command line.
|
|
@exit 1
|
|
|
|
else
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(BUILD_DIR)/Makefile: | $(BUILD_DIR)
|
|
ln -sf $(REL_TOP)/litecross/Makefile $@
|
|
|
|
$(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"
|
|
|
|
all: | $(SRC_DIRS) $(BUILD_DIR) $(BUILD_DIR)/Makefile $(BUILD_DIR)/config.mak
|
|
cd $(BUILD_DIR) && $(MAKE) $@
|
|
|
|
install: | $(SRC_DIRS) $(BUILD_DIR) $(BUILD_DIR)/Makefile $(BUILD_DIR)/config.mak
|
|
cd $(BUILD_DIR) && $(MAKE) OUTPUT=$(OUTPUT) $@
|
|
|
|
endif
|