Compare commits

...

13 Commits

Author SHA1 Message Date
Rafal Kupiec 3342b87fd0
Update LLVM to 18.1.4
Builds / XTChain (push) Successful in 53m41s Details
2024-04-21 09:38:29 +02:00
Rafal Kupiec cd4b20b701
Update LLVM to 18.1.2
Builds / XTChain (push) Successful in 52m51s Details
2024-03-23 12:16:49 +01:00
Rafal Kupiec fc120f4f33
Update LLVM to 18.1.1
Builds / XTChain (push) Successful in 54m3s Details
2024-03-17 12:20:12 +01:00
Rafal Kupiec b8d5a76ee7
Update LLVM to 18.1.0
Builds / XTChain (push) Successful in 55m24s Details
2024-03-06 19:42:22 +01:00
Rafal Kupiec 009d4a3421
Update PE file subsystem together with signature
Builds / XTChain (push) Successful in 1h17m23s Details
2024-01-18 14:35:55 +01:00
Rafal Kupiec 460d5820da
Minimize exetool's output
Builds / XTChain (push) Failing after 1h9m36s Details
2023-11-28 15:21:17 +01:00
Rafal Kupiec 83e84c3ebf
Update LLVM to 17.0.6
Builds / XTChain (push) Successful in 1h16m49s Details
2023-11-28 14:51:07 +01:00
Pedro Valadés eeb1953d87
Improve performance with Git shallow clone and add .gitignore
Builds / XTChain (push) Successful in 1h15m53s Details
Reviewed-on: #5
Reviewed-by: Rafal Kupiec <belliash@noreply.codingworkshop.git>
Co-authored-by: Pedro Valadés <perikiyoxd@gmail.com>
Co-committed-by: Pedro Valadés <perikiyoxd@gmail.com>
2023-11-23 23:13:06 +01:00
Rafal Kupiec e9707563d7
Update LLVM to 17.0.5
Builds / XTChain (push) Successful in 1h23m53s Details
2023-11-14 12:24:00 +01:00
Rafal Kupiec 11d0593c9e
Add 'help' and 'xbuild' commands; fix 'version' command overriding build settings
Builds / XTChain (push) Successful in 1h23m6s Details
2023-11-08 19:41:22 +01:00
Rafal Kupiec 22a5abd279
Update release badge color
Builds / XTChain (push) Successful in 1h26m41s Details
2023-11-07 15:09:38 +01:00
Rafal Kupiec 8c047d6083
Add releases link to readme
Builds / XTChain (push) Successful in 1h24m53s Details
2023-11-07 15:07:04 +01:00
Rafal Kupiec 1832a39ed3
Update LLVM to 17.0.4
Builds / XTChain (push) Successful in 1h23m46s Details
2023-10-31 19:08:00 +01:00
5 changed files with 104 additions and 62 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
binaries/*
sources/*
xtchain-*.zst

View File

@ -5,6 +5,9 @@
<a href="https://git.codingworkshop.eu.org/xt-sys/xtchain/actions">
<img alt="Build Status" src="https://codingworkshop.eu.org/actions.php?project=xt-sys/xtchain">
</a>
<a href="https://github.com/xt-sys/xtchain/releases">
<img alt="Releases" src="https://img.shields.io/github/v/release/xt-sys/xtchain?label=Release&amp;color=blueviolet">
</a>
<a href="https://git.codingworkshop.eu.org/xt-sys/xtchain/src/branch/master/COPYING.md">
<img alt="License" src="https://img.shields.io/badge/License-GPLv3-blue.svg">
</a>

View File

@ -28,7 +28,7 @@ CMAKEVCS="https://gitlab.kitware.com/cmake/cmake.git"
# LLVM Settings
LLVMDIR="${SRCDIR}/llvm"
LLVMTAG="llvmorg-17.0.3"
LLVMTAG="llvmorg-18.1.4"
LLVMVCS="https://github.com/llvm/llvm-project.git"
# Make Settings
@ -116,9 +116,8 @@ binutils_fetch()
{
if [ ! -d ${BINUTILSDIR} ]; then
echo ">>> Downloading BINUTILS ..."
git clone ${BINUTILSVCS} ${BINUTILSDIR}
git clone --depth 1 --branch ${BINUTILSTAG} ${BINUTILSVCS} ${BINUTILSDIR}
cd ${BINUTILSDIR}
git checkout tags/${BINUTILSTAG}
apply_patches ${BINUTILSDIR##*/} ${BINUTILSTAG##*-}
cd ${WRKDIR}
fi
@ -145,9 +144,8 @@ cmake_fetch()
{
if [ ! -d ${CMAKEDIR} ]; then
echo ">>> Downloading CMAKE ..."
git clone ${CMAKEVCS} ${CMAKEDIR}
git clone --depth 1 --branch ${CMAKETAG} ${CMAKEVCS} ${CMAKEDIR}
cd ${CMAKEDIR}
git checkout tags/${CMAKETAG}
apply_patches ${CMAKEDIR##*/} ${CMAKETAG}
cd ${WRKDIR}
fi
@ -282,9 +280,8 @@ llvm_fetch()
{
if [ ! -d ${LLVMDIR} ]; then
echo ">>> Downloading LLVM ..."
git clone ${LLVMVCS} ${LLVMDIR}
git clone --depth 1 --branch ${LLVMTAG} ${LLVMVCS} ${LLVMDIR}
cd ${LLVMDIR}
git checkout tags/${LLVMTAG}
apply_patches ${LLVMDIR##*/} ${LLVMTAG##*-}
cd ${WRKDIR}
fi
@ -319,9 +316,8 @@ make_fetch()
{
if [ ! -d ${MAKEDIR} ]; then
echo ">>> Downloading Make ..."
git clone ${MAKEVCS} ${MAKEDIR}
git clone --depth 1 --branch ${MAKETAG} ${MAKEVCS} ${MAKEDIR}
cd ${MAKEDIR}
git checkout tags/${MAKETAG}
apply_patches ${MAKEDIR##*/} ${MAKETAG}
cd ${WRKDIR}
fi
@ -440,11 +436,8 @@ mingw_fetch()
{
if [ ! -d ${MINGWDIR} ]; then
echo ">>> Downloading MinGW-w64 ..."
git clone ${MINGWVCS} ${MINGWDIR}
git clone --depth 1 --branch ${MINGWTAG} ${MINGWVCS} ${MINGWDIR}
cd ${MINGWDIR}
if [ x"${MINGWTAG}" != x"master" ]; then
git checkout tags/${MINGWTAG}
fi
apply_patches ${MINGWDIR##*/} ${MINGWTAG}
cd ${WRKDIR}
fi
@ -467,9 +460,8 @@ ninja_fetch()
{
if [ ! -d ${NINJADIR} ]; then
echo ">>> Downloading NINJA ..."
git clone ${NINJAVCS} ${NINJADIR}
git clone --depth 1 --branch ${NINJATAG} ${NINJAVCS} ${NINJADIR}
cd ${NINJADIR}
git checkout tags/${NINJATAG}
apply_patches ${NINJADIR##*/} ${NINJATAG}
cd ${WRKDIR}
fi
@ -502,9 +494,8 @@ wine_fetch()
{
if [ ! -d ${WINEDIR} ]; then
echo ">>> Downloading WINE ..."
git clone ${WINEVCS} ${WINEDIR}
git clone --depth 1 --branch ${WINETAG} ${WINEVCS} ${WINEDIR}
cd ${WINEDIR}
git checkout tags/${WINETAG}
apply_patches ${WINEDIR##*/} ${WINETAG##*-}
cd ${WRKDIR}
fi

View File

@ -51,6 +51,19 @@ chbuild()
}
export -f chbuild
# Prints help
help()
{
version
echo "XTChain defines an internal list of commands:"
echo " * charch [arch] - sets the target CPU architecture [aarch64/armv7/i686/amd64]"
echo " * chbuild [type] - sets build type [debug/release]"
echo " * help - prints this message"
echo " * version - prints XTChain and its components version"
echo " * xbuild - builds an application with a Ninja build system"
}
export -f help
# Displays version banner
version()
{
@ -66,9 +79,26 @@ version()
echo "Wine Message Compiler Version: $(${XTCDIR}/bin/wmc -V | grep 'version' | cut -d' ' -f5)"
echo "Wine Resource Compiler Version: $(${XTCDIR}/bin/wrc --version | grep 'version' | cut -d' ' -f5)"
echo
charch ${TARGET}
chbuild DEBUG
charch ${TARGET:-amd64}
chbuild ${BUILD_TYPE:-DEBUG}
echo
echo
}
export -f version
# Builds application (wrapper to Ninja)
xbuild()
{
if [ ! -f build.arch ]; then
ninja "$@"
else
ARCH=$(cat build.arch)
if [ x"${ARCH}" != x"${TARGET}" ]; then
echo "Build is configured for '${ARCH}' while current target set to '${TARGET}'!"
echo "Cannot continue until conflict is resolved ..."
return 1
fi
ninja "$@"
fi
}
export -f xbuild

View File

@ -2,7 +2,7 @@
* PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory
* FILE: tools/exetool.c
* DESCRIPTION: Portable Executable (PE) utility for changing subsystem
* DESCRIPTION: Portable Executable (PE) utility for changing its signature and subsystem
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
@ -91,6 +91,7 @@ int main(int argc, char *argv[])
FILE *ExeFile;
unsigned char Signature[4];
unsigned int HeaderOffset;
unsigned int ImageSignature;
unsigned short SubSystem;
PPE_SUBSYSTEM NewSubSystem;
@ -101,45 +102,6 @@ int main(int argc, char *argv[])
return 1;
}
/* Open the EXE file in binary mode */
ExeFile = fopen(argv[1], "r+b");
if(ExeFile == NULL)
{
/* Failed to open PE file */
printf("ERROR: Unable to open file %s\n", argv[1]);
return 1;
}
/* Verify that the input file has a valid DOS header */
fread(Signature, sizeof(unsigned char), 4, ExeFile);
if(Signature[0] != 'M' || Signature[1] != 'Z')
{
/* Invalid DOS header */
printf("ERROR: %s is not a valid EXE file\n", argv[1]);
fclose(ExeFile);
return 1;
}
/* Verify that the input file has a valid PE header */
fseek(ExeFile, 0x3C, SEEK_SET);
fread(&HeaderOffset, sizeof(unsigned int), 1, ExeFile);
fseek(ExeFile, HeaderOffset, SEEK_SET);
fread(Signature, sizeof(unsigned char), 4, ExeFile);
if(Signature[0] != 'P' || Signature[1] != 'E' || Signature[2] != 0 || Signature[3] != 0)
{
/* Invalid PE header */
printf("Error: %s is not a valid PE file\n", argv[1]);
fclose(ExeFile);
return 1;
}
/* Seek to the offset of the SubSystem field in the optional header */
fseek(ExeFile, HeaderOffset + 0x5C, SEEK_SET);
/* Read the current SubSystem value */
fread(&SubSystem, sizeof(unsigned short), 1, ExeFile);
printf("Original SubSystem: 0x%04X <%s>\n", SubSystem, getSubSystemName(SubSystem));
/* Parse the new SubSystem value from the command line argument */
NewSubSystem = getSubSystem(argv[2]);
if(NewSubSystem->Identifier == 0)
@ -149,8 +111,60 @@ int main(int argc, char *argv[])
return 1;
}
/* Print new SubSystem identifier */
printf("New SubSystem: 0x%04X <%s>\n", NewSubSystem->Identifier, NewSubSystem->Name);
/* Open the EXE file in binary mode */
ExeFile = fopen(argv[1], "r+b");
if(ExeFile == NULL)
{
/* Failed to open PE file */
printf("ERROR: Unable to open file %s\n", argv[1]);
return 2;
}
/* Verify that the input file has a valid DOS header */
fread(Signature, sizeof(unsigned char), 4, ExeFile);
if(Signature[0] != 'M' || Signature[1] != 'Z')
{
/* Invalid DOS header */
printf("ERROR: %s is not a valid EXE file\n", argv[1]);
fclose(ExeFile);
return 3;
}
/* Verify that the input file has a valid PE header */
fseek(ExeFile, 0x3C, SEEK_SET);
fread(&HeaderOffset, sizeof(unsigned int), 1, ExeFile);
fseek(ExeFile, HeaderOffset, SEEK_SET);
fread(Signature, sizeof(unsigned char), 4, ExeFile);
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 */
printf("Error: %s is not a valid PE file\n", argv[1]);
fclose(ExeFile);
return 3;
}
/* 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 */
fseek(ExeFile, HeaderOffset + 0x5C, SEEK_SET);
/* Read the current SubSystem value */
fread(&SubSystem, sizeof(unsigned short), 1, ExeFile);
/* Seek back to the SubSystem field in the optional header */
fseek(ExeFile, -sizeof(unsigned short), SEEK_CUR);
@ -162,6 +176,7 @@ int main(int argc, char *argv[])
fclose(ExeFile);
/* Finished successfully */
printf("SubSystem successfully modified!\n");
printf("PE SubSystem modified: 0x%02X <%s> to 0x%02X <%s>\n",
SubSystem, getSubSystemName(SubSystem), NewSubSystem->Identifier, NewSubSystem->Name);
return 0;
}