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

the default is ordered such that user-provided config variables in config.mak or on the make command line can still override it. this is a dubious anti-ROP feature with high cost (file size, load time, VMA count consumed per library), and historically was broken in some binutils versions. the ones we use don't seem to be affected, but it's better to have it off anyway.
274 lines
7.3 KiB
Makefile
274 lines
7.3 KiB
Makefile
|
|
OUTPUT = $(CURDIR)/output
|
|
|
|
BINUTILS_SRCDIR = BINUTILS_SRCDIR_not_set
|
|
GCC_SRCDIR = GCC_SRCDIR_not_set
|
|
MUSL_SRCDIR = MUSL_SRCDIR_not_set
|
|
|
|
GCC_CONFIG_FOR_TARGET =
|
|
COMMON_CONFIG =
|
|
GCC_CONFIG =
|
|
TOOLCHAIN_CONFIG =
|
|
|
|
XGCC_DIR = ../obj_gcc/gcc
|
|
XGCC = $(XGCC_DIR)/xgcc -B $(XGCC_DIR)
|
|
|
|
-include config.mak
|
|
|
|
ifneq ($(findstring fdpic,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --enable-fdpic
|
|
endif
|
|
|
|
ifneq ($(filter x86_64%x32,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-abi=x32
|
|
endif
|
|
|
|
ifneq ($(findstring powerpc64,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-abi=elfv2
|
|
endif
|
|
|
|
ifneq ($(findstring mips64,$(TARGET))$(findstring mipsisa64,$(TARGET)),)
|
|
ifneq ($(findstring n32,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-abi=n32
|
|
else
|
|
GCC_CONFIG_FOR_TARGET += --with-abi=64
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(findstring s390x,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-long-double-128
|
|
endif
|
|
|
|
ifneq ($(filter %sf,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-float=soft
|
|
endif
|
|
|
|
ifneq ($(filter %hf,$(TARGET)),)
|
|
GCC_CONFIG_FOR_TARGET += --with-float=hard
|
|
endif
|
|
|
|
ifneq ($(LIBTOOL),)
|
|
LIBTOOL_ARG = LIBTOOL=$(LIBTOOL)
|
|
endif
|
|
|
|
MAKE += MULTILIB_OSDIRNAMES=
|
|
MAKE += INFO_DEPS= infodir=
|
|
MAKE += ac_cv_prog_lex_root=lex.yy.c
|
|
MAKE += MAKEINFO=false
|
|
|
|
FULL_BINUTILS_CONFIG = \
|
|
--disable-separate-code \
|
|
$(COMMON_CONFIG) $(BINUTILS_CONFIG) $(TOOLCHAIN_CONFIG) \
|
|
--disable-werror \
|
|
--target=$(TARGET) --prefix= \
|
|
--libdir=/lib --disable-multilib \
|
|
--with-sysroot=$(SYSROOT) \
|
|
--enable-deterministic-archives
|
|
|
|
FULL_GCC_CONFIG = --enable-languages=c,c++ \
|
|
$(GCC_CONFIG_FOR_TARGET) \
|
|
$(COMMON_CONFIG) $(GCC_CONFIG) $(TOOLCHAIN_CONFIG) \
|
|
--disable-werror \
|
|
--target=$(TARGET) --prefix= \
|
|
--libdir=/lib --disable-multilib \
|
|
--with-sysroot=$(SYSROOT) \
|
|
--enable-tls \
|
|
--disable-libmudflap --disable-libsanitizer \
|
|
--disable-gnu-indirect-function \
|
|
--disable-libmpx \
|
|
--enable-libstdcxx-time
|
|
|
|
FULL_MUSL_CONFIG = $(MUSL_CONFIG) \
|
|
--prefix= --host=$(TARGET)
|
|
|
|
ifneq ($(NATIVE),)
|
|
HOST:=$(TARGET)
|
|
endif
|
|
|
|
ifeq ($(HOST),)
|
|
SYSROOT = /$(TARGET)
|
|
FULL_GCC_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot \
|
|
AR_FOR_TARGET=$(PWD)/obj_binutils/binutils/ar \
|
|
AS_FOR_TARGET=$(PWD)/obj_binutils/gas/as-new \
|
|
LD_FOR_TARGET=$(PWD)/obj_binutils/ld/ld-new \
|
|
NM_FOR_TARGET=$(PWD)/obj_binutils/binutils/nm-new \
|
|
OBJCOPY_FOR_TARGET=$(PWD)/obj_binutils/binutils/objcopy \
|
|
OBJDUMP_FOR_TARGET=$(PWD)/obj_binutils/binutils/objdump \
|
|
RANLIB_FOR_TARGET=$(PWD)/obj_binutils/binutils/ranlib \
|
|
READELF_FOR_TARGET=$(PWD)/obj_binutils/binutils/readelf \
|
|
STRIP_FOR_TARGET=$(PWD)/obj_binutils/binutils/strip-new \
|
|
# end
|
|
FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_gcc/$(TARGET)/libgcc/libgcc.a"
|
|
MUSL_VARS = AR=../obj_binutils/binutils/ar RANLIB=../obj_binutils/binutils/ranlib
|
|
obj_musl/.lc_configured: | obj_gcc/gcc/.lc_built
|
|
obj_musl/.lc_built: | obj_gcc/$(TARGET)/libgcc/libgcc.a
|
|
obj_gcc/gcc/.lc_built: | obj_sysroot/usr obj_sysroot/lib32 obj_sysroot/lib64 obj_sysroot/include
|
|
obj_gcc/.lc_built: | obj_sysroot/.lc_libs obj_sysroot/.lc_headers
|
|
obj_gcc/.lc_configured: obj_binutils/.lc_built
|
|
else
|
|
SYSROOT = /
|
|
FULL_BINUTILS_CONFIG += --host=$(HOST)
|
|
FULL_GCC_CONFIG += --host=$(HOST)
|
|
MUSL_VARS =
|
|
endif
|
|
|
|
ifeq ($(TARGET),)
|
|
|
|
all:
|
|
@echo TARGET must be set.
|
|
@exit 1
|
|
|
|
install: all
|
|
|
|
else
|
|
|
|
all: musl gcc binutils
|
|
|
|
install: install-musl install-gcc install-binutils
|
|
|
|
musl: obj_musl/.lc_built
|
|
|
|
toolchain: gcc binutils
|
|
|
|
install-toolchain: install-gcc install-binutils
|
|
|
|
gcc: obj_gcc/.lc_built
|
|
|
|
binutils: obj_binutils/.lc_built
|
|
|
|
.PHONY: all musl toolchain install-musl install-toolchain clean
|
|
|
|
src_binutils: | $(BINUTILS_SRCDIR)
|
|
ln -sf $(BINUTILS_SRCDIR) $@
|
|
|
|
src_gcc_base: | $(GCC_SRCDIR)
|
|
ln -sf $(GCC_SRCDIR) $@
|
|
|
|
src_musl: | $(MUSL_SRCDIR)
|
|
ln -sf $(MUSL_SRCDIR) $@
|
|
|
|
ifneq ($(GMP_SRCDIR),)
|
|
src_gcc: src_gmp
|
|
src_gmp: | $(GMP_SRCDIR)
|
|
ln -sf "$(GMP_SRCDIR)" $@
|
|
endif
|
|
|
|
ifneq ($(MPC_SRCDIR),)
|
|
src_gcc: src_mpc
|
|
src_mpc: | $(MPC_SRCDIR)
|
|
ln -sf "$(MPC_SRCDIR)" $@
|
|
endif
|
|
|
|
ifneq ($(MPFR_SRCDIR),)
|
|
src_gcc: src_mpfr
|
|
src_mpfr: | $(MPFR_SRCDIR)
|
|
ln -sf "$(MPFR_SRCDIR)" $@
|
|
endif
|
|
|
|
ifneq ($(ISL_SRCDIR),)
|
|
src_gcc: src_isl
|
|
src_isl: | $(ISL_SRCDIR)
|
|
ln -sf "$(ISL_SRCDIR)" $@
|
|
endif
|
|
|
|
src_gcc: src_gcc_base
|
|
rm -rf $@ $@.tmp
|
|
mkdir $@.tmp
|
|
cd $@.tmp && ln -sf ../src_gcc_base/* .
|
|
$(if $(GMP_SRCDIR),cd $@.tmp && ln -sf ../src_gmp gmp)
|
|
$(if $(MPC_SRCDIR),cd $@.tmp && ln -sf ../src_mpc mpc)
|
|
$(if $(MPFR_SRCDIR),cd $@.tmp && ln -sf ../src_mpfr mpfr)
|
|
$(if $(ISL_SRCDIR),cd $@.tmp && ln -sf ../src_isl isl)
|
|
mv $@.tmp $@
|
|
|
|
obj_%:
|
|
mkdir -p $@
|
|
|
|
obj_sysroot/include:
|
|
mkdir -p $@
|
|
|
|
obj_sysroot/usr: | obj_sysroot
|
|
ln -sf . $@
|
|
|
|
obj_sysroot/lib32: | obj_sysroot
|
|
ln -sf lib $@
|
|
|
|
obj_sysroot/lib64: | obj_sysroot
|
|
ln -sf lib $@
|
|
|
|
obj_binutils/.lc_configured: | obj_binutils src_binutils
|
|
cd obj_binutils && ../src_binutils/configure $(FULL_BINUTILS_CONFIG)
|
|
touch $@
|
|
|
|
obj_binutils/.lc_built: | obj_binutils/.lc_configured
|
|
cd obj_binutils && $(MAKE) MAKE="$(MAKE) $(LIBTOOL_ARG)" all
|
|
touch $@
|
|
|
|
obj_gcc/.lc_configured: | obj_gcc src_gcc
|
|
cd obj_gcc && ../src_gcc/configure $(FULL_GCC_CONFIG)
|
|
touch $@
|
|
|
|
obj_gcc/gcc/.lc_built: | obj_gcc/.lc_configured
|
|
cd obj_gcc && $(MAKE) MAKE="$(MAKE) $(LIBTOOL_ARG)" all-gcc
|
|
touch $@
|
|
|
|
obj_musl/.lc_configured: | obj_musl src_musl
|
|
cd obj_musl && ../src_musl/configure $(FULL_MUSL_CONFIG)
|
|
touch $@
|
|
|
|
obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot
|
|
cd obj_musl && $(MAKE) DESTDIR=$(CURDIR)/obj_sysroot install-headers
|
|
touch $@
|
|
|
|
obj_gcc/$(TARGET)/libgcc/libgcc.a: | obj_sysroot/.lc_headers
|
|
cd obj_gcc && $(MAKE) MAKE="$(MAKE) enable_shared=no $(LIBTOOL_ARG)" all-target-libgcc
|
|
|
|
obj_musl/.lc_built: | obj_musl/.lc_configured
|
|
cd obj_musl && $(MAKE) $(MUSL_VARS)
|
|
touch $@
|
|
|
|
obj_sysroot/.lc_libs: | obj_musl/.lc_built
|
|
cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(CURDIR)/obj_sysroot install
|
|
touch $@
|
|
|
|
obj_gcc/.lc_built: | obj_gcc/.lc_configured obj_gcc/gcc/.lc_built
|
|
cd obj_gcc && $(MAKE) MAKE="$(MAKE) $(LIBTOOL_ARG)"
|
|
touch $@
|
|
|
|
install-musl: | obj_musl/.lc_built
|
|
cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(DESTDIR)$(OUTPUT)$(SYSROOT) install
|
|
|
|
install-binutils: | obj_binutils/.lc_built
|
|
cd obj_binutils && $(MAKE) MAKE="$(MAKE) $(LIBTOOL_ARG)" DESTDIR=$(DESTDIR)$(OUTPUT) install
|
|
|
|
install-gcc: | obj_gcc/.lc_built
|
|
cd obj_gcc && $(MAKE) MAKE="$(MAKE) $(LIBTOOL_ARG)" DESTDIR=$(DESTDIR)$(OUTPUT) install
|
|
ln -sf $(TARGET)-gcc $(DESTDIR)$(OUTPUT)/bin/$(TARGET)-cc
|
|
|
|
ifneq ($(LINUX_SRCDIR),)
|
|
TARGET_ARCH = $(firstword $(subst -, ,$(TARGET)))
|
|
TARGET_ARCH_MANGLED = $(patsubst i%86,x86,$(patsubst aarch64%,arm64%,$(TARGET_ARCH)))
|
|
LINUX_ARCH_LIST = $(sort $(notdir $(wildcard $(LINUX_SRCDIR)/arch/*)))
|
|
LINUX_ARCH = $(lastword $(foreach a,$(LINUX_ARCH_LIST),$(if $(filter $(a)%,$(TARGET_ARCH_MANGLED)),$(a))))
|
|
ifneq ($(LINUX_ARCH),)
|
|
all: kernel-headers
|
|
install: install-kernel-headers
|
|
kernel-headers: | obj_kernel_headers/.lc_built
|
|
src_kernel_headers: | $(LINUX_SRCDIR)
|
|
ln -sf "$(LINUX_SRCDIR)" $@
|
|
obj_kernel_headers/.lc_built: | src_kernel_headers
|
|
mkdir -p $(CURDIR)/obj_kernel_headers/staged
|
|
cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) O=$(CURDIR)/obj_kernel_headers INSTALL_HDR_PATH=$(CURDIR)/obj_kernel_headers/staged headers_install
|
|
find obj_kernel_headers/staged/include '(' -name .install -o -name ..install.cmd ')' -exec rm {} +
|
|
touch $@
|
|
install-kernel-headers: | obj_kernel_headers/.lc_built
|
|
mkdir -p $(DESTDIR)$(OUTPUT)$(SYSROOT)/include
|
|
cp -R obj_kernel_headers/staged/include/* $(DESTDIR)$(OUTPUT)$(SYSROOT)/include
|
|
endif
|
|
endif
|
|
|
|
endif
|
|
|
|
clean:
|
|
rm -rf src_* obj_*
|