Compare commits

..

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

13 changed files with 1153 additions and 398 deletions

14
.build.yml Normal file
View File

@ -0,0 +1,14 @@
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,20 +0,0 @@
name: Builds
run-name: ${{ github.actor }} runs Gitea Actions
on: [push]
jobs:
XTChain:
runs-on: oscw
container:
image: codingworkshop/oscw-runner:latest
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Build XTChain
run: CORES=10 ./build-linux.sh
- name: Publish binaries
if: startsWith(github.ref, 'refs/tags/')
env:
OSCW_GITHUB_USERNAME: ${{ secrets.OSCW_GITHUB_USERNAME }}
OSCW_GITHUB_PASSWORD: ${{ secrets.OSCW_GITHUB_PASSWORD }}
run: github_publish $OSCW_GITHUB_USERNAME $OSCW_GITHUB_PASSWORD $(ls xtchain-*-linux.tar.zst)

3
.gitignore vendored
View File

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

View File

@ -1,26 +1,3 @@
<p align=center>
<a href="https://git.codingworkshop.eu.org/xt-sys/xtchain">
<img alt="GIT Repository" src="https://img.shields.io/badge/Source-GIT-purple">
</a>
<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>
<a href="https://github.com/sponsors/xt-sys/">
<img alt="Sponsors" src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-red?logo=GitHub">
</a>
<a href="https://discord.com/invite/zBzJ5qMGX7">
<img alt="Discord" src="https://img.shields.io/badge/Chat-Join%20Discord-success">
</a>
</p>
---
## XT Toolchain ## XT Toolchain
This is a LLVM/Clang/LLD based mingw-w64 toolchain. It currently supports C and C++, and provides 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 a variety of tools including IDL, message and resource compilers. The XT Toolchain is also the
@ -34,10 +11,10 @@ Benefits of a LLVM based MinGW toolchain are:
This software includes: This software includes:
* CMake * CMake
* GNU Assembler
* LLVM * LLVM
* Make * Make
* Mingw-w64 * Mingw-w64
* NASM
* Ninja * Ninja
* Wine * Wine

View File

@ -18,35 +18,40 @@ GENERIC="generic-w64-mingw32"
# CMake Settings # CMake Settings
CMAKEDIR="${SRCDIR}/cmake" CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v3.31.3" CMAKETAG="v3.23.1"
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-14.0.6"
LLVMVCS="https://github.com/llvm/llvm-project.git" LLVMVCS="https://github.com/llvm/llvm-project.git"
# Make Settings # Make Settings
MAKEDIR="${SRCDIR}/make" MAKEDIR="${SRCDIR}/make"
MAKETAG="4.4.1" MAKETAG="4.3"
MAKEVCS="git://git.savannah.gnu.org/make" MAKEVCS="git://git.savannah.gnu.org/make"
# Mingw-w64 Settings # Mingw-w64 Settings
MINGWDIR="${SRCDIR}/mingw-w64" MINGWDIR="${SRCDIR}/mingw-w64"
MINGWLIB="ucrt" MINGWLIB="ucrt"
MINGWTAG="master" MINGWTAG="v10.0.0"
MINGWNTV="0x601" MINGWNTV="0x601"
MINGWVCS="https://github.com/mirror/mingw-w64.git" MINGWVCS="https://github.com/mirror/mingw-w64.git"
# NASM Settings
NASMDIR="${SRCDIR}/nasm"
NASMTAG="nasm-2.15.05"
NASMVCS="https://github.com/netwide-assembler/nasm.git"
# Ninja Settings # Ninja Settings
NINJADIR="${SRCDIR}/ninja" NINJADIR="${SRCDIR}/ninja"
NINJATAG="v1.12.1" NINJATAG="v1.11.0"
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-7.9"
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
@ -95,8 +100,9 @@ cmake_fetch()
{ {
if [ ! -d ${CMAKEDIR} ]; then if [ ! -d ${CMAKEDIR} ]; then
echo ">>> Downloading CMAKE ..." echo ">>> Downloading CMAKE ..."
git clone --depth 1 --branch ${CMAKETAG} ${CMAKEVCS} ${CMAKEDIR} git clone ${CMAKEVCS} ${CMAKEDIR}
cd ${CMAKEDIR} cd ${CMAKEDIR}
git checkout tags/${CMAKETAG}
apply_patches ${CMAKEDIR##*/} ${CMAKETAG} apply_patches ${CMAKEDIR##*/} ${CMAKETAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@ -130,18 +136,18 @@ llvm_build()
done done
mkdir -p ${LLVMDIR}/llvm/build mkdir -p ${LLVMDIR}/llvm/build
cd ${LLVMDIR}/llvm/build cd ${LLVMDIR}/llvm/build
cmake -G Ninja \ cmake \
-DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR} \ -DCMAKE_INSTALL_PREFIX=${BINDIR} \
-DLLDB_INCLUDE_TESTS=FALSE \ -DLLDB_INCLUDE_TESTS=FALSE \
-DLLVM_ENABLE_ASSERTIONS=FALSE \ -DLLVM_ENABLE_ASSERTIONS=FALSE \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \ -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TARGETS_TO_BUILD="$(echo ${LLVM_ARCHS[@]} | tr ' ' ';')" \ -DLLVM_TARGETS_TO_BUILD="$(echo ${LLVM_ARCHS[@]} | tr ' ' ';')" \
-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" \ -DLLVM_TOOLCHAIN_TOOLS="llvm-addr2line;llvm-ar;llvm-as;llvm-cov;llvm-cvtres;llvm-dlltool;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" \
.. ..
ninja install/strip make -j${CORES} install/strip
cd ${WRKDIR} cd ${WRKDIR}
} }
@ -153,17 +159,15 @@ llvm_build_libs()
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/runtimes/build-${ARCH} [ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/runtimes/build-${ARCH}
mkdir -p ${LLVMDIR}/runtimes/build-${ARCH} mkdir -p ${LLVMDIR}/runtimes/build-${ARCH}
cd ${LLVMDIR}/runtimes/build-${ARCH} cd ${LLVMDIR}/runtimes/build-${ARCH}
cmake -G Ninja \ cmake \
-DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX="${BINDIR}/${ARCH}-w64-mingw32" \ -DCMAKE_INSTALL_PREFIX=${BINDIR}/${ARCH}-w64-mingw32 \
-DCMAKE_AR="${BINDIR}/bin/llvm-ar" \ -DCMAKE_AR="${BINDIR}/bin/llvm-ar" \
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \ -DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_WORKS=1 \ -DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_C_FLAGS_INIT=-mguard=cf \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \ -DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_COMPILER_TARGET=${ARCH}-w64-windows-gnu \ -DCMAKE_CXX_COMPILER_TARGET=${ARCH}-w64-windows-gnu \
-DCMAKE_CXX_COMPILER_WORKS=1 \ -DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_CXX_FLAGS_INIT=-mguard=cf \
-DCMAKE_CROSSCOMPILING=TRUE \ -DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \ -DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DCMAKE_SYSTEM_NAME="Windows" \ -DCMAKE_SYSTEM_NAME="Windows" \
@ -171,13 +175,13 @@ llvm_build_libs()
-DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \ -DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \ -DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_SHARED=TRUE \ -DLIBUNWIND_ENABLE_SHARED=TRUE \
-DLIBUNWIND_ENABLE_STATIC=TRUE \ -DLIBUNWIND_ENABLE_STATIC=FALSE \
-DLIBCXX_USE_COMPILER_RT=ON \ -DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_SHARED=TRUE \ -DLIBCXX_ENABLE_SHARED=TRUE \
-DLIBCXX_ENABLE_STATIC=TRUE \ -DLIBCXX_ENABLE_STATIC=FALSE \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \ -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \
-DLIBCXX_CXX_ABI="libcxxabi" \ -DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_LIBDIR_SUFFIX="" \ -DLIBCXX_LIBDIR_SUFFIX="" \
-DLIBCXX_INCLUDE_TESTS=FALSE \ -DLIBCXX_INCLUDE_TESTS=FALSE \
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \ -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \
@ -186,8 +190,8 @@ llvm_build_libs()
-DLIBCXXABI_LIBDIR_SUFFIX="" \ -DLIBCXXABI_LIBDIR_SUFFIX="" \
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \ -DLIBCXXABI_USE_LLVM_UNWINDER=ON \
.. ..
ninja make -j${CORES}
ninja install make install
done done
cd ${WRKDIR} cd ${WRKDIR}
} }
@ -200,28 +204,21 @@ llvm_build_runtime()
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/compiler-rt/build-${ARCH} [ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/compiler-rt/build-${ARCH}
mkdir -p ${LLVMDIR}/compiler-rt/build-${ARCH} mkdir -p ${LLVMDIR}/compiler-rt/build-${ARCH}
cd ${LLVMDIR}/compiler-rt/build-${ARCH} cd ${LLVMDIR}/compiler-rt/build-${ARCH}
cmake -G Ninja \ cmake \
-DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_AR="${BINDIR}/bin/llvm-ar" \ -DCMAKE_AR="${BINDIR}/bin/llvm-ar" \
-DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \ -DCMAKE_C_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang" \
-DCMAKE_C_COMPILER_TARGET="${ARCH}-windows-gnu" \ -DCMAKE_C_COMPILER_TARGET="${ARCH}-windows-gnu" \
-DCMAKE_C_FLAGS_INIT="-mguard=cf" \
-DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \ -DCMAKE_CXX_COMPILER="${BINDIR}/bin/${ARCH}-w64-mingw32-clang++" \
-DCMAKE_CXX_FLAGS_INIT="-mguard=cf" \ -DCMAKE_INSTALL_PREFIX=${BINDIR}/lib/clang/${LLVMTAG##*-} \
-DCMAKE_FIND_ROOT_PATH="${BINDIR}/${ARCH}-w64-mingw32" \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
-DCMAKE_INSTALL_PREFIX=$(${BINDIR}/bin/${ARCH}-w64-mingw32-clang --print-resource-dir) \
-DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \ -DCMAKE_RANLIB="${BINDIR}/bin/llvm-ranlib" \
-DCMAKE_SYSTEM_NAME="Windows" \ -DCMAKE_SYSTEM_NAME="Windows" \
-DCOMPILER_RT_BUILD_BUILTINS=TRUE \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=TRUE \ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=TRUE \
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=TRUE \ -DCOMPILER_RT_USE_BUILTINS_LIBRARY=TRUE \
-DLLVM_CONFIG_PATH="" \ -DSANITIZER_CXX_ABI=libc++ \
-DSANITIZER_CXX_ABI="libc++" \
../lib/builtins ../lib/builtins
ninja make -j${CORES}
ninja install make install
done done
cd ${WRKDIR} cd ${WRKDIR}
} }
@ -231,8 +228,9 @@ llvm_fetch()
{ {
if [ ! -d ${LLVMDIR} ]; then if [ ! -d ${LLVMDIR} ]; then
echo ">>> Downloading LLVM ..." echo ">>> Downloading LLVM ..."
git clone --depth 1 --branch ${LLVMTAG} ${LLVMVCS} ${LLVMDIR} git clone ${LLVMVCS} ${LLVMDIR}
cd ${LLVMDIR} cd ${LLVMDIR}
git checkout tags/${LLVMTAG}
apply_patches ${LLVMDIR##*/} ${LLVMTAG##*-} apply_patches ${LLVMDIR##*/} ${LLVMTAG##*-}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@ -267,8 +265,9 @@ make_fetch()
{ {
if [ ! -d ${MAKEDIR} ]; then if [ ! -d ${MAKEDIR} ]; then
echo ">>> Downloading Make ..." echo ">>> Downloading Make ..."
git clone --depth 1 --branch ${MAKETAG} ${MAKEVCS} ${MAKEDIR} git clone ${MAKEVCS} ${MAKEDIR}
cd ${MAKEDIR} cd ${MAKEDIR}
git checkout tags/${MAKETAG}
apply_patches ${MAKEDIR##*/} ${MAKETAG} apply_patches ${MAKEDIR##*/} ${MAKETAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@ -303,7 +302,6 @@ mingw_build_crt()
--prefix=${BINDIR}/${ARCH}-w64-mingw32 \ --prefix=${BINDIR}/${ARCH}-w64-mingw32 \
--with-sysroot=${BINDIR} \ --with-sysroot=${BINDIR} \
--with-default-msvcrt=${MINGWLIB} \ --with-default-msvcrt=${MINGWLIB} \
--enable-cfguard \
${FLAGS} ${FLAGS}
make -j${CORES} make -j${CORES}
make install make install
@ -349,9 +347,7 @@ mingw_build_libs()
../configure \ ../configure \
--host=${ARCH}-w64-mingw32 \ --host=${ARCH}-w64-mingw32 \
--prefix=${BINDIR}/${ARCH}-w64-mingw32 \ --prefix=${BINDIR}/${ARCH}-w64-mingw32 \
--libdir=${BINDIR}/${ARCH}-w64-mingw32/lib \ --libdir=${BINDIR}/${ARCH}-w64-mingw32/lib
CFLAGS="-O2 -mguard=cf" \
CXXFLAGS="-O2 -mguard=cf"
make -j${CORES} make -j${CORES}
make install make install
PATH="${ORIGPATH}" PATH="${ORIGPATH}"
@ -363,7 +359,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}
@ -387,13 +383,38 @@ mingw_fetch()
{ {
if [ ! -d ${MINGWDIR} ]; then if [ ! -d ${MINGWDIR} ]; then
echo ">>> Downloading MinGW-w64 ..." echo ">>> Downloading MinGW-w64 ..."
git clone --depth 1 --branch ${MINGWTAG} ${MINGWVCS} ${MINGWDIR} git clone ${MINGWVCS} ${MINGWDIR}
cd ${MINGWDIR} cd ${MINGWDIR}
git checkout tags/${MINGWTAG}
apply_patches ${MINGWDIR##*/} ${MINGWTAG} apply_patches ${MINGWDIR##*/} ${MINGWTAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
} }
# This function compiles and installs NASM
nasm_build()
{
cd ${NASMDIR}
./autogen.sh
./configure
make -j${CORES}
install nasm ndisasm ${BINDIR}/bin/
cd ${WRKDIR}
}
# This function downloads NASM from VCS
nasm_fetch()
{
if [ ! -d ${NASMDIR} ]; then
echo ">>> Downloading NASM ..."
git clone ${NASMVCS} ${NASMDIR}
cd ${NASMDIR}
git checkout tags/${NASMTAG}
apply_patches ${NASMDIR##*/} ${NASMTAG##*-}
cd ${WRKDIR}
fi
}
# This function compiles and installs NINJA # This function compiles and installs NINJA
ninja_build() ninja_build()
{ {
@ -411,8 +432,9 @@ ninja_fetch()
{ {
if [ ! -d ${NINJADIR} ]; then if [ ! -d ${NINJADIR} ]; then
echo ">>> Downloading NINJA ..." echo ">>> Downloading NINJA ..."
git clone --depth 1 --branch ${NINJATAG} ${NINJAVCS} ${NINJADIR} git clone ${NINJAVCS} ${NINJADIR}
cd ${NINJADIR} cd ${NINJADIR}
git checkout tags/${NINJATAG}
apply_patches ${NINJADIR##*/} ${NINJATAG} apply_patches ${NINJADIR##*/} ${NINJATAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@ -445,8 +467,9 @@ wine_fetch()
{ {
if [ ! -d ${WINEDIR} ]; then if [ ! -d ${WINEDIR} ]; then
echo ">>> Downloading WINE ..." echo ">>> Downloading WINE ..."
git clone --depth 1 --branch ${WINETAG} ${WINEVCS} ${WINEDIR} git clone ${WINEVCS} ${WINEDIR}
cd ${WINEDIR} cd ${WINEDIR}
git checkout tags/${WINETAG}
apply_patches ${WINEDIR##*/} ${WINETAG##*-} apply_patches ${WINEDIR##*/} ${WINETAG##*-}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@ -470,7 +493,7 @@ xtchain_build()
for EXEC in dlltool ld objdump; do for EXEC in dlltool ld objdump; do
ln -sf ../${GENERIC}/bin/${EXEC}-wrapper ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC} ln -sf ../${GENERIC}/bin/${EXEC}-wrapper ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC}
done done
for EXEC in bin2c exetool windres xtcspecc; do for EXEC in windres xtcspecc; do
if [ ! -e ${BINDIR}/bin/${EXEC} ]; then if [ ! -e ${BINDIR}/bin/${EXEC} ]; then
gcc ${WRKDIR}/tools/${EXEC}.c -o ${BINDIR}/bin/${EXEC} gcc ${WRKDIR}/tools/${EXEC}.c -o ${BINDIR}/bin/${EXEC}
fi fi
@ -505,6 +528,12 @@ llvm_fetch
# Build and install LLVM # Build and install LLVM
llvm_build llvm_build
# Download NASM
nasm_fetch
# Build and install NASM
nasm_build
# Download Mingw-W64 # Download Mingw-W64
mingw_fetch mingw_fetch
@ -553,12 +582,12 @@ ninja_build
# Remove unneeded files to save disk space # Remove unneeded files to save disk space
echo ">>> Removing unneeded files to save disk space ..." echo ">>> Removing unneeded files to save disk space ..."
rm -rf ${BINDIR}/{doc,include,share/{bash-completion,emacs,info,locale,man,vim}} rm -rf ${BINDIR}/{doc,include,share/{bash-completion,emacs,info,locale,man,vim}}
rm -rf ${BINDIR}/bin/amdgpu-arch,{clang-{check,exdef-mapping,import-test,offload-*,rename,scan-deps},diagtool,hmaptool,ld64.lld,modularize,nxptx-arch,wasm-ld} rm -rf ${BINDIR}/bin/{clang-{check,exdef-mapping,import-test,offload-*,rename,scan-deps},hmaptool,ld64.lld,wasm-ld}
# Save XT Toolchain version # Save XT Toolchain version
cd ${WRKDIR} cd ${WRKDIR}
: ${XTCVER:=$(git describe --exact-match --tags 2>/dev/null)} : ${XTCVER:=$(git describe --exact-match --tags 2>/dev/null)}
: ${XTCVER:=DEVEL} : ${XTCVER:=DEV}
echo "${XTCVER}" > ${BINDIR}/Version echo "${XTCVER}" > ${BINDIR}/Version
# Prepare archive # Prepare archive

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()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
diff --git a/src/job.c b/src/job.c
index d6e28d3..f8f6950 100644
--- a/src/job.c
+++ b/src/job.c
@@ -2391,7 +2391,7 @@ child_execute_job (struct childbase *child, int good_stdin, char **argv)
}
}
- cmd = (char *)find_in_given_path (argv[0], p, 0);
+ cmd = (char *)find_in_given_path (argv[0], p, 0, false);
}
if (!cmd)

View File

@ -51,24 +51,11 @@ chbuild()
} }
export -f 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 # Displays version banner
version() version()
{ {
echo "###############################################################################" echo "###############################################################################"
echo "# XT Toolchain v${XTCVER} for Linux #" echo "# XT Toolchain v${XTCVER} for Linux #"
echo "# by Rafal Kupiec <belliash@codingworkshop.eu.org> #" echo "# by Rafal Kupiec <belliash@codingworkshop.eu.org> #"
echo "###############################################################################" echo "###############################################################################"
echo echo
@ -79,26 +66,9 @@ version()
echo "Wine Message Compiler Version: $(${XTCDIR}/bin/wmc -V | grep 'version' | cut -d' ' -f5)" 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 "Wine Resource Compiler Version: $(${XTCDIR}/bin/wrc --version | grep 'version' | cut -d' ' -f5)"
echo echo
charch ${TARGET:-amd64} charch ${TARGET}
chbuild ${BUILD_TYPE:-DEBUG} chbuild DEBUG
echo echo
echo echo
} }
export -f version 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

@ -1,74 +0,0 @@
/**
* PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory
* FILE: tools/bin2c.c
* DESCRIPTION: Binary to C converter
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include "xtchain.h"
int main(int argc, char *argv[])
{
/* Check for proper number of arguments */
if(argc != 4)
{
printf("Usage: %s <input binary> <output file> <structure name>\n", argv[0]);
return 1;
}
/* Open the input binary file in binary mode */
FILE *inputFile = fopen(argv[1], "rb");
if(inputFile == NULL)
{
printf("Error: unable to open file %s\n", argv[1]);
return 1;
}
/* Open the destination source code file in text mode */
FILE *outputFile = fopen(argv[2], "w");
if(outputFile == NULL)
{
printf("Error: unable to open file %s\n", argv[2]);
fclose(inputFile);
return 1;
}
/* Get the size of the binary file */
fseek(inputFile, 0, SEEK_END);
long binSize = ftell(inputFile);
rewind(inputFile);
/* Allocate memory for the binary data */
unsigned char *binData = (unsigned char *)malloc(binSize);
if(binData == NULL)
{
printf("Error: unable to allocate memory for binary data\n");
fclose(inputFile);
fclose(outputFile);
return 1;
}
/* Read the binary data into memory */
fread(binData, sizeof(unsigned char), binSize, inputFile);
/* Write the C structure to the header file */
fprintf(outputFile, "unsigned char %s[] = {", argv[3]);
for(int i = 0; i < binSize; i++)
{
fprintf(outputFile, "0x%02X", binData[i]);
if(i < binSize - 1)
{
fprintf(outputFile, ",");
}
}
fprintf(outputFile, "};\nunsigned int %s_size = %ld;\n", argv[3], binSize);
free(binData);
/* Close all open files */
fclose(inputFile);
fclose(outputFile);
printf("Binary data converted to C structure successfully.\n");
return 0;
}

View File

@ -1,182 +0,0 @@
/**
* PROJECT: XTchain
* LICENSE: See COPYING.md in the top level directory
* FILE: tools/exetool.c
* DESCRIPTION: Portable Executable (PE) utility for changing its signature and subsystem
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include "xtchain.h"
typedef struct _PE_SUBSYSTEM
{
int Identifier;
char *Name;
} PE_SUBSYSTEM, *PPE_SUBSYSTEM;
static PE_SUBSYSTEM SubSystems[] = {
{0x00, "INVALID_SUBSYSTEM"},
{0x01, "NT_NATIVE"},
{0x02, "WINDOWS_GUI"},
{0x03, "WINDOWS_CLI"},
{0x04, "WINDOWS_CE_OLD"},
{0x05, "OS2_CUI"},
{0x07, "POSIX_CUI"},
{0x08, "NATIVE_WINDOWS"},
{0x09, "WINDOWS_CE_GUI"},
{0x0A, "EFI_APPLICATION"},
{0x0B, "EFI_BOOT_SERVICE_DRIVER"},
{0x0C, "EFI_RUNTIME_DRIVER"},
{0x0D, "EFI_ROM"},
{0x0E, "XBOX"},
{0x10, "WINDOWS_BOOT_APPLICATION"},
{0x14, "XT_NATIVE_KERNEL"},
{0x15, "XT_NATIVE_APPLICATION"},
{0x16, "XT_NATIVE_DRIVER"},
{0x17, "XT_DYNAMIC_LIBRARY"},
{0x18, "XT_APPLICATION_CLI"},
{0x19, "XT_APPLICATION_GDI"}
};
PPE_SUBSYSTEM getSubSystem(char *Name)
{
int Index;
int SubSystemsCount;
PPE_SUBSYSTEM SubSystem;
/* Count number of subsystems avaialble */
SubSystemsCount = sizeof(SubSystems) / sizeof(PE_SUBSYSTEM);
/* Find subsystem */
for(Index = 0; Index < SubSystemsCount; Index++)
{
SubSystem = &SubSystems[Index];
if(strcasecmp(SubSystem->Name, Name) == 0)
{
/* Subsystem found, return its ID */
return SubSystem;
}
}
/* No valid subsystem found */
return &SubSystems[0];
}
char *getSubSystemName(int Identifier)
{
int Index;
int SubSystemsCount;
PPE_SUBSYSTEM SubSystem;
/* Count number of subsystems avaialble */
SubSystemsCount = sizeof(SubSystems) / sizeof(PE_SUBSYSTEM);
/* Find subsystem */
for(Index = 0; Index < SubSystemsCount; Index++)
{
SubSystem = &SubSystems[Index];
if(SubSystem->Identifier == Identifier)
{
/* Subsystem found, return its ID */
return SubSystem->Name;
}
}
/* No valid subsystem found */
return SubSystems[0].Name;
}
int main(int argc, char *argv[])
{
FILE *ExeFile;
unsigned char Signature[4];
unsigned int HeaderOffset;
unsigned int ImageSignature;
unsigned short SubSystem;
PPE_SUBSYSTEM NewSubSystem;
/* Check for proper number of arguments */
if(argc != 3)
{
printf("Usage: %s <filename> <new SubSystem>\n", argv[0]);
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 */
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);
/* Write the new SubSystem value */
fwrite(&NewSubSystem->Identifier, sizeof(unsigned short), 1, ExeFile);
/* Close the file */
fclose(ExeFile);
/* Finished successfully */
printf("PE SubSystem modified: 0x%02X <%s> to 0x%02X <%s>\n",
SubSystem, getSubSystemName(SubSystem), NewSubSystem->Identifier, NewSubSystem->Name);
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);