#
# set +o errexit -o noglob -o nounset is assumed.
# Order: stage1_host, runtime_host, libstdcpp_v3_host, full_host, full
# Order: stage1_mingw32, native_mingw32
#
#
# Private subroutines
#
pkgp_gcc_build_dir() { PKG_BUILD_DIR="${1}-${2}-${PKG_TARGET}"; return 0; };
pkgp_gcc_state_set() {
printf "step unknown %s %s\n" "${PKG_NAME}" "${1}" >&3;
ex_pkg_state_set "${PKG_NAME}" "${1}" ${2:+"${2}"};
return 0;
};
pkgp_gcc_configure() {
if ! rtl_fileop rm "${PKG_BASE_DIR}/${PKG_BUILD_DIR}" \
|| ! rtl_fileop mkdir "${PKG_BASE_DIR}/${PKG_BUILD_DIR}" \
|| ! rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}" \
|| ! "../cbb-gcc-${PKG_VERSION}/configure" "${@}" \
--disable-bootstrap \
--disable-libmudflap \
--disable-multilib \
--disable-nls \
--disable-obsolete \
--disable-symvers \
--enable-canonical-system-headers \
--enable-__cxa_atexit \
--enable-debug \
--enable-gnu-indirect-function \
--enable-gnu-unique-object \
--enable-initfini-array \
--enable-languages=c,c++,fortran,objc,lto \
--enable-libstdcxx-debug \
--enable-lto \
--enable-multiarch \
--enable-secureplt \
--enable-shared \
--enable-threads=posix \
--target="${PKG_TARGET}" \
--with-fpmath=sse; then
return 1;
else
pkgp_gcc_state_set "configure" "build";
fi;
return 0;
};
pkgp_gcc_setup_env() {
local _vname="";
for _vname in CFLAGS CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD \
CXXFLAGS CXXFLAGS_FOR_BUILD; do
export "${_vname}=${GCCFLAGS}";
done;
for _vname in CFLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET \
LIBCFLAGS_FOR_TARGET XGCC_FLAGS_FOR_TARGET; do
export "${_vname}=${GCCTARGET_FLAGS}";
done;
for _vname in cbb_cflags_for_stage1 cbb_cflags_for_stage2 \
cbb_cflags_for_stage3 cbb_cflags_for_stage4; do
export "${_vname}=${CFLAGS_FOR_BUILD}" ;
done;
return 0;
};
pkgp_gcc_setup_vars() {
local _unwind_midipix_h="";
export cbb_target="${PKG_TARGET}" MAKE="make LIBTOOL=slibtool";
_unwind_midipix_h="$(readlink -f "${PKG_BASE_DIR}/cbb-gcc-${PKG_VERSION}/gcc/unwind-midipix.h")";
case "${PKG_NAME}" in
gcc_full)
GCCTARGET_FLAGS="-DIN_TARGET_LIBRARY_BUILD --sysroot=${PKG_PREFIX}";
rtl_lconcat \$GCCTARGET_FLAGS "--include=${_unwind_midipix_h}";
rtl_lconcat \$GCCTARGET_FLAGS "-DTARGET_PERSONALITY_FUNCTION";
rtl_lconcat \$GCCTARGET_FLAGS "-DTARGET_PERSONALITY_FUNCTION_MIDIPIX";
rtl_lconcat \$GCCTARGET_FLAGS "${DEFAULT_CFLAGS_DEBUG_RUNTIME}";
export cbb_ldflags_for_target=--sysroot="${PKG_PREFIX}" \
cbb_sysroot_for_libgcc="${PKG_PREFIX}" \
cbb_xgcc_for_specs="${PKG_TARGET}-gcc" \
sysroot_headers_suffix="${PKG_PREFIX}";
;;
gcc_stage1_cross_mingw32)
GCCTARGET_FLAGS="-DIN_TARGET_LIBRARY_BUILD --sysroot=${PREFIX_MINGW32} -midata";
export cbb_ldflags_for_target=--sysroot="${PREFIX_MINGW32}" \
cbb_neutral_libiberty=no \
cbb_sysroot_for_libgcc="${PREFIX_MINGW32}" \
cbb_xgcc_for_specs="${PKG_BASE_DIR}/${PKG_BUILD_DIR}/gcc/xgcc";
;;
gcc_stage1_host)
GCCTARGET_FLAGS="-DIN_TARGET_LIBRARY_BUILD --sysroot=${PREFIX_CROSS}";
rtl_lconcat \$GCCTARGET_FLAGS "--include=${_unwind_midipix_h}";
rtl_lconcat \$GCCTARGET_FLAGS "-DTARGET_PERSONALITY_FUNCTION";
rtl_lconcat \$GCCTARGET_FLAGS "-DTARGET_PERSONALITY_FUNCTION_MIDIPIX";
rtl_lconcat \$GCCTARGET_FLAGS "${DEFAULT_CFLAGS_DEBUG_RUNTIME}";
export cbb_ldflags_for_target="--sysroot=${PREFIX_CROSS}" \
cbb_neutral_libiberty="no" \
cbb_sysroot_for_libgcc="${PREFIX_CROSS}" \
cbb_xgcc_for_specs="${PKG_BASE_DIR}/${PKG_BUILD_DIR}/gcc/xgcc" \
LDFLAGS="${PKG_LDFLAGS_CONFIGURE}";
;;
gcc_stage1_native_mingw32)
GCCTARGET_FLAGS="-DIN_TARGET_LIBRARY_BUILD --sysroot=${PKG_PREFIX} -midata";
export cbb_ldflags_for_target=--sysroot="${PKG_PREFIX}" \
cbb_neutral_libiberty=no \
cbb_sysroot_for_libgcc="${PKG_PREFIX}" \
cbb_xgcc_for_specs="${PKG_TARGET}-gcc";
;;
esac;
rtl_lconcat2 \
\$GCCFLAGS \
\$PKG_CFLAGS_CONFIGURE \
"--include $(readlink -f "${PKG_BASE_DIR}/cbb-gcc-${PKG_VERSION}/libc/cbb-musl-pe.h")";
};
pkgp_gcc_stage1_all() {
local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}" \
_rc=0;
case "${PKG_NAME}" in
gcc_stage1_cross_mingw32)
pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" mingw32;
;;
gcc_stage1_host)
if ! rtl_fileop ln_symbolic . "${PREFIX_CROSS}/usr"\
|| ! rtl_fileop mkdir "${PREFIX_CROSS}/usr/include"\
|| ! pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" cross; then
_rc=1;
fi;
;;
gcc_stage1_native_mingw32)
pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" native;
;;
esac;
if [ "${_rc}" -ne 0 ]; then
return 1;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" fetch "${_restart_at}"; then
if ! rtl_fetch_dlcache_subdir \
"${BUILD_DLCACHEDIR}" "${PKG_NAME}" \
"${PKG_INHERIT_FROM:-}";
then
return 1;
elif ! rtl_fetch_urls_git \
"${BUILD_DLCACHEDIR}/${PKG_NAME}" "${DEFAULT_GIT_ARGS}" "${PKG_BASE_DIR}" \
"${PKG_NAME}" "${PKG_MIRRORS_GIT:-}" \
"cbb-gcc-${PKG_VERSION}=${PKG_GITROOT}/cbb/cbb-gcc-${PKG_VERSION}"; then
return 1;
else
pkgp_gcc_state_set "fetch" "patch";
fi;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" patch "${_restart_at}"; then
if [ -e "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}.local.patch" ]; then
patch -b -d "${PKG_BASE_DIR}" -p0 < "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}.local.patch" || return 1;
fi;
pkgp_gcc_state_set "patch" "configure";
fi;
pkgp_gcc_setup_vars;
pkgp_gcc_setup_env;
if ! ex_pkg_state_test "${PKG_NAME}" configure "${_restart_at}"; then
case "${PKG_NAME}" in
gcc_stage1_cross_mingw32)
pkgp_gcc_configure \
--enable-sjlj-exceptions \
--prefix="${PREFIX}" \
--with-gmp="${PREFIX}" \
--with-mpc="${PREFIX}" \
--with-mpfr="${PREFIX}" \
--with-sysroot="${PREFIX_MINGW32}" \
--without-headers;
;;
gcc_stage1_host)
pkgp_gcc_configure \
--disable-sjlj-exceptions \
--prefix="${PREFIX}" \
--with-gmp="${PREFIX}" \
--with-mpc="${PREFIX}" \
--with-mpfr="${PREFIX}" \
--with-sysroot="${PREFIX_CROSS}";
;;
gcc_stage1_native_mingw32)
pkgp_gcc_configure \
--build=x86_64-unknown-linux-gnu \
--enable-sjlj-exceptions \
--host=x86_64-nt64-midipix \
--prefix=/ \
--with-elf="${PKG_PREFIX}" \
--with-gmp="${PKG_PREFIX}" \
--with-mpc="${PKG_PREFIX}" \
--with-mpfr="${PKG_PREFIX}" \
--with-sysroot= \
--without-headers;
;;
esac;
if [ "${?}" -ne 0 ]; then
return 1;
fi;
else
rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}" || return 1;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "all-gcc" || return 1;
pkgp_gcc_state_set "build" "install_subdirs";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_subdirs "${_restart_at}"; then
pkg_install_subdirs "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install_subdirs" "install_make";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_make "${_restart_at}"; then
case "${PKG_NAME}" in
gcc_stage1_cross_mingw32)
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install-gcc"; ;;
gcc_stage1_host)
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install-gcc"; ;;
gcc_stage1_native_mingw32)
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install-gcc"; ;;
esac;
if [ "${?}" -ne 0 ]; then
return 1;
else
case "$(uname -s)" in
CYGWIN_*)
if ! rtl_fileop ln_symbolic "${PKG_DESTDIR}/libexec/gcc/${PKG_TARGET}/${PKG_VERSION}/liblto_plugin.dll.a"\
|| ! rtl_fileop ln_symbolic "${PKG_DESTDIR}/libexec/gcc/${PKG_TARGET}/${PKG_VERSION}/liblto_plugin.so"; then
return 1;
fi; ;;
esac;
pkgp_gcc_state_set "install_make" "install";
fi;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
pkg_install "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install";
fi;
pkgp_gcc_state_set "finish";
return 0;
};
pkg_gcc_full_all() {
local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}" \
_configure_host="" _vis_hide="vis_hide=-fvisibility=hidden";
export MAKE="make LIBTOOL=slibtool ${_vis_hide}";
pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" native;
if ! ex_pkg_state_test "${PKG_NAME}" fetch "${_restart_at}"; then
if ! rtl_fetch_dlcache_subdir \
"${BUILD_DLCACHEDIR}" "${PKG_NAME}" \
"${PKG_INHERIT_FROM:-}";
then
return 1;
elif ! rtl_fetch_urls_git \
"${BUILD_DLCACHEDIR}/${PKG_NAME}" "${DEFAULT_GIT_ARGS}" \
"${PKG_BASE_DIR}" "${PKG_NAME}" \
"${PKG_MIRRORS_GIT:-}" \
"cbb-gcc-${PKG_VERSION}=${PKG_GITROOT}/cbb/cbb-gcc-${PKG_VERSION}"; then
return 1;
else
pkgp_gcc_state_set "fetch" "patch";
fi;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" patch "${_restart_at}"; then
if [ -e "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}.local.patch" ]; then
patch -b -d "${PKG_BASE_DIR}" -p0 < "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}.local.patch" || return 1;
fi;
pkgp_gcc_state_set "patch" "configure";
fi;
pkgp_gcc_setup_vars;
pkgp_gcc_setup_env;
if ! ex_pkg_state_test "${PKG_NAME}" configure "${_restart_at}"; then
rtl_fileop mkdir "${PKG_PREFIX}/${PKG_TARGET}" || return 1;
if [ \! -d "${PKG_PREFIX}/${PKG_TARGET}/usr" ]; then
rtl_fileop ln_symbolic . "${PKG_PREFIX}/${PKG_TARGET}/usr" || return 1;
fi;
case "${ARCH}" in
nt32) _configure_host="i686-nt32-midipix"; ;;
nt64) _configure_host="x86_64-nt64-midipix"; ;;
esac;
pkgp_gcc_configure \
--disable-sjlj-exceptions \
--host="${_configure_host}" \
--prefix=/ \
--with-elf="${PKG_PREFIX}" \
--with-gmp="${PKG_PREFIX}" \
--with-mpc="${PKG_PREFIX}" \
--with-mpfr="${PKG_PREFIX}" \
--with-sysroot="" || return 1;
else
rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}" || return 1;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
if ! make ${PKG_MAKEFLAGS_BUILD} "all-gcc"\
|| ! make ${PKG_MAKEFLAGS_BUILD} "all-target-libgcc" ${_vis_hide}\
|| ! make ${PKG_MAKEFLAGS_BUILD} "all-target-libstdc++-v3"\
|| ! make ${PKG_MAKEFLAGS_BUILD} "all-target-libgfortran"\
|| ! make ${PKG_MAKEFLAGS_BUILD} "all"; then
return 1;
else pkgp_gcc_state_set "build" "install_subdirs";
fi;
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_subdirs "${_restart_at}"; then
pkg_install_subdirs "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install_subdirs" "install_make";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_make "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install" || return 1;
pkgp_gcc_state_set "install_make" "install";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
pkg_install "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install";
fi;
pkgp_gcc_state_set "finish";
return 0;
};
pkg_gcc_full_host_all() {
local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}";
export MAKE="make LIBTOOL=slibtool";
if ! pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" cross\
|| ! rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}"; then
return 1;
else
if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} || return 1;
pkgp_gcc_state_set "build" "install_subdirs";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_subdirs "${_restart_at}"; then
pkg_install_subdirs "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install_subdirs" "install_make";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_make "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install" || return 1;
pkgp_gcc_state_set "install_make" "install";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
pkg_install "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install";
fi;
pkgp_gcc_state_set "finish";
fi;
return 0;
};
pkg_gcc_libstdcpp_v3_host_all() {
local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}";
export MAKE="make LIBTOOL=slibtool";
if ! pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" cross\
|| ! rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}"; then
return 1;
else
if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "all-target-libstdc++-v3" || return 1;
pkgp_gcc_state_set "build" "install_subdirs";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_subdirs "${_restart_at}"; then
pkg_install_subdirs "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install_subdirs" "install_make";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_make "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install-target-libstdc++-v3" || return 1;
pkgp_gcc_state_set "install_make" "install";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
pkg_install "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install";
fi;
pkgp_gcc_state_set "finish";
fi;
return 0;
};
pkg_gcc_runtime_host_all() {
local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}" \
_vis_hide="vis_hide=-fvisibility=hidden";
export MAKE="make LIBTOOL=slibtool ${_vis_hide}";
if ! pkgp_gcc_build_dir "cbb-gcc-${PKG_VERSION}" cross\
|| ! rtl_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}"; then
return 1;
else
if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "all-target-libgcc" ${_vis_hide} || return 1;
pkgp_gcc_state_set "build" "install_subdirs";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_subdirs "${_restart_at}"; then
pkg_install_subdirs "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install_subdirs" "install_make";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install_make "${_restart_at}"; then
make ${PKG_MAKEFLAGS_BUILD} "prefix=${PKG_DESTDIR}" "install-target-libgcc" || return 1;
pkgp_gcc_state_set "install_make" "install";
fi;
if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
pkg_install "${_group_name}" "${_pkg_name}" "${_restart_at}" || return 1;
pkgp_gcc_state_set "install";
fi;
pkgp_gcc_state_set "finish";
fi;
return 0;
};
pkg_gcc_stage1_all() {
pkgp_gcc_stage1_all "${@}";
};
pkg_gcc_stage1_cross_mingw32_all() {
if ! rtl_fileop ln_symbolic . "${PKG_PREFIX}/x86_64-w64-mingw32/mingw"\
|| ! rtl_fileop mkdir "${PKG_DESTDIR}/x86_64-w64-mingw32"\
|| ! rtl_fileop ln_symbolic . "${PKG_DESTDIR}/x86_64-w64-mingw32/mingw"\
|| ! rtl_fileop mkdir "${PKG_PREFIX}/x86_64-w64-mingw32/include"\
|| ! pkgp_gcc_stage1_all "${@}"; then
return 1;
fi;
return 0;
};
pkg_gcc_stage1_host_all() {
pkgp_gcc_stage1_all "${@}";
};
pkg_gcc_stage1_native_mingw32_all() {
if ! rtl_fileop ln_symbolic . "${PKG_PREFIX}/x86_64-w64-mingw32/mingw"\
|| ! rtl_fileop mkdir "${PKG_DESTDIR}/x86_64-w64-mingw32"\
|| ! rtl_fileop ln_symbolic . "${PKG_DESTDIR}/x86_64-w64-mingw32/mingw"\
|| ! rtl_fileop mkdir "${PKG_PREFIX}/x86_64-w64-mingw32/include"\
|| ! pkgp_gcc_stage1_all "${@}"; then
return 1;
fi;
return 0;
};
# vim:filetype=sh textwidth=0