mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2024-12-18 20:37:56 +00:00
MinGW-W64 fixes
- libpthread requires iteration over multilibs, unlike the core, it does not detect and build multilibs by itself. - Disable parallel builds for mingw-w64 components; until mingw-w64 core builds clean, I am not trusting it. - Make the list of tools to build configurable - Turn on multilib in x86_64 sample. - Make warnings about tuple less redundant. As in, "one WARN is enough, no need to shout it three times". - Messages about various steps/substeps are more aligned with the rest of the components. - Use 'make' instead of ${make} to invoke the companion make just built, if applicable. Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
parent
a7edff1820
commit
7111f95dc3
@ -129,16 +129,20 @@ config WINAPI_VERSION
|
||||
Enter the version number of the Windows API files to use
|
||||
|
||||
config MINGW_DIRECTX
|
||||
bool
|
||||
prompt "Include DirectX development files"
|
||||
bool "Include DirectX development files"
|
||||
|
||||
config MINGW_DDK
|
||||
bool
|
||||
prompt "Include DDK development files"
|
||||
bool "Include DDK development files"
|
||||
|
||||
config MINGW_TOOLS
|
||||
bool
|
||||
prompt "Include the companion tools"
|
||||
bool "Include the companion tools"
|
||||
default y
|
||||
help
|
||||
build the companion tools with mingw such as widl, gendef,
|
||||
and genpeimg
|
||||
Build the companion tools with mingw such as widl, gendef,
|
||||
and genpeimg.
|
||||
|
||||
config MINGW_TOOL_LIST_ARRAY
|
||||
string "List of mingw-w64 tools to build"
|
||||
default "gendef genidl genlib genpeimg widl"
|
||||
help
|
||||
List of mingw-w64 tools to build.
|
||||
|
@ -1,12 +1,12 @@
|
||||
CT_EXPERIMENTAL=y
|
||||
CT_ARCH_x86=y
|
||||
CT_MULTILIB=y
|
||||
CT_ARCH_64=y
|
||||
CT_TARGET_VENDOR="w64"
|
||||
CT_KERNEL_windows=y
|
||||
CT_BINUTILS_PLUGINS=y
|
||||
CT_MINGW_DIRECTX=y
|
||||
CT_MINGW_DDK=y
|
||||
CT_MINGW_TOOLS=y
|
||||
CT_THREADS_POSIX=y
|
||||
CT_CC_LANG_CXX=y
|
||||
CT_CC_LANG_FORTRAN=y
|
||||
|
@ -158,7 +158,7 @@ do_libc_backend() {
|
||||
# libc_mode : 'startfiles' or 'final' : string : (empty)
|
||||
# multi_* : as defined in CT_IterateMultilibs : (varies) :
|
||||
do_libc_backend_once() {
|
||||
local multi_flags multi_dir multi_os_dir multi_root multi_index multi_count
|
||||
local multi_flags multi_dir multi_os_dir multi_root multi_index multi_count multi_target
|
||||
local build_cflags build_cppflags build_ldflags
|
||||
local startfiles_dir
|
||||
local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
|
||||
|
@ -74,23 +74,27 @@ do_check_mingw_vendor_tuple()
|
||||
if [[ ${CT_WINAPI_VERSION} == 4* ]]; then
|
||||
CT_DoStep INFO "Checking vendor tuple configured in crosstool-ng .config"
|
||||
if [[ ${CT_TARGET_VENDOR} == w64 ]]; then
|
||||
CT_DoLog EXTRA "The tuple is set to '${CT_TARGET_VENDOR}', as recommended by mingw-64 team."
|
||||
CT_DoLog EXTRA "The tuple is set to '${CT_TARGET_VENDOR}', as recommended by mingw-64 developers."
|
||||
else
|
||||
CT_DoLog WARN "WARNING! The tuple '${CT_TARGET_VENDOR}', is not equal to w64 and might break the toolchain! WARNING!"
|
||||
CT_DoLog WARN "The tuple vendor is '${CT_TARGET_VENDOR}', not equal to 'w64' and might break the toolchain!"
|
||||
fi
|
||||
CT_EndStep
|
||||
fi
|
||||
}
|
||||
|
||||
do_mingw_tools() {
|
||||
for f in gendef genidl genlib genpeimg widl
|
||||
do
|
||||
if [[ ! -d "${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-tools/${f}" ]]; then
|
||||
continue;
|
||||
do_mingw_tools()
|
||||
{
|
||||
local f
|
||||
|
||||
for f in "${CT_MINGW_TOOL_LIST_ARRAY[@]}"; do
|
||||
CT_mkdir_pushd "${f}"
|
||||
if [ ! -d "${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-tools/${f}" ]; then
|
||||
CT_DoLog WARN "Skipping ${f}: not found"
|
||||
CT_Popd
|
||||
continue
|
||||
fi
|
||||
|
||||
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-tools/${f}"
|
||||
|
||||
CT_DoLog EXTRA "Configuring ${f}"
|
||||
CT_DoExecLog CFG \
|
||||
${CONFIG_SHELL} \
|
||||
"${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-tools/${f}/configure" \
|
||||
@ -100,31 +104,92 @@ do_mingw_tools() {
|
||||
--program-prefix=${CT_TARGET}- \
|
||||
--prefix="${CT_PREFIX_DIR}"
|
||||
|
||||
CT_DoExecLog ALL ${make} ${JOBSFLAGS}
|
||||
|
||||
CT_DoExecLog ALL ${make} install
|
||||
|
||||
# mingw-w64 has issues with parallel builds, see do_libc
|
||||
CT_DoLog EXTRA "Building ${f}"
|
||||
CT_DoExecLog ALL make
|
||||
CT_DoLog EXTRA "Installing ${f}"
|
||||
CT_DoExecLog ALL make install
|
||||
CT_Popd
|
||||
done
|
||||
}
|
||||
|
||||
do_libc() {
|
||||
do_mingw_pthreads()
|
||||
{
|
||||
local multi_flags multi_dir multi_os_dir multi_root multi_index multi_count multi_target
|
||||
local libprefix
|
||||
local rcflags dlltoolflags
|
||||
|
||||
for arg in "$@"; do
|
||||
eval "${arg// /\\ }"
|
||||
done
|
||||
|
||||
CT_DoStep INFO "Building for multilib ${multi_index}/${multi_count}: '${multi_flags}'"
|
||||
|
||||
libprefix="${MINGW_INSTALL_PREFIX}/lib/${multi_os_dir}"
|
||||
CT_SanitizeVarDir libprefix
|
||||
|
||||
CT_SymlinkToolsMultilib
|
||||
|
||||
# DLLTOOLFLAGS does not appear to be currently used by winpthread package, but
|
||||
# the master package uses this variable and describes this as one of the changes
|
||||
# needed for i686 in mingw-w64-doc/howto-build/mingw-w64-howto-build-adv.txt
|
||||
case "${multi_target}" in
|
||||
i[3456]86-*)
|
||||
rcflags="-F pe-i386"
|
||||
dlltoolflags="-m i386"
|
||||
;;
|
||||
x86_64-*)
|
||||
rcflags="-F pe-x86-64"
|
||||
dlltoolflags="-m i386:x86_64"
|
||||
;;
|
||||
*)
|
||||
CT_Abort "Tuple ${multi_target} is not supported by mingw-w64"
|
||||
;;
|
||||
esac
|
||||
|
||||
CT_DoLog EXTRA "Configuring mingw-w64-winpthreads"
|
||||
|
||||
CT_DoExecLog CFG \
|
||||
CFLAGS="${multi_flags}" \
|
||||
CXXFLAGS="${multi_flags}" \
|
||||
RCFLAGS="${rcflags}" \
|
||||
DLLTOOLFLAGS="${dlltoolflags}" \
|
||||
${CONFIG_SHELL} \
|
||||
"${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-libraries/winpthreads/configure" \
|
||||
--with-sysroot=${CT_SYSROOT_DIR} \
|
||||
--prefix=${MINGW_INSTALL_PREFIX} \
|
||||
--libdir=${libprefix} \
|
||||
--build=${CT_BUILD} \
|
||||
--host=${multi_target}
|
||||
|
||||
# mingw-w64 has issues with parallel builds, see do_libc
|
||||
CT_DoLog EXTRA "Building mingw-w64-winpthreads"
|
||||
CT_DoExecLog ALL make
|
||||
|
||||
CT_DoLog EXTRA "Installing mingw-w64-winpthreads"
|
||||
CT_DoExecLog ALL make install DESTDIR=${CT_SYSROOT_DIR}
|
||||
|
||||
CT_EndStep
|
||||
}
|
||||
|
||||
do_libc()
|
||||
{
|
||||
do_check_mingw_vendor_tuple
|
||||
|
||||
CT_DoStep INFO "Building mingw-w64 files"
|
||||
CT_DoStep INFO "Building mingw-w64"
|
||||
|
||||
CT_DoLog EXTRA "Configuring mingw-w64-crt"
|
||||
|
||||
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-crt"
|
||||
|
||||
do_set_mingw_install_prefix
|
||||
CT_DoExecLog CFG \
|
||||
${CONFIG_SHELL} \
|
||||
CT_DoExecLog CFG \
|
||||
${CONFIG_SHELL} \
|
||||
"${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-crt/configure" \
|
||||
--with-sysroot=${CT_SYSROOT_DIR} \
|
||||
--prefix=${MINGW_INSTALL_PREFIX} \
|
||||
--build=${CT_BUILD} \
|
||||
--host=${CT_TARGET} \
|
||||
--with-sysroot=${CT_SYSROOT_DIR} \
|
||||
--prefix=${MINGW_INSTALL_PREFIX} \
|
||||
--build=${CT_BUILD} \
|
||||
--host=${CT_TARGET}
|
||||
|
||||
# mingw-w64-crt has a missing dependency occasionally breaking the
|
||||
# parallel build. See https://github.com/crosstool-ng/crosstool-ng/issues/246
|
||||
@ -134,43 +199,25 @@ do_libc() {
|
||||
|
||||
CT_DoLog EXTRA "Installing mingw-w64-crt"
|
||||
CT_DoExecLog ALL make install DESTDIR=${CT_SYSROOT_DIR}
|
||||
|
||||
if [[ ${CT_MINGW_TOOLS} == "y" ]]; then
|
||||
CT_DoLog EXTRA "Installing mingw-w64 companion tools"
|
||||
do_mingw_tools
|
||||
fi
|
||||
|
||||
CT_EndStep
|
||||
|
||||
if [ "${CT_THREADS}" = "posix" ]; then
|
||||
do_pthreads
|
||||
CT_DoStep INFO "Building mingw-w64-winpthreads"
|
||||
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-winpthreads"
|
||||
CT_IterateMultilibs do_mingw_pthreads pthreads-multilib
|
||||
CT_Popd
|
||||
CT_EndStep
|
||||
fi
|
||||
|
||||
if [ ${CT_MINGW_TOOLS} = "y" ]; then
|
||||
CT_DoStep INFO "Installing mingw-w64 companion tools"
|
||||
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-tools"
|
||||
do_mingw_tools
|
||||
CT_Popd
|
||||
CT_EndStep
|
||||
fi
|
||||
}
|
||||
|
||||
do_libc_post_cc() {
|
||||
:
|
||||
}
|
||||
|
||||
do_pthreads() {
|
||||
CT_DoStep INFO "Building mingw-w64-winpthreads files"
|
||||
|
||||
CT_DoLog EXTRA "Configuring mingw-w64-winpthreads"
|
||||
|
||||
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-winpthreads"
|
||||
|
||||
CT_DoExecLog CFG \
|
||||
${CONFIG_SHELL} \
|
||||
"${CT_SRC_DIR}/mingw-w64-${CT_WINAPI_VERSION_DOWNLOADED}/mingw-w64-libraries/winpthreads/configure" \
|
||||
--with-sysroot=${CT_SYSROOT_DIR} \
|
||||
--prefix=${MINGW_INSTALL_PREFIX} \
|
||||
--build=${CT_BUILD} \
|
||||
--host=${CT_TARGET} \
|
||||
|
||||
CT_DoLog EXTRA "Building mingw-w64-winpthreads"
|
||||
CT_DoExecLog ALL make ${JOBSFLAGS}
|
||||
|
||||
CT_DoLog EXTRA "Installing mingw-w64-winpthreads"
|
||||
CT_DoExecLog ALL make install DESTDIR=${CT_SYSROOT_DIR}
|
||||
|
||||
CT_EndStep
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user