Feat: auto build native

This commit is contained in:
zijiren233 2024-01-13 18:01:22 +08:00
parent dedd7d04da
commit 31d51da744
3 changed files with 155 additions and 68 deletions

View File

@ -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

View File

@ -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

View File

@ -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