Blob Blame History Raw
#
# set -o errexit -o noglob are assumed.
# Order: stage1, runtime, libstdcpp_v3, full, native
# Order: stage1_x86_64_w64_mingw32, native_x86_64_w64_mingw32
#

pkgp_gcc_setup_env() {
	local __;
	export MAKE="make LIBTOOL=slibtool";
	export	cbb_ldflags_for_target=--sysroot="${PKG_PREFIX}"	\
		cbb_sysroot_for_libgcc="${PKG_PREFIX}"			\
		cbb_target="${PKG_TARGET}";
	case "${PKG_NAME}" in
	gcc_stage1)
		export	cbb_neutral_libiberty=no		\
			cbb_xgcc_for_specs="${PKG_BASE_DIR}/${PKG_BUILD_DIR}/gcc/xgcc"; ;;
	gcc_stage1_cross_x86_64_w64_mingw32)
		export	cbb_neutral_libiberty=no		\
			cbb_xgcc_for_specs="${PKG_BASE_DIR}/${PKG_BUILD_DIR}/gcc/xgcc"; ;;
	gcc_stage1_native_x86_64_w64_mingw32)
		export	cbb_neutral_libiberty=no		\
			cbb_xgcc_for_specs="${PKG_TARGET}-gcc"; ;;
	gcc_native)
		export	cbb_xgcc_for_specs="${PKG_TARGET}-gcc"	\
			sysroot_headers_suffix="${PKG_PREFIX}"; ;;
	esac;
	GCCTARGET_FLAGS="-DIN_TARGET_LIBRARY_BUILD --sysroot=${PKG_PREFIX} -midata";
	GCCFLAGS="${CFLAGS:+${CFLAGS} }--include $(readlink -f "${PKG_BASE_DIR}/cbb-gcc-${1}/libc/cbb-musl-pe.h")";
	for __ in CFLAGS CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CXXFLAGS CXXFLAGS_FOR_BUILD; do
		export "${__}=${GCCFLAGS}";
	done;
	for __ in CFLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LIBCFLAGS_FOR_TARGET XGCC_FLAGS_FOR_TARGET; do
		export "${__}=${GCCTARGET_FLAGS}";
	done;
	for __ in cbb_cflags_for_stage1 cbb_cflags_for_stage2 cbb_cflags_for_stage3 cbb_cflags_for_stage4; do
		export "${__}=${CFLAGS_FOR_BUILD}" ;
	done;
	export CFLAGS CXXFLAGS CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CFLAGS_FOR_TARGET XGCC_FLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LIBCFLAGS_FOR_TARGET;
};

pkgp_gcc_configure() {
	ex_build_fileop rm "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	ex_build_fileop mkdir "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	"../cbb-gcc-${PKG_GCC_VERSION}/configure" "${@}"\
		--disable-bootstrap			\
		--disable-libmudflap			\
		--disable-multilib			\
		--disable-nls				\
		--disable-obsolete			\
		--disable-symvers			\
		--enable-__cxa_atexit			\
		--enable-canonical-system-headers	\
		--enable-debug				\
		--enable-gnu-indirect-function		\
		--enable-gnu-unique-object		\
		--enable-initfini-array			\
		--enable-languages=c,c++,objc,lto	\
		--enable-libstdcxx-debug		\
		--enable-lto				\
		--enable-multiarch			\
		--enable-secureplt			\
		--enable-shared				\
		--enable-threads=posix			\
		--target="${PKG_TARGET}"		\
		--with-fpmath=sse;
	ex_pkg_state_push "${PKG_NAME}" configure -build;
};

pkg_gcc_stage1_cross_x86_64_w64_mingw32_all() {
	pkg_gcc_stage1_all "${@}";
};

pkg_gcc_stage1_native_x86_64_w64_mingw32_all() {
	export AR="${TARGET}-ar";
	export CC="${TARGET}-gcc";
	export CXX="${TARGET}-g++";
	export RANLIB="${TARGET}-ranlib";
	pkg_gcc_stage1_all "${@}";
};

pkg_gcc_stage1_all() {
	local __ _restart_at="${1}";
	case "${PKG_NAME}" in
	gcc_stage1)
		PKG_GCC_VERSION="${PKG_GCC_STAGE1_VERSION}";
		ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_VERSION}" cross;
		;;
	gcc_stage1_cross_x86_64_w64_mingw32)
		PKG_GCC_VERSION="${PKG_GCC_STAGE1_CROSS_X86_64_W64_MINGW32_VERSION}";
		ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_VERSION}" cross;
		;;
	gcc_stage1_native_x86_64_w64_mingw32)
		PKG_GCC_VERSION="${PKG_GCC_STAGE1_NATIVE_X86_64_W64_MINGW32_VERSION}";
		ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_VERSION}" native;
		;;
	esac;
	# GCC, stage1.
	if ! ex_pkg_state_test "${PKG_NAME}" fetch "${_restart_at}"; then
		pkg_fetch_git "cbb-gcc-${PKG_GCC_VERSION}=${DEFAULT_GITROOT}/cbb/cbb-gcc-${PKG_GCC_VERSION}";
		ex_pkg_state_push "${PKG_NAME}" fetch -patch;
	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";
		fi;
		ex_pkg_state_push "${PKG_NAME}" patch -configure;
	fi;
	pkgp_gcc_setup_env "${PKG_GCC_VERSION}";
	if ! ex_pkg_state_test "${PKG_NAME}" configure "${_restart_at}"; then
		ex_build_fileop mkdir "${PKG_PREFIX}/include";
		[ \! -d "${PKG_PREFIX}/usr" ] &&			\
			ex_build_fileop ln_symbolic . "${PKG_PREFIX}/usr";
		case "${PKG_NAME}" in
		gcc_stage1)
			pkgp_gcc_configure				\
				--disable-sjlj-exceptions		\
				--prefix="${PREFIX}"			\
				--with-sysroot="${PREFIX}/${PKG_TARGET}"; ;;
		gcc_stage1_cross_x86_64_w64_mingw32)
			pkgp_gcc_configure				\
				--enable-sjlj-exceptions		\
				--prefix="${PREFIX}"			\
				--with-sysroot="${PREFIX}/${PKG_TARGET}"\
				--without-headers; ;;
		gcc_stage1_native_x86_64_w64_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;
	else
		ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} all-gcc;
		ex_pkg_state_push "${PKG_NAME}" build -install;
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
		case "${PKG_NAME}" in
		gcc_stage1)
			make ${PKG_MAKEFLAGS_BUILD} install-gcc; ;;
		gcc_stage1_cross_x86_64_w64_mingw32)
			make ${PKG_MAKEFLAGS_BUILD} install-gcc; ;;
		gcc_stage1_native_x86_64_w64_mingw32)
			make ${PKG_MAKEFLAGS_BUILD} "DESTDIR=${PKG_PREFIX}" install-gcc; ;;
		esac;
		__="$(uname -s)";
		if [ "${__#*CYGWIN*}" != "${__}" ]; then
			ex_build_fileop ln_symbolic "${PREFIX}/libexec/gcc/${PKG_TARGET}/${PKG_GCC_VERSION}/liblto_plugin.dll.a"	\
				ex_build_fileop ln_symbolic "${PREFIX}/libexec/gcc/${PKG_TARGET}/${PKG_GCC_VERSION}/liblto_plugin.so";
		fi;
		ex_pkg_state_push "${PKG_NAME}" install finish;
	fi;
};

pkg_gcc_runtime_all() {
	local _restart_at="${1}";
	export MAKE="make LIBTOOL=slibtool";
	ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_RUNTIME_VERSION}" cross;
	ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	# GCC, compiler runtime.
	if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} all-target-libgcc;
		ex_pkg_state_push "${PKG_NAME}" build -install;
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} install-target-libgcc;
		ex_pkg_state_push "${PKG_NAME}" install finish;
	fi;
};

pkg_gcc_libstdcpp_v3_all() {
	local _restart_at="${1}";
	export MAKE="make LIBTOOL=slibtool";
	ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_LIBSTDCPP_V3_VERSION}" cross;
	ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	# GCC, libstdc++-v3.
	if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} all-target-libstdc++-v3;
		ex_pkg_state_push "${PKG_NAME}" build -install;
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} install-target-libstdc++-v3;
		ex_pkg_state_push "${PKG_NAME}" install finish;
	fi;
};

pkg_gcc_full_all() {
	local _restart_at="${1}";
	export MAKE="make LIBTOOL=slibtool";
	ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_FULL_VERSION}" cross;
	ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	# GCC, everything else.
	if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD};
		ex_pkg_state_push "${PKG_NAME}" build -install;
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} install;
		ex_pkg_state_push "${PKG_NAME}" install finish;
	fi;
};

pkg_gcc_native_all() {
	local _restart_at="${1}" _configure_host;
	PKG_GCC_VERSION="${PKG_GCC_NATIVE_VERSION}";
	export MAKE="make LIBTOOL=slibtool";
	# GCC, native.
	ex_pkg_state_build_dir "cbb-gcc-${PKG_GCC_VERSION}" native;
	pkgp_gcc_setup_env "${PKG_GCC_VERSION}";
	if ! ex_pkg_state_test "${PKG_NAME}" configure "${_restart_at}"; then
		ex_build_fileop mkdir "${PKG_PREFIX}/${PKG_TARGET}";
		if [ \! -d "${PKG_PREFIX}/${PKG_TARGET}/usr" ]; then
			ex_build_fileop ln_symbolic . "${PKG_PREFIX}/${PKG_TARGET}/usr";
		fi;
		if [ "${ARCH}" = nt32 ]; then
			_configure_host="i686-nt32-midipix";
		else
			_configure_host="x86_64-nt64-midipix";
		fi;
		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=;
	else
		ex_build_fileop cd "${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" build "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} all-gcc;
		make ${PKG_MAKEFLAGS_BUILD} all-target-libgcc;
		make ${PKG_MAKEFLAGS_BUILD} all-target-libstdc++-v3;
		make ${PKG_MAKEFLAGS_BUILD} all;
		ex_pkg_state_push "${PKG_NAME}" build -install;
	fi;
	if ! ex_pkg_state_test "${PKG_NAME}" install "${_restart_at}"; then
		make ${PKG_MAKEFLAGS_BUILD} "DESTDIR=${PKG_PREFIX}" install;
		ex_pkg_state_push "${PKG_NAME}" install finish;
	fi;
};

# vim:filetype=sh