mirror of
https://github.com/richfelker/musl-cross-make.git
synced 2025-04-19 15:34:58 +02:00
Feat: auto build native
This commit is contained in:
parent
dedd7d04da
commit
31d51da744
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
SOURCES = sources
|
SOURCES = sources
|
||||||
|
|
||||||
CONFIG_SUB_REV = 28ea239c53a2
|
CONFIG_SUB_REV = 28ea239c53a2
|
||||||
GCC_VER = 13.2.0
|
GCC_VER = 11.4.0
|
||||||
MUSL_VER = 1.2.4
|
MUSL_VER = 1.2.4
|
||||||
BINUTILS_VER = 2.41
|
BINUTILS_VER = 2.41
|
||||||
GMP_VER = 6.3.0
|
GMP_VER = 6.3.0
|
||||||
|
@ -29,30 +29,6 @@ ifeq ($(CPUS),)
|
|||||||
CPUS = $(shell if command -v nproc >/dev/null 2>&1; then nproc; else echo 1; fi)
|
CPUS = $(shell if command -v nproc >/dev/null 2>&1; then nproc; else echo 1; fi)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CC_COMPILER),)
|
|
||||||
FULL_CC = gcc
|
|
||||||
else
|
|
||||||
FULL_CC = $(CC_COMPILER)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(CXX_COMPILER),)
|
|
||||||
FULL_CXX = g++
|
|
||||||
else
|
|
||||||
FULL_CXX = $(CXX_COMPILER)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(FC_COMPILER),)
|
|
||||||
FULL_FC = gfortran
|
|
||||||
else
|
|
||||||
FULL_FC = $(FC_COMPILER)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(STATIC),)
|
|
||||||
COMMON_CONFIG += CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)
|
|
||||||
else
|
|
||||||
COMMON_CONFIG += CC="$(FULL_CC) -static --static" CXX="$(FULL_CXX) -static --static" FC="$(FULL_FC) -static --static"
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(findstring musl,$(TARGET)),)
|
ifneq ($(findstring musl,$(TARGET)),)
|
||||||
MINGW_SRCDIR =
|
MINGW_SRCDIR =
|
||||||
# # https://wiki.musl-libc.org/getting-started.html#Notes_on_ARM_Float_Mode
|
# # https://wiki.musl-libc.org/getting-started.html#Notes_on_ARM_Float_Mode
|
||||||
@ -182,19 +158,42 @@ FULL_MINGW_CRT_CONFIG = $(MINGW_CONFIG) $(MINGW_CRT_CONFIG) \
|
|||||||
FULL_MINGW_PTHREADS_CONFIG = $(MINGW_CONFIG) \
|
FULL_MINGW_PTHREADS_CONFIG = $(MINGW_CONFIG) \
|
||||||
--prefix= --host=$(TARGET) --with-sysroot=$(SYSROOT)
|
--prefix= --host=$(TARGET) --with-sysroot=$(SYSROOT)
|
||||||
|
|
||||||
ifneq ($(NATIVE),)
|
|
||||||
HOST := $(TARGET)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(BUILD),)
|
ifeq ($(BUILD),)
|
||||||
GUESS = $(shell cd $(GCC_SRCDIR) && ./config.guess)
|
GUESS = $(shell cd $(GCC_SRCDIR) && ./config.guess)
|
||||||
TARGET_CANON = $(shell cd $(GCC_SRCDIR) && ./config.sub $(TARGET))
|
TARGET_CANON = $(shell cd $(GCC_SRCDIR) && ./config.sub $(TARGET))
|
||||||
BUILD = $(GUESS)$(if $(subst $(TARGET_CANON),,$(GUESS)),,xx)
|
BUILD = $(GUESS)$(if $(subst $(TARGET_CANON),,$(GUESS)),,xx)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(HOST),)
|
ifeq ($(NATIVE),)
|
||||||
SYSROOT = /$(TARGET)
|
SYSROOT = /$(TARGET)
|
||||||
FULL_BINUTILS_CONFIG += --build=$(BUILD) --host=$(BUILD)
|
ifeq ($(CC_COMPILER),)
|
||||||
|
CC_PATH = $(shell which gcc)
|
||||||
|
else
|
||||||
|
CC_PATH = $(shell which $(CC_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CXX_COMPILER),)
|
||||||
|
CXX_PATH = $(shell which g++)
|
||||||
|
else
|
||||||
|
CXX_PATH = $(shell which $(CXX_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(FC_COMPILER),)
|
||||||
|
FC_PATH = $(shell which gfortran)
|
||||||
|
else
|
||||||
|
FC_PATH = $(shell which $(FC_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(STATIC),)
|
||||||
|
FULL_CC = $(CC_PATH) -static --static
|
||||||
|
FULL_CXX = $(CXX_PATH) -static --static
|
||||||
|
FULL_FC = $(FC_PATH) -static --static
|
||||||
|
endif
|
||||||
|
|
||||||
|
COMMON_CONFIG += CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)"
|
||||||
|
|
||||||
|
FULL_BINUTILS_CONFIG += --build=$(BUILD) --host=$(BUILD) \
|
||||||
|
CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)"
|
||||||
FULL_GCC_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot \
|
FULL_GCC_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot \
|
||||||
AR_FOR_TARGET=$(PWD)/obj_binutils/binutils/ar \
|
AR_FOR_TARGET=$(PWD)/obj_binutils/binutils/ar \
|
||||||
AS_FOR_TARGET=$(PWD)/obj_binutils/gas/as-new \
|
AS_FOR_TARGET=$(PWD)/obj_binutils/gas/as-new \
|
||||||
@ -205,8 +204,9 @@ FULL_GCC_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot \
|
|||||||
RANLIB_FOR_TARGET=$(PWD)/obj_binutils/binutils/ranlib \
|
RANLIB_FOR_TARGET=$(PWD)/obj_binutils/binutils/ranlib \
|
||||||
READELF_FOR_TARGET=$(PWD)/obj_binutils/binutils/readelf \
|
READELF_FOR_TARGET=$(PWD)/obj_binutils/binutils/readelf \
|
||||||
STRIP_FOR_TARGET=$(PWD)/obj_binutils/binutils/strip-new \
|
STRIP_FOR_TARGET=$(PWD)/obj_binutils/binutils/strip-new \
|
||||||
--build=$(BUILD) --host=$(BUILD) \
|
CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)" \
|
||||||
# end
|
--build=$(BUILD) --host=$(BUILD)
|
||||||
|
|
||||||
FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_gcc/$(TARGET)/libgcc/libgcc.a"
|
FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_gcc/$(TARGET)/libgcc/libgcc.a"
|
||||||
MUSL_VARS = AR=../obj_binutils/binutils/ar RANLIB=../obj_binutils/binutils/ranlib
|
MUSL_VARS = AR=../obj_binutils/binutils/ar RANLIB=../obj_binutils/binutils/ranlib
|
||||||
MINGW_VARS = AS="$(XAS)" AR="$(XAR)" CC="$(XGCC)" RANLIB="$(XRANLIB)"
|
MINGW_VARS = AS="$(XAS)" AR="$(XAR)" CC="$(XGCC)" RANLIB="$(XRANLIB)"
|
||||||
@ -225,9 +225,67 @@ obj_gcc/.lc_built: | obj_sysroot/.lc_libs_crt obj_sysroot/.lc_headers
|
|||||||
endif
|
endif
|
||||||
obj_gcc/.lc_configured: obj_binutils/.lc_built
|
obj_gcc/.lc_configured: obj_binutils/.lc_built
|
||||||
else
|
else
|
||||||
|
# native build
|
||||||
SYSROOT = /
|
SYSROOT = /
|
||||||
FULL_BINUTILS_CONFIG += --build=$(BUILD) --host=$(HOST)
|
|
||||||
FULL_GCC_CONFIG += --build=$(BUILD) --host=$(HOST)
|
check-target-musl:
|
||||||
|
@if ! command -v $(TARGET)-gcc >/dev/null; then \
|
||||||
|
echo "$(TARGET)-gcc not found in the environment"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@if ! command -v $(TARGET)-ar >/dev/null; then \
|
||||||
|
echo "$(TARGET)-ar not found in the environment"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
check-target-mingw:
|
||||||
|
@if ! command -v $(TARGET)-gcc >/dev/null; then \
|
||||||
|
echo "$(TARGET)-gcc not found in the environment"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@if ! command -v $(TARGET)-ar >/dev/null; then \
|
||||||
|
echo "$(TARGET)-ar not found in the environment"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
obj_mingw_headers/.lc_configured: | check-target-mingw
|
||||||
|
obj_mingw_crt/.lc_configured: | check-target-mingw
|
||||||
|
obj_mingw_pthreads/.lc_configured: | check-target-mingw
|
||||||
|
obj_musl/.lc_configured: | check-target-musl
|
||||||
|
obj_musl/.lc_built: | check-target-musl
|
||||||
|
obj_gcc/gcc/.lc_built: | check-target-musl
|
||||||
|
obj_gcc/.lc_built: | check-target-musl
|
||||||
|
obj_gcc/.lc_configured: | check-target-musl
|
||||||
|
|
||||||
|
ifeq ($(CC_COMPILER),)
|
||||||
|
CC_PATH = $(shell which $(TARGET)-gcc)
|
||||||
|
else
|
||||||
|
CC_PATH = $(shell which $(CC_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CXX_COMPILER),)
|
||||||
|
CXX_PATH = $(shell which $(TARGET)-g++)
|
||||||
|
else
|
||||||
|
CXX_PATH = $(shell which $(CXX_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(FC_COMPILER),)
|
||||||
|
FC_PATH = $(shell which $(TARGET)-gfortran)
|
||||||
|
else
|
||||||
|
FC_PATH = $(shell which $(FC_COMPILER))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(STATIC),)
|
||||||
|
FULL_CC = $(CC_PATH) -static --static
|
||||||
|
FULL_CXX = $(CXX_PATH) -static --static
|
||||||
|
FULL_FC = $(FC_PATH) -static --static
|
||||||
|
endif
|
||||||
|
|
||||||
|
FULL_BINUTILS_CONFIG += --build=$(BUILD) --host=$(TARGET) \
|
||||||
|
CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)"
|
||||||
|
FULL_GCC_CONFIG += --build=$(BUILD) --host=$(TARGET) \
|
||||||
|
CC="$(FULL_CC)" CXX="$(FULL_CXX)" FC="$(FULL_FC)"
|
||||||
|
FULL_MUSL_CONFIG += --enable-static \
|
||||||
|
--disable-shared
|
||||||
MUSL_VARS =
|
MUSL_VARS =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ function Help() {
|
|||||||
echo "-x: set CXX"
|
echo "-x: set CXX"
|
||||||
echo "-f: set FC"
|
echo "-f: set FC"
|
||||||
echo "-s: static build"
|
echo "-s: static build"
|
||||||
echo "-n: native build"
|
echo "-n: with native build"
|
||||||
echo "-e: skip error (-Wno-error)"
|
echo "-e: skip error (-Wno-error)"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,54 +81,60 @@ function FixArgs() {
|
|||||||
if [ "$SKIP_ERROR" ]; then
|
if [ "$SKIP_ERROR" ]; then
|
||||||
FLAG="${FLAG} -Wno-error"
|
FLAG="${FLAG} -Wno-error"
|
||||||
fi
|
fi
|
||||||
|
mkdir -p "${DIST}"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "mkdir dist dir ${DIST} error"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
DIST="$(cd "$DIST" && pwd)"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "cd dist dir ${DIST} error"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function Build() {
|
function Build() {
|
||||||
TARGET="$1"
|
TARGET="$1"
|
||||||
make TARGET="${TARGET}" \
|
DIST_NAME="${DIST}/${TARGET}"
|
||||||
CONFIG_SUB_REV="28ea239c53a2" \
|
NATIVE_DIST_NAME="${DIST_NAME}-native"
|
||||||
GCC_VER="11.4.0" \
|
|
||||||
MUSL_VER="1.2.4" \
|
make \
|
||||||
BINUTILS_VER="2.41" \
|
TARGET="${TARGET}" \
|
||||||
GMP_VER="6.3.0" \
|
OUTPUT="${DIST_NAME}" \
|
||||||
MPC_VER="1.3.1" \
|
|
||||||
MPFR_VER="4.2.1" \
|
|
||||||
ISL_VER="" \
|
|
||||||
LINUX_VER="" \
|
|
||||||
MINGW_VER="v11.0.1" \
|
|
||||||
CC_COMPILER="${CC}" \
|
|
||||||
CXX_COMPILER="${CXX}" \
|
|
||||||
FC_COMPILER="${FC}" \
|
|
||||||
CHINA="${USE_CHINA_MIRROR}" \
|
|
||||||
STATIC="${STATIC_BUILD}" \
|
|
||||||
NATIVE="${NATIVE_BUILD}" \
|
|
||||||
install
|
install
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "build ${TARGET} error"
|
echo "build ${TARGET} error"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$NATIVE_BUILD" ]; then
|
if [ "$NATIVE_BUILD" ]; then
|
||||||
DIST_NAME="${DIST}/${TARGET}-native"
|
PATH="${DIST_NAME}/bin:${PATH}" \
|
||||||
else
|
make \
|
||||||
DIST_NAME="${DIST}/${TARGET}"
|
TARGET="${TARGET}" \
|
||||||
|
OUTPUT="${NATIVE_DIST_NAME}" \
|
||||||
|
NATIVE=true \
|
||||||
|
install
|
||||||
fi
|
fi
|
||||||
if [ ! "$TEST_BUILD_ONLY" ]; then
|
if [ "$TEST_BUILD_ONLY" ]; then
|
||||||
|
rm -rf "${DIST_NAME}" "${NATIVE_DIST_NAME}"
|
||||||
|
else
|
||||||
if [ "$ENABLE_ARCHIVE" ]; then
|
if [ "$ENABLE_ARCHIVE" ]; then
|
||||||
tar -zcvf "${DIST_NAME}.tgz" -C output/ .
|
tar -zcvf "${DIST_NAME}.tgz" -C "${DIST_NAME}" .
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "package ${TARGET} error"
|
echo "package ${DIST_NAME} error"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
mv output "${DIST_NAME}"
|
if [ "$NATIVE_BUILD" ]; then
|
||||||
|
tar -zcvf "${NATIVE_DIST_NAME}.tgz" -C "${NATIVE_DIST_NAME}" .
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "move ${TARGET} to ${DIST_NAME} error"
|
echo "package ${NATIVE_DIST_NAME} error"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
rm -rf "${DIST_NAME}" "${NATIVE_DIST_NAME}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
rm -rf output/*
|
|
||||||
# rm -rf build/*
|
|
||||||
make clean
|
make clean
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,11 +176,28 @@ i486-w64-mingw32
|
|||||||
i686-w64-mingw32
|
i686-w64-mingw32
|
||||||
x86_64-w64-mingw32'
|
x86_64-w64-mingw32'
|
||||||
|
|
||||||
FLAG="-g0 -O2 -fno-align-functions -fno-align-jumps -fno-align-loops -fno-align-labels"
|
FLAG="-g0 -O2"
|
||||||
|
|
||||||
function BuildAll() {
|
function BuildAll() {
|
||||||
cat >config.mak <<EOF
|
cat >config.mak <<EOF
|
||||||
COMMON_CONFIG += CFLAGS="${FLAG}" CXXFLAGS="${FLAG}" FFLAGS="${FLAG}" LDFLAGS="-s -static --static"
|
CONFIG_SUB_REV = 28ea239c53a2
|
||||||
|
GCC_VER = 11.4.0
|
||||||
|
MUSL_VER = 1.2.4
|
||||||
|
BINUTILS_VER = 2.41
|
||||||
|
GMP_VER = 6.3.0
|
||||||
|
MPC_VER = 1.3.1
|
||||||
|
MPFR_VER = 4.2.1
|
||||||
|
ISL_VER =
|
||||||
|
LINUX_VER = 5.15.2
|
||||||
|
MINGW_VER = v11.0.1
|
||||||
|
|
||||||
|
CC_COMPILER = ${CC}
|
||||||
|
CXX_COMPILER = ${CXX}
|
||||||
|
FC_COMPILER = ${FC}
|
||||||
|
CHINA = ${USE_CHINA_MIRROR}
|
||||||
|
STATIC = ${STATIC_BUILD}
|
||||||
|
|
||||||
|
COMMON_CONFIG += CFLAGS="-g0 -O2" CXXFLAGS="-g0 -O2"
|
||||||
GCC_CONFIG += --enable-languages=c,c++
|
GCC_CONFIG += --enable-languages=c,c++
|
||||||
BINUTILS_CONFIG += --enable-compressed-debug-sections=none
|
BINUTILS_CONFIG += --enable-compressed-debug-sections=none
|
||||||
COMMON_CONFIG += --disable-nls
|
COMMON_CONFIG += --disable-nls
|
||||||
@ -182,7 +205,13 @@ GCC_CONFIG += --disable-libquadmath --disable-decimal-float
|
|||||||
GCC_CONFIG += --disable-libitm
|
GCC_CONFIG += --disable-libitm
|
||||||
GCC_CONFIG += --disable-fixed-point
|
GCC_CONFIG += --disable-fixed-point
|
||||||
GCC_CONFIG += --disable-lto
|
GCC_CONFIG += --disable-lto
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
if [ "$STATIC_BUILD" ]; then
|
||||||
|
echo 'COMMON_CONFIG += LDFLAGS="-s -static --static"' >>config.mak
|
||||||
|
else
|
||||||
|
echo 'COMMON_CONFIG += LDFLAGS="-s"' >>config.mak
|
||||||
|
fi
|
||||||
if [ "$TARGETS_FILE" ]; then
|
if [ "$TARGETS_FILE" ]; then
|
||||||
if [ -f "$TARGETS_FILE" ]; then
|
if [ -f "$TARGETS_FILE" ]; then
|
||||||
while read line; do
|
while read line; do
|
||||||
|
Loading…
Reference in New Issue
Block a user