Compare commits

..

No commits in common. "master" and "2.8.6" have entirely different histories.

7 changed files with 113 additions and 57 deletions

View File

@ -14,8 +14,8 @@
<a href="https://github.com/sponsors/xt-sys/"> <a href="https://github.com/sponsors/xt-sys/">
<img alt="Sponsors" src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-red?logo=GitHub"> <img alt="Sponsors" src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-red?logo=GitHub">
</a> </a>
<a href="https://discord.com/invite/zBzJ5qMGX7"> <a href="https://discord.com/invite/3zgjQDVmAe">
<img alt="Discord" src="https://img.shields.io/badge/Chat-Join%20Discord-success"> <img alt="Discord" src="https://img.shields.io/discord/723186294540206100?label=Chat">
</a> </a>
</p> </p>

View File

@ -16,14 +16,19 @@ WRKDIR="$(pwd)"
ARCHS="aarch64 armv7 i686 x86_64" ARCHS="aarch64 armv7 i686 x86_64"
GENERIC="generic-w64-mingw32" GENERIC="generic-w64-mingw32"
# Binutils Settings
BINUTILSDIR="${SRCDIR}/binutils"
BINUTILSTAG="binutils-2_41"
BINUTILSVCS="git://sourceware.org/git/binutils-gdb.git"
# CMake Settings # CMake Settings
CMAKEDIR="${SRCDIR}/cmake" CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v3.31.3" CMAKETAG="v3.27.6"
CMAKEVCS="https://gitlab.kitware.com/cmake/cmake.git" CMAKEVCS="https://gitlab.kitware.com/cmake/cmake.git"
# LLVM Settings # LLVM Settings
LLVMDIR="${SRCDIR}/llvm" LLVMDIR="${SRCDIR}/llvm"
LLVMTAG="llvmorg-19.1.6" LLVMTAG="llvmorg-17.0.6"
LLVMVCS="https://github.com/llvm/llvm-project.git" LLVMVCS="https://github.com/llvm/llvm-project.git"
# Make Settings # Make Settings
@ -40,13 +45,13 @@ MINGWVCS="https://github.com/mirror/mingw-w64.git"
# Ninja Settings # Ninja Settings
NINJADIR="${SRCDIR}/ninja" NINJADIR="${SRCDIR}/ninja"
NINJATAG="v1.12.1" NINJATAG="v1.11.1"
NINJAVCS="https://github.com/ninja-build/ninja.git" NINJAVCS="https://github.com/ninja-build/ninja.git"
# Wine Settings # Wine Settings
WINEDIR="${SRCDIR}/wine" WINEDIR="${SRCDIR}/wine"
WINETAG="wine-9.8" WINETAG="wine-8.17"
WINEVCS="https://github.com/wine-mirror/wine.git" WINEVCS="git://source.winehq.org/git/wine.git"
# This function applies a patches to the 3rd party project # This function applies a patches to the 3rd party project
@ -74,6 +79,50 @@ apply_patches()
fi fi
} }
# This function compiles and installs GNU BINUTILS
binutils_build()
{
echo ">>> Building BINUTILS ..."
for ARCH in ${ARCHS}; do
[ -z ${CLEAN} ] || rm -rf ${BINUTILSDIR}/build-${ARCH}
mkdir -p ${BINUTILSDIR}/build-${ARCH}
cd ${BINUTILSDIR}/build-${ARCH}
case ${ARCH} in
"armv7")
TARGET="arm"
;;
*)
TARGET="${ARCH}"
;;
esac
../configure \
--target=${TARGET}-w64-mingw32 \
--disable-binutils \
--disable-gdb \
--disable-gprof \
--disable-ld \
--disable-multilib \
--disable-nls \
--disable-werror \
--with-zlib=yes
make -j${CORES}
cp ${BINUTILSDIR}/build-${ARCH}/gas/as-new ${BINDIR}/bin/${ARCH}-w64-mingw32-gas
done
cd ${WRKDIR}
}
# This function downloads GNU BINUTILS from VCS
binutils_fetch()
{
if [ ! -d ${BINUTILSDIR} ]; then
echo ">>> Downloading BINUTILS ..."
git clone --depth 1 --branch ${BINUTILSTAG} ${BINUTILSVCS} ${BINUTILSDIR}
cd ${BINUTILSDIR}
apply_patches ${BINUTILSDIR##*/} ${BINUTILSTAG##*-}
cd ${WRKDIR}
fi
}
# This function compiles and installs CMAKE # This function compiles and installs CMAKE
cmake_build() cmake_build()
{ {
@ -363,7 +412,7 @@ mingw_build_libs()
# This function compiles and installs MINGW tools # This function compiles and installs MINGW tools
mingw_build_tools() mingw_build_tools()
{ {
for TOOL in gendef genidl genpeimg widl; do for TOOL in gendef genidl genlib genpeimg widl; do
for ARCH in ${ARCHS}; do for ARCH in ${ARCHS}; do
echo ">>> Building Mingw-w64 (tools) for ${ARCH} ..." echo ">>> Building Mingw-w64 (tools) for ${ARCH} ..."
[ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH} [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
@ -526,6 +575,12 @@ mingw_build_libs
# Build and install Mingw-W64 tools # Build and install Mingw-W64 tools
mingw_build_tools mingw_build_tools
# Download Binutils
binutils_fetch
# Build and install Binutils
binutils_build
# Download Wine # Download Wine
wine_fetch wine_fetch

View File

@ -0,0 +1,30 @@
diff --git a/bfd/config.bfd b/bfd/config.bfd
index bdee53957c0..04fff6e7df4 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -407,6 +407,12 @@ case "${targ}" in
targ_selvecs="arm_pe_le_vec arm_pe_be_vec arm_pei_le_vec arm_pei_be_vec"
targ_underscore=yes
;;
+ arm-*-mingw*)
+ targ_defvec=arm_pe_le_vec
+ targ_selvecs="arm_pe_le_vec arm_pe_be_vec arm_pei_le_vec arm_pei_be_vec"
+ targ_underscore=no
+ targ_cflags="-DARM_COFF_BUGFIX"
+ ;;
arm-*-phoenix*)
targ_defvec=arm_elf32_le_vec
targ_selvecs=arm_elf32_be_vec
diff --git a/gas/configure.tgt b/gas/configure.tgt
index 3429f850d05..fa735da7ce6 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -164,7 +164,7 @@ case ${generic_target} in
arm-*-nto*) fmt=elf ;;
arm-wince-pe | arm-*-wince | arm*-*-mingw32ce* | arm*-*-cegcc*)
fmt=coff em=wince-pe ;;
- arm-*-pe) fmt=coff em=pe ;;
+ arm-*-pe | arm-*-mingw*) fmt=coff em=pe ;;
arm-*-fuchsia*) fmt=elf ;;
arm-*-haiku*) fmt=elf em=haiku ;;

View File

@ -1,13 +0,0 @@
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 818109f0b7..749377d193 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -7,7 +7,7 @@ set(CMake_VERSION_IS_DIRTY 0)
# Start with the full version number used in tags. It has no dev info.
set(CMake_VERSION
- "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}")
+ "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}-XTC")
if(DEFINED CMake_VERSION_RC)
set(CMake_VERSION "${CMake_VERSION}-rc${CMake_VERSION_RC}")
endif()

View File

@ -2,7 +2,7 @@
* PROJECT: XTchain * PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory * LICENSE: See COPYING.md in the top level directory
* FILE: tools/exetool.c * FILE: tools/exetool.c
* DESCRIPTION: Portable Executable (PE) utility for changing its signature and subsystem * DESCRIPTION: Portable Executable (PE) utility for changing subsystem
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org> * DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/ */
@ -91,7 +91,6 @@ int main(int argc, char *argv[])
FILE *ExeFile; FILE *ExeFile;
unsigned char Signature[4]; unsigned char Signature[4];
unsigned int HeaderOffset; unsigned int HeaderOffset;
unsigned int ImageSignature;
unsigned short SubSystem; unsigned short SubSystem;
PPE_SUBSYSTEM NewSubSystem; PPE_SUBSYSTEM NewSubSystem;
@ -102,22 +101,13 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
/* Parse the new SubSystem value from the command line argument */
NewSubSystem = getSubSystem(argv[2]);
if(NewSubSystem->Identifier == 0)
{
/* Invalid SubSystem provided */
printf("Error: %s is not a valid PE SubSystem\n", argv[2]);
return 1;
}
/* Open the EXE file in binary mode */ /* Open the EXE file in binary mode */
ExeFile = fopen(argv[1], "r+b"); ExeFile = fopen(argv[1], "r+b");
if(ExeFile == NULL) if(ExeFile == NULL)
{ {
/* Failed to open PE file */ /* Failed to open PE file */
printf("ERROR: Unable to open file %s\n", argv[1]); printf("ERROR: Unable to open file %s\n", argv[1]);
return 2; return 1;
} }
/* Verify that the input file has a valid DOS header */ /* Verify that the input file has a valid DOS header */
@ -127,7 +117,7 @@ int main(int argc, char *argv[])
/* Invalid DOS header */ /* Invalid DOS header */
printf("ERROR: %s is not a valid EXE file\n", argv[1]); printf("ERROR: %s is not a valid EXE file\n", argv[1]);
fclose(ExeFile); fclose(ExeFile);
return 3; return 1;
} }
/* Verify that the input file has a valid PE header */ /* Verify that the input file has a valid PE header */
@ -135,37 +125,31 @@ int main(int argc, char *argv[])
fread(&HeaderOffset, sizeof(unsigned int), 1, ExeFile); fread(&HeaderOffset, sizeof(unsigned int), 1, ExeFile);
fseek(ExeFile, HeaderOffset, SEEK_SET); fseek(ExeFile, HeaderOffset, SEEK_SET);
fread(Signature, sizeof(unsigned char), 4, ExeFile); fread(Signature, sizeof(unsigned char), 4, ExeFile);
if((Signature[0] != 'P' || Signature[1] != 'E' || Signature[2] != 0 || Signature[3] != 0) && if(Signature[0] != 'P' || Signature[1] != 'E' || Signature[2] != 0 || Signature[3] != 0)
(Signature[0] != 'P' || Signature[1] != 'E' || Signature[2] != 'X' || Signature[3] != 'T'))
{ {
/* Invalid PE header */ /* Invalid PE header */
printf("Error: %s is not a valid PE file\n", argv[1]); printf("Error: %s is not a valid PE file\n", argv[1]);
fclose(ExeFile); fclose(ExeFile);
return 3; return 1;
} }
/* Check if setting XT subsystem */
if(NewSubSystem->Identifier >= 0x14 && NewSubSystem->Identifier <= 0x19)
{
/* Write PEXT signature */
ImageSignature = 0x54584550;
}
else
{
/* Write PE00 signature */
ImageSignature = 0x00004550;
}
/* Seek back to header offset and write new signature */
fseek(ExeFile, HeaderOffset, SEEK_SET);
fwrite(&ImageSignature, sizeof(ImageSignature), 1, ExeFile);
/* Seek to the offset of the SubSystem field in the optional header */ /* Seek to the offset of the SubSystem field in the optional header */
fseek(ExeFile, HeaderOffset + 0x5C, SEEK_SET); fseek(ExeFile, HeaderOffset + 0x5C, SEEK_SET);
/* Read the current SubSystem value */ /* Read the current SubSystem value */
fread(&SubSystem, sizeof(unsigned short), 1, ExeFile); fread(&SubSystem, sizeof(unsigned short), 1, ExeFile);
/* Parse the new SubSystem value from the command line argument */
NewSubSystem = getSubSystem(argv[2]);
if(NewSubSystem->Identifier == 0)
{
/* Invalid SubSystem provided */
printf("Error: %s is not a valid PE SubSystem\n", argv[2]);
return 1;
}
/* Print new SubSystem identifier */
/* Seek back to the SubSystem field in the optional header */ /* Seek back to the SubSystem field in the optional header */
fseek(ExeFile, -sizeof(unsigned short), SEEK_CUR); fseek(ExeFile, -sizeof(unsigned short), SEEK_CUR);
@ -176,7 +160,7 @@ int main(int argc, char *argv[])
fclose(ExeFile); fclose(ExeFile);
/* Finished successfully */ /* Finished successfully */
printf("PE SubSystem modified: 0x%02X <%s> to 0x%02X <%s>\n", printf("PE SubSystem modified: 0x%04X <%s> to 0x%04X <%s>\n",
SubSystem, getSubSystemName(SubSystem), NewSubSystem->Identifier, NewSubSystem->Name); SubSystem, getSubSystemName(SubSystem), NewSubSystem->Identifier, NewSubSystem->Name);
return 0; return 0;
} }

View File

@ -169,9 +169,9 @@ void check_num_args(int arg,
int main(int argc, int main(int argc,
char* argv[]) char* argv[])
{ {
char *dir; const char *dir;
char *basename; const char *basename;
char *target; const char *target;
split_argv(argv[0], &dir, &basename, &target, NULL); split_argv(argv[0], &dir, &basename, &target, NULL);