22 Commits
2.0 ... 2.7

Author SHA1 Message Date
361c0a1cdb Add exetool for modifying PE/COFF image subsystem
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2023-01-06 16:23:54 +01:00
d6531be5ee Update LLVM
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2022-12-17 12:10:08 +01:00
771d3783fa Update LLVM
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2022-11-08 23:32:18 +01:00
2e7c7ec1d7 Update LLVM to 15.0.2
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-10-05 08:25:06 +02:00
99f0b83ac7 Add missing cmake patch
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2022-10-02 14:29:45 +02:00
9cc7d052dd Update cmake, llvm and mingw
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-09-28 18:09:27 +02:00
abefcf8fe2 Remove old LLVM patch
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2022-09-28 15:51:43 +02:00
015bc8a666 Install llvm-lib, a lib.exe compatible tool
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-08-09 18:43:15 +02:00
546d8718d2 Reimplement new pipeline and allow limiting number of cores used fo build
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
Co-authored-by: belliash <belliash@codingworkshop.eu.org>
Reviewed-on: #3
Reviewed-by: Piotr Likoski <likoski@noreply.codingworkshop.git>
2022-07-25 15:21:17 +02:00
a65685de5c Rewrite pipeline
Some checks failed
ci/woodpecker/push/build Pipeline failed
2022-07-22 22:50:10 +02:00
f9af39e058 Allow xtchain to be launched by root 2022-07-22 22:48:22 +02:00
9b7d73e0e9 Update LLVM
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-06-29 09:46:44 +02:00
8eb76f6b90 Update LLVM to 14.0.5
All checks were successful
continuous-integration/drone/push Build is passing
2022-06-17 13:40:22 +02:00
00c659911d Make XTchain great again
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-05-29 15:05:09 +02:00
b1de0a02b6 Update Mingw64 to v10.0.0
Some checks failed
continuous-integration/drone/push Build is failing
2022-05-28 14:24:41 +02:00
36df8e42e6 Update LLVM to 14.0.4
Some checks failed
continuous-integration/drone/push Build is failing
2022-05-28 12:37:01 +02:00
7d802e0835 Merge branch 'llvm_toolchain' into master
Some checks failed
continuous-integration/drone/push Build is failing
2022-05-28 12:35:49 +02:00
1904f94583 Update cmake, ninja & wine packages 2022-05-28 12:09:43 +02:00
3096bf9255 Return 0 when printing help or version in the windres tool.
Some checks failed
continuous-integration/drone/push Build is failing
2021-02-02 18:20:19 +01:00
fdd5e32ea0 Update readme.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-02 18:17:12 +01:00
3a35c39c8e Update readme. 2021-02-02 18:14:50 +01:00
51284f1845 Import readme and license. 2020-08-17 07:59:45 +02:00
10 changed files with 158 additions and 3241 deletions

View File

@@ -1,8 +1,14 @@
kind: pipeline
type: exec
name: XT Toolchain Pipeline
steps:
- name: Compile XT Toolchain
commands:
- sh build-linux.sh
pipeline:
build:
image: codingworkshop/oscw-runner:latest
commands:
- CORES=10 ./build-linux.sh
publish:
image: codingworkshop/oscw-runner:latest
secrets:
- OSCW_GITHUB_USERNAME
- OSCW_GITHUB_PASSWORD
when:
event: tag
commands:
- github_publish $OSCW_GITHUB_USERNAME $OSCW_GITHUB_PASSWORD $(ls xtchain-*-linux.tar.zst)

View File

@@ -1,7 +1,7 @@
## XT Toolchain
This is a LLVM/Clang/LLD based mingw-w64 toolchain. It currently supports C and C++, and provides
a variety of tools including IDL, message and resource compilers. The XT Toolchain is also the
official build environment for compiling XT software, including the FerretOS. Currently, it is
official build environment for compiling XT software, including the XT OS. Currently, it is
targeted at Linux host only, however it should be possible to build it in MSYS2 as well.
Benefits of a LLVM based MinGW toolchain are:

View File

@@ -18,12 +18,12 @@ GENERIC="generic-w64-mingw32"
# CMake Settings
CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v3.19.2"
CMAKETAG="v3.24.2"
CMAKEVCS="https://gitlab.kitware.com/cmake/cmake.git"
# LLVM Settings
LLVMDIR="${SRCDIR}/llvm"
LLVMTAG="llvmorg-11.0.0"
LLVMTAG="llvmorg-15.0.6"
LLVMVCS="https://github.com/llvm/llvm-project.git"
# Make Settings
@@ -34,7 +34,7 @@ MAKEVCS="git://git.savannah.gnu.org/make"
# Mingw-w64 Settings
MINGWDIR="${SRCDIR}/mingw-w64"
MINGWLIB="ucrt"
MINGWTAG="v8.0.0"
MINGWTAG="master"
MINGWNTV="0x601"
MINGWVCS="https://github.com/mirror/mingw-w64.git"
@@ -45,12 +45,12 @@ NASMVCS="https://github.com/netwide-assembler/nasm.git"
# Ninja Settings
NINJADIR="${SRCDIR}/ninja"
NINJATAG="v1.10.0"
NINJATAG="v1.11.0"
NINJAVCS="https://github.com/ninja-build/ninja.git"
# Wine Settings
WINEDIR="${SRCDIR}/wine"
WINETAG="wine-5.15"
WINETAG="wine-7.9"
WINEVCS="git://source.winehq.org/git/wine.git"
@@ -129,7 +129,7 @@ llvm_build()
done
LLVM_ARCHS=( $(for ARCH in ${LLVM_ARCHS[@]}; do echo ${ARCH}; done | sort -u) )
cd ${LLVMDIR}/llvm/tools
for UTIL in clang lld lldb; do
for UTIL in clang lld; do
if [ ! -e ${UTIL} ]; then
ln -sf ../../${UTIL} .
fi
@@ -139,28 +139,26 @@ llvm_build()
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR} \
-DLLDB_ENABLE_CURSES=FALSE \
-DLLDB_ENABLE_LIBEDIT=FALSE \
-DLLDB_ENABLE_LUA=FALSE \
-DLLDB_ENABLE_PYTHON=FALSE \
-DLLDB_INCLUDE_TESTS=FALSE \
-DLLVM_ENABLE_ASSERTIONS=FALSE \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=TRUE \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TARGETS_TO_BUILD="$(echo ${LLVM_ARCHS[@]} | tr ' ' ';')" \
-DLLVM_TOOLCHAIN_TOOLS="clang;llvm-addr2line;llvm-ar;llvm-as;llvm-cov;llvm-cvtres;llvm-dlltool;llvm-nm;llvm-objdump;llvm-objcopy;llvm-pdbutil;llvm-profdata;llvm-ranlib;llvm-rc;llvm-readobj;llvm-strings;llvm-strip;llvm-symbolizer" \
-DLLVM_TOOLCHAIN_TOOLS="llvm-addr2line;llvm-ar;llvm-as;llvm-cov;llvm-cvtres;llvm-dlltool;llvm-lib;llvm-ml;llvm-nm;llvm-objdump;llvm-objcopy;llvm-pdbutil;llvm-profdata;llvm-ranlib;llvm-rc;llvm-readelf;llvm-readobj;llvm-strings;llvm-strip;llvm-symbolizer;llvm-windres" \
..
make -j${CORES} install/strip
cd ${WRKDIR}
}
# This function compiles and install LIBCXX
llvm_build_libcxx()
# This function compiles and install LIBCXX & LIBUNWIND
llvm_build_libs()
{
echo ">>> Building LLVM libraries (libcxx) ..."
for ARCH in ${ARCHS}; do
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/libcxx/build-${ARCH}
mkdir -p ${LLVMDIR}/libcxx/build-${ARCH}
cd ${LLVMDIR}/libcxx/build-${ARCH}
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/runtimes/build-${ARCH}
mkdir -p ${LLVMDIR}/runtimes/build-${ARCH}
cd ${LLVMDIR}/runtimes/build-${ARCH}
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR}/${ARCH}-w64-mingw32 \
@@ -168,117 +166,32 @@ llvm_build_libcxx()
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_COMPILER_TARGET=${ARCH}-w64-windows-gnu \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DCMAKE_SHARED_LINKER_FLAGS="-lunwind" \
-DCMAKE_SYSTEM_NAME="Windows" \
-DLLVM_PATH="${LLVMDIR}/llvm" \
-DLIBCXX_CXX_ABI="libcxxabi" \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS="../../libcxxabi/include" \
-DLIBCXX_CXX_ABI_LIBRARY_PATH="../../libcxxabi/build-${ARCH}/lib" \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \
-DLIBCXX_ENABLE_EXCEPTIONS=TRUE \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=FALSE \
-DLIBCXX_ENABLE_FILESYSTEM=FALSE \
-DLIBCXX_ENABLE_MONOTONIC_CLOCK=TRUE \
-DLIBCXX_ENABLE_SHARED=TRUE \
-DLIBCXX_ENABLE_STATIC=TRUE \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \
-DLIBCXX_ENABLE_THREADS=TRUE \
-DLIBCXX_HAS_WIN32_THREAD_API=TRUE \
-DLIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB=TRUE \
-DLIBCXX_INCLUDE_TESTS=FALSE \
-DLIBCXX_INSTALL_HEADERS=TRUE \
-DLIBCXX_LIBDIR_SUFFIX="" \
-DLIBCXX_USE_COMPILER_RT=TRUE \
..
make -j${CORES}
make install
${BINDIR}/bin/llvm-ar qcsL \
${BINDIR}/${ARCH}-w64-mingw32/lib/libc++.dll.a \
${BINDIR}/${ARCH}-w64-mingw32/lib/libunwind.dll.a
${BINDIR}/bin/llvm-ar qcsL \
${BINDIR}/${ARCH}-w64-mingw32/lib/libc++.a \
${BINDIR}/${ARCH}-w64-mingw32/lib/libunwind.a
if [ ! -e ${BINDIR}/${ARCH}-w64-mingw32/bin ]; then
mkdir -p ${BINDIR}/${ARCH}-w64-mingw32/bin
fi
cp lib/libc++.dll ${BINDIR}/${ARCH}-w64-mingw32/bin/
done
cd ${WRKDIR}
}
# This function compiles LIBCXXABI
llvm_build_libcxxabi()
{
echo ">>> Building LLVM libraries (libcxxabi) ..."
for ARCH in ${ARCHS}; do
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/libcxxabi/build-${ARCH}
mkdir -p ${LLVMDIR}/libcxxabi/build-${ARCH}
cd ${LLVMDIR}/libcxxabi/build-${ARCH}
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR}/${ARCH}-w64-mingw32 \
-DCMAKE_AR="${BINDIR}/bin/llvm-ar" \
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_THREAD_API_WIN32 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DCMAKE_SYSTEM_NAME="Windows" \
-DLLVM_PATH="${LLVMDIR}/llvm" \
-DLIBCXXABI_ENABLE_EXCEPTIONS=TRUE \
-DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=FALSE \
-DLIBCXXABI_ENABLE_SHARED=FALSE \
-DLIBCXXABI_ENABLE_THREADS=TRUE \
-DLIBCXXABI_LIBCXX_INCLUDES="../../libcxx/include" \
-DLIBCXXABI_LIBDIR_SUFFIX="" \
-DLIBCXXABI_TARGET_TRIPLE="${ARCH}-w64-mingw32" \
-DLIBCXXABI_USE_COMPILER_RT=TRUE \
..
make -j${CORES}
done
cd ${WRKDIR}
}
# This function compiles and installs LIBUNWIND
llvm_build_libunwind()
{
echo ">>> Building LLVM libraries (libunwind) ..."
for ARCH in ${ARCHS}; do
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/libunwind/build-${ARCH}
mkdir -p ${LLVMDIR}/libunwind/build-${ARCH}
cd ${LLVMDIR}/libunwind/build-${ARCH}
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR}/${ARCH}-w64-mingw32 \
-DCMAKE_AR="${BINDIR}/bin/llvm-ar" \
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_C_FLAGS="-Wno-dll-attribute-on-redeclaration" \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_CXX_FLAGS="-Wno-dll-attribute-on-redeclaration" \
-DCMAKE_SYSTEM_NAME="Windows" \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DLLVM_COMPILER_CHECKED=TRUE \
-DLLVM_PATH="${LLVMDIR}/llvm" \
-DLIBUNWIND_ENABLE_CROSS_UNWINDING=FALSE \
-DLIBUNWIND_ENABLE_SHARED=TRUE \
-DLIBUNWIND_ENABLE_STATIC=TRUE \
-DLIBUNWIND_ENABLE_THREADS=TRUE \
-DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_SHARED=TRUE \
-DLIBUNWIND_ENABLE_STATIC=FALSE \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_SHARED=TRUE \
-DLIBCXX_ENABLE_STATIC=FALSE \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_LIBDIR_SUFFIX="" \
-DLIBCXX_INCLUDE_TESTS=FALSE \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXXABI_LIBDIR_SUFFIX="" \
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
..
make -j${CORES}
make install
if [ ! -e ${BINDIR}/${ARCH}-w64-mingw32/bin ]; then
mkdir -p ${BINDIR}/${ARCH}-w64-mingw32/bin
fi
cp lib/libunwind.dll ${BINDIR}/${ARCH}-w64-mingw32/bin/
done
cd ${WRKDIR}
}
@@ -291,32 +204,13 @@ llvm_build_runtime()
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/compiler-rt/build-${ARCH}
mkdir -p ${LLVMDIR}/compiler-rt/build-${ARCH}
cd ${LLVMDIR}/compiler-rt/build-${ARCH}
case ${ARCH} in
"armv7")
BARCH="armv7"
LARCH="arm"
;;
"i686")
if [ ! -e ${BINDIR}/i386-w64-mingw32 ]; then
ln -sf i686-w64-mingw32 ${BINDIR}/i386-w64-mingw32
fi
BARCH="i386"
LARCH="i386"
;;
*)
BARCH="${ARCH}"
LARCH="${ARCH}"
;;
esac
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR}/${ARCH}-w64-mingw32 \
-DCMAKE_AR="${BINDIR}/bin/llvm-ar" \
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_TARGET="${BARCH}-windows-gnu" \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_C_COMPILER_TARGET="${ARCH}-windows-gnu" \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_INSTALL_PREFIX=${BINDIR}/lib/clang/${LLVMTAG##*-} \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DCMAKE_SYSTEM_NAME="Windows" \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=TRUE \
@@ -324,10 +218,7 @@ llvm_build_runtime()
-DSANITIZER_CXX_ABI=libc++ \
../lib/builtins
make -j${CORES}
mkdir -p ${BINDIR}/lib/clang/${LLVMTAG#*-}/lib/windows
for LIB in lib/windows/libclang_rt.*.a; do
cp ${LIB} ${BINDIR}/lib/clang/${LLVMTAG#*-}/lib/windows/$(basename ${LIB} | sed s/${BARCH}/${LARCH}/)
done
make install
done
cd ${WRKDIR}
}
@@ -494,7 +385,9 @@ mingw_fetch()
echo ">>> Downloading MinGW-w64 ..."
git clone ${MINGWVCS} ${MINGWDIR}
cd ${MINGWDIR}
git checkout tags/${MINGWTAG}
if [ x"${MINGWTAG}" != x"master" ]; then
git checkout tags/${MINGWTAG}
fi
apply_patches ${MINGWDIR##*/} ${MINGWTAG}
cd ${WRKDIR}
fi
@@ -557,9 +450,10 @@ wine_build()
cd ${WINEDIR}/build
../configure \
-enable-win64 \
--without-freetype \
--without-x
for TOOL in winedump wmc wrc; do
make -j${CORES} tools/${TOOL}
make -j${CORES} tools/${TOOL}/all
cp tools/${TOOL}/${TOOL} ${BINDIR}/bin/
for ARCH in ${ARCHS}; do
if [ ! -e ${BINDIR}/bin/${ARCH}-w64-mingw32-${TOOL} ]; then
@@ -608,6 +502,7 @@ xtchain_build()
ln -sf ${EXEC} ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC}
done
done
cp ${WRKDIR}/scripts/exetool ${BINDIR}/bin/
cp ${WRKDIR}/scripts/xtclib ${BINDIR}/lib/xtchain/
cp ${WRKDIR}/scripts/xtchain ${BINDIR}/
}
@@ -616,16 +511,12 @@ xtchain_build()
# Exit immediately on any failure
set -e
# Check if script launched as root
if [ "$(whoami)" = "root" ]; then
echo "This script cannot be run as root!"
exit 1
fi
# Check number of CPU cores available
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
: ${CORES:=$(nproc 2>/dev/null)}
: ${CORES:=1}
if [[ ! -n ${CORES} ]]; then
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
: ${CORES:=$(nproc 2>/dev/null)}
: ${CORES:=1}
fi
# Create working directories
mkdir -p ${BINDIR}
@@ -658,17 +549,15 @@ mingw_build_crt
# Build and install LLVM compiler runtime
llvm_build_runtime
# Build and install LLVM compiler libraries
llvm_build_libs
# Build and install Mingw-W64 libraries
mingw_build_libs
# Build and install Mingw-W64 tools
mingw_build_tools
# Build LLVM libraries
llvm_build_libunwind
llvm_build_libcxxabi
llvm_build_libcxx
# Download Wine
wine_fetch

View File

@@ -0,0 +1,13 @@
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()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

79
scripts/exetool Executable file
View File

@@ -0,0 +1,79 @@
#!/usr/bin/env python3
import sys
import struct
if len(sys.argv) < 3:
print("XTChain ExeTool for modifying PE/COFF image subsystem\nNot sufficient parametrs. '[PE/COFF Image File]' '[SubSystem]'")
sys.exit(1)
ImageFile = sys.argv[1]
Subsystem = sys.argv[2].upper()
# Set proper subsystem
if Subsystem == "UNKNOWN":
ImageSubsystem = 0x00
elif Subsystem == "NT_NATIVE":
ImageSubsystem = 0x01
elif Subsystem == "WINDOWS_GUI":
ImageSubsystem = 0x02
elif Subsystem == "WINDOWS_CLI":
ImageSubsystem = 0x03
elif Subsystem == "WINDOWS_CE_OLD":
ImageSubsystem = 0x04
elif Subsystem == "OS2_CUI":
ImageSubsystem = 0x05
elif Subsystem == "POSIX_CUI":
ImageSubsystem = 0x07
elif Subsystem == "NATIVE_WINDOWS":
ImageSubsystem = 0x08
elif Subsystem == "WINDOWS_CE_GUI":
ImageSubsystem = 0x09
elif Subsystem == "EFI_APPLICATION":
ImageSubsystem = 0x0A
elif Subsystem == "EFI_BOOT_SERVICE_DRIVER":
ImageSubsystem = 0x0B
elif Subsystem == "EFI_RUNTIME_DRIVER":
ImageSubsystem = 0x0C
elif Subsystem == "EFI_ROM":
ImageSubsystem = 0x0D
elif Subsystem == "XBOX":
ImageSubsystem = 0x0E
elif Subsystem == "WINDOWS_BOOT_APPLICATION":
ImageSubsystem = 0x10
elif Subsystem == "XT_NATIVE_KERNEL":
ImageSubsystem = 0x14
elif Subsystem == "XT_NATIVE_APPLICATION":
ImageSubsystem = 0x15
elif Subsystem == "XT_NATIVE_DRIVER":
ImageSubsystem = 0x16
elif Subsystem == "XT_DYNAMIC_LIBRARY":
ImageSubsystem = 0x17
elif Subsystem == "XT_APPLICATION_CLI":
ImageSubsystem = 0x18
elif Subsystem == "XT_APPLICATION_GDI":
ImageSubsystem = 0x19
else:
print("Invalid subsystem privided")
exit(2)
# Open PE/COFF image file
PeImage = open(sys.argv[1], "r+b")
# Get PE header
PeImage.seek(0x3C)
(PeHeader,)=struct.unpack("H", PeImage.read(2))
# Get PE signature
PeImage.seek(PeHeader)
(PeSignature,)=struct.unpack("I", PeImage.read(4))
if PeSignature != 0x4550:
print("Invalid or corrupted PE header")
# Set new image subsystem
PeImage.seek(PeHeader + 0x5C)
print("Setting subsystem to " + str(ImageSubsystem))
PeImage.write(struct.pack("H", ImageSubsystem))
# Close PE/COFF image file
PeImage.close()

View File

@@ -6,12 +6,6 @@
# DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
# Check if script launched as root
if [ "$(whoami)" = "root" ]; then
echo "This script cannot be run as root!"
exit 1
fi
# Get the absolute path to the XTchain
export XTCDIR="$(realpath $(dirname ${0}))"

View File

@@ -87,7 +87,7 @@ static
void print_version(void)
{
printf("XTchain windres (GNU windres compatible) %s\n", WINDRES_VERSION);
exit(-1);
exit(0);
}
static
@@ -126,7 +126,7 @@ void print_help(void)
" pei-x86-64\n"
" pe-i386\n"
" pei-i386\n");
exit(1);
exit(0);
}
static