Blob Blame History Raw
#
# . ./build.vars and 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() {
	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=${WORKDIR}/${PKG_BUILD_DIR}/gcc/xgcc; ;;
	gcc_stage1_cross_x86_64_w64_mingw32)
		export	cbb_neutral_libiberty=no		\
			cbb_xgcc_for_specs=${WORKDIR}/${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}";
	GCCFLAGS="${CFLAGS:+${CFLAGS} }--include $(readlink -f ${WORKDIR}/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() {
	secure_rm ${PKG_BUILD_DIR};
	insecure_mkdir ${PKG_BUILD_DIR};
	secure_cd ${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;
	set_build_script_done configure clean -build;
};

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

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

pkg_gcc_stage1_all() {
	case ${PKG_NAME} in
	gcc_stage1)
		PKG_GCC_VERSION="${PKG_GCC_STAGE1_VERSION}";
		set_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}";
		set_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}";
		set_build_dir cbb-gcc-${PKG_GCC_VERSION} native;
		;;
	esac;
	# GCC, stage1.
	if ! is_build_script_done fetch; then
		pkg_fetch -git "cbb-gcc-${PKG_GCC_VERSION}=${GITROOT}/cbb/cbb-gcc-${PKG_GCC_VERSION}";
		set_build_script_done fetch -configure;
	fi;
	pkgp_gcc_setup_env ${PKG_GCC_VERSION};
	if ! is_build_script_done configure; then
		insecure_mkdir ${PKG_PREFIX}/include;
		[ \! -d ${PKG_PREFIX}/usr ] &&			\
			ln -s -- . ${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)
			patch -b -d cbb-gcc-4.6.4 -p1 < ${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}.local.patch;
			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
		cd ${PKG_BUILD_DIR};
	fi;
	if ! is_build_script_done clean; then
		make ${MAKEFLAGS} clean;
		set_build_script_done clean -build;
	fi;
	if ! is_build_script_done build; then
		make ${MAKEFLAGS} all-gcc;
		set_build_script_done build -install;
	fi;
	if ! is_build_script_done install; then
		case ${PKG_NAME} in
		gcc_stage1)
			make ${MAKEFLAGS} install-gcc; ;;
		gcc_stage1_cross_x86_64_w64_mingw32)
			make ${MAKEFLAGS} install-gcc; ;;
		gcc_stage1_native_x86_64_w64_mingw32)
			make ${MAKEFLAGS} DESTDIR=${PKG_PREFIX} install-gcc; ;;
		esac;
		__="$(uname -s)";
		if [ "${__#*CYGWIN*}" != "${__}" ]; then
			ln -s -- ${PREFIX}/libexec/gcc/${PKG_TARGET}/${PKG_GCC_VERSION}/liblto_plugin.dll.a	\
				ln -s -- ${PREFIX}/libexec/gcc/${PKG_TARGET}/${PKG_GCC_VERSION}/liblto_plugin.so;
		fi;
		set_build_script_done install finish;
	fi;
};

pkg_gcc_runtime_all() {
	export MAKE="make LIBTOOL=slibtool";
	set_build_dir cbb-gcc-${PKG_GCC_RUNTIME_VERSION} cross;
	cd ${PKG_BUILD_DIR};
	# GCC, compiler runtime.
	if ! is_build_script_done build; then
		make ${MAKEFLAGS} all-target-libgcc;
		set_build_script_done build -install;
	fi;
	if ! is_build_script_done install; then
		make ${MAKEFLAGS} install-target-libgcc;
		set_build_script_done install finish;
	fi;
};

pkg_gcc_libstdcpp_v3_all() {
	export MAKE="make LIBTOOL=slibtool";
	set_build_dir cbb-gcc-${PKG_GCC_LIBSTDCPP_V3_VERSION} cross;
	cd ${PKG_BUILD_DIR};
	# GCC, libstdc++-v3.
	if ! is_build_script_done build; then
		make ${MAKEFLAGS} all-target-libstdc++-v3;
		set_build_script_done build -install;
	fi;
	if ! is_build_script_done install; then
		make ${MAKEFLAGS} install-target-libstdc++-v3;
		set_build_script_done install finish;
	fi;
};

pkg_gcc_full_all() {
	export MAKE="make LIBTOOL=slibtool";
	set_build_dir cbb-gcc-${PKG_GCC_FULL_VERSION} cross;
	cd ${PKG_BUILD_DIR};
	# GCC, everything else.
	if ! is_build_script_done build; then
		make ${MAKEFLAGS};
		set_build_script_done build -install;
	fi;
	if ! is_build_script_done install; then
		make ${MAKEFLAGS} install;
		set_build_script_done install finish;
	fi;
};

pkg_gcc_native_all() {
	PKG_GCC_VERSION="${PKG_GCC_NATIVE_VERSION}";
	export MAKE="make LIBTOOL=slibtool";
	# GCC, native.
	set_build_dir cbb-gcc-${PKG_GCC_VERSION} native;
	pkgp_gcc_setup_env ${PKG_GCC_VERSION};
	if ! is_build_script_done configure; then
		insecure_mkdir ${PKG_PREFIX}/${PKG_TARGET};
		if [ \! -d ${PKG_PREFIX}/${PKG_TARGET}/usr ]; then
			ln -s -- . ${PKG_PREFIX}/${PKG_TARGET}/usr;
		fi;
		if [ "${ARCH}" = nt32 ]; then
			_pgna_host="i686-nt32-midipix";
		else
			_pgna_host="x86_64-nt64-midipix";
		fi;
		pkgp_gcc_configure				\
			--disable-sjlj-exceptions		\
			--host=${_pgna_host}			\
			--prefix=/				\
			--with-elf=${PKG_PREFIX}		\
			--with-gmp=${PKG_PREFIX}		\
			--with-mpc=${PKG_PREFIX}		\
			--with-mpfr=${PKG_PREFIX}		\
			--with-sysroot=;
	else
		cd ${PKG_BUILD_DIR};
	fi;
	if ! is_build_script_done clean; then
		make ${MAKEFLAGS} clean;
		set_build_script_done clean -build;
	fi;
	if ! is_build_script_done build; then
		make ${MAKEFLAGS} all-gcc;
		make ${MAKEFLAGS} all-target-libgcc;
		make ${MAKEFLAGS} all-target-libstdc++-v3;
		make ${MAKEFLAGS} all;
		set_build_script_done build -install;
	fi;
	if ! is_build_script_done install; then
		make ${MAKEFLAGS} DESTDIR=${PKG_PREFIX} install;
		set_build_script_done install finish;
	fi;
};

# vim:filetype=sh