34 Commits
2.0 ... 2.8.0

Author SHA1 Message Date
14f2f7cf1f Update used software list
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2023-03-29 22:43:20 +02:00
37e38daf36 Update versioning strategy 2023-03-29 22:42:25 +02:00
b65a92d147 Add accidentally removed ninja_build() function
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2023-03-28 21:57:18 +02:00
173b6d6dd0 Enable control flow guard and fix LLVM compilation
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-28 07:09:15 +02:00
2da20a4eba Use ninja as build system; reconfigure LLVM and enable LLDB
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-26 17:45:22 +02:00
c9ef8a6484 Get rid of NASM
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-26 13:19:09 +02:00
be63d61cf4 Unify README look'n'feel
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-26 12:42:28 +02:00
9fd40e9617 Import missing binutils patches
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-26 09:40:15 +02:00
116d309962 Update LLVM and add GAS from binutils
Some checks failed
ci/woodpecker/push/build Pipeline failed
2023-03-25 22:59:27 +01:00
6845594e6a Update LLVM to 15.0.7
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2023-02-19 16:26:26 +01:00
69ae9afb88 Correct URL
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2023-01-07 10:19:56 +01:00
3ae3ceaabb Add shields
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2023-01-07 10:19:00 +01:00
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
13 changed files with 350 additions and 3283 deletions

View File

@@ -1,8 +1,14 @@
kind: pipeline pipeline:
type: exec build:
name: XT Toolchain Pipeline image: codingworkshop/oscw-runner:latest
commands:
steps: - CORES=10 ./build-linux.sh
- name: Compile XT Toolchain publish:
commands: image: codingworkshop/oscw-runner:latest
- sh build-linux.sh 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,27 @@
<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://ci.codingworkshop.eu.org/xt-sys/xtchain">
<img alt="Build Status" src="https://ci.codingworkshop.eu.org/api/badges/xt-sys/xtchain/status.svg">
</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/3zgjQDVmAe">
<img alt="Discord" src="https://img.shields.io/discord/723186294540206100?label=Chat">
</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
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. 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: Benefits of a LLVM based MinGW toolchain are:
@@ -11,10 +31,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

@@ -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_40"
BINUTILSVCS="git://sourceware.org/git/binutils-gdb.git"
# CMake Settings # CMake Settings
CMAKEDIR="${SRCDIR}/cmake" CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v3.19.2" CMAKETAG="v3.24.2"
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-11.0.0" LLVMTAG="llvmorg-16.0.0"
LLVMVCS="https://github.com/llvm/llvm-project.git" LLVMVCS="https://github.com/llvm/llvm-project.git"
# Make Settings # Make Settings
@@ -34,7 +39,7 @@ 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="v8.0.0" MINGWTAG="master"
MINGWNTV="0x601" MINGWNTV="0x601"
MINGWVCS="https://github.com/mirror/mingw-w64.git" MINGWVCS="https://github.com/mirror/mingw-w64.git"
@@ -45,12 +50,12 @@ NASMVCS="https://github.com/netwide-assembler/nasm.git"
# Ninja Settings # Ninja Settings
NINJADIR="${SRCDIR}/ninja" NINJADIR="${SRCDIR}/ninja"
NINJATAG="v1.10.0" 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-5.15" WINETAG="wine-7.9"
WINEVCS="git://source.winehq.org/git/wine.git" WINEVCS="git://source.winehq.org/git/wine.git"
@@ -79,6 +84,51 @@ 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 ${BINUTILSVCS} ${BINUTILSDIR}
cd ${BINUTILSDIR}
git checkout tags/${BINUTILSTAG}
apply_patches ${BINUTILSDIR##*/} ${BINUTILSTAG##*-}
cd ${WRKDIR}
fi
}
# This function compiles and installs CMAKE # This function compiles and installs CMAKE
cmake_build() cmake_build()
{ {
@@ -129,156 +179,71 @@ llvm_build()
done done
LLVM_ARCHS=( $(for ARCH in ${LLVM_ARCHS[@]}; do echo ${ARCH}; done | sort -u) ) LLVM_ARCHS=( $(for ARCH in ${LLVM_ARCHS[@]}; do echo ${ARCH}; done | sort -u) )
cd ${LLVMDIR}/llvm/tools cd ${LLVMDIR}/llvm/tools
for UTIL in clang lld lldb; do for UTIL in clang lld; do
if [ ! -e ${UTIL} ]; then if [ ! -e ${UTIL} ]; then
ln -sf ../../${UTIL} . ln -sf ../../${UTIL} .
fi fi
done done
mkdir -p ${LLVMDIR}/llvm/build mkdir -p ${LLVMDIR}/llvm/build
cd ${LLVMDIR}/llvm/build cd ${LLVMDIR}/llvm/build
cmake \ cmake -G Ninja \
-DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${BINDIR} \ -DCMAKE_INSTALL_PREFIX=${BINDIR} \
-DLLDB_ENABLE_CURSES=FALSE \
-DLLDB_ENABLE_LIBEDIT=FALSE \
-DLLDB_ENABLE_LUA=FALSE \
-DLLDB_ENABLE_PYTHON=FALSE \
-DLLDB_INCLUDE_TESTS=FALSE \ -DLLDB_INCLUDE_TESTS=FALSE \
-DLLVM_ENABLE_ASSERTIONS=FALSE \ -DLLVM_ENABLE_ASSERTIONS=FALSE \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=TRUE \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=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="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 ninja install/strip
cd ${WRKDIR} cd ${WRKDIR}
} }
# This function compiles and install LIBCXX # This function compiles and install LIBCXX & LIBUNWIND
llvm_build_libcxx() llvm_build_libs()
{ {
echo ">>> Building LLVM libraries (libcxx) ..." echo ">>> Building LLVM libraries (libcxx) ..."
for ARCH in ${ARCHS}; do for ARCH in ${ARCHS}; do
[ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/libcxx/build-${ARCH} [ -z ${CLEAN} ] || rm -rf ${LLVMDIR}/runtimes/build-${ARCH}
mkdir -p ${LLVMDIR}/libcxx/build-${ARCH} mkdir -p ${LLVMDIR}/runtimes/build-${ARCH}
cd ${LLVMDIR}/libcxx/build-${ARCH} cd ${LLVMDIR}/runtimes/build-${ARCH}
cmake \ cmake -G Ninja \
-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_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_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" \ -DCMAKE_SYSTEM_NAME="Windows" \
-DLLVM_PATH="${LLVMDIR}/llvm" \ -DLLVM_PATH="${LLVMDIR}/llvm" \
-DLIBCXXABI_ENABLE_EXCEPTIONS=TRUE \ -DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \
-DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=FALSE \ -DLIBUNWIND_USE_COMPILER_RT=TRUE \
-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_SHARED=TRUE \
-DLIBUNWIND_ENABLE_STATIC=TRUE \ -DLIBUNWIND_ENABLE_STATIC=TRUE \
-DLIBUNWIND_ENABLE_THREADS=TRUE \ -DLIBCXX_USE_COMPILER_RT=ON \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \ -DLIBCXX_ENABLE_SHARED=TRUE \
-DLIBCXX_ENABLE_STATIC=TRUE \
-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} ninja
make install ninja 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 done
cd ${WRKDIR} cd ${WRKDIR}
} }
@@ -291,43 +256,28 @@ 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}
case ${ARCH} in cmake -G Ninja \
"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_BUILD_TYPE="Release" \
-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_TARGET="${BARCH}-windows-gnu" \ -DCMAKE_C_COMPILER_TARGET="${ARCH}-windows-gnu" \
-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_WORKS=1 \ -DCMAKE_CXX_FLAGS_INIT="-mguard=cf" \
-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 \
-DSANITIZER_CXX_ABI=libc++ \ -DLLVM_CONFIG_PATH="" \
-DSANITIZER_CXX_ABI="libc++" \
../lib/builtins ../lib/builtins
make -j${CORES} ninja
mkdir -p ${BINDIR}/lib/clang/${LLVMTAG#*-}/lib/windows ninja install
for LIB in lib/windows/libclang_rt.*.a; do
cp ${LIB} ${BINDIR}/lib/clang/${LLVMTAG#*-}/lib/windows/$(basename ${LIB} | sed s/${BARCH}/${LARCH}/)
done
done done
cd ${WRKDIR} cd ${WRKDIR}
} }
@@ -411,6 +361,7 @@ 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
@@ -456,7 +407,9 @@ 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}"
@@ -494,36 +447,14 @@ mingw_fetch()
echo ">>> Downloading MinGW-w64 ..." echo ">>> Downloading MinGW-w64 ..."
git clone ${MINGWVCS} ${MINGWDIR} git clone ${MINGWVCS} ${MINGWDIR}
cd ${MINGWDIR} cd ${MINGWDIR}
git checkout tags/${MINGWTAG} if [ x"${MINGWTAG}" != x"master" ]; then
git checkout tags/${MINGWTAG}
fi
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()
{ {
@@ -557,9 +488,10 @@ wine_build()
cd ${WINEDIR}/build cd ${WINEDIR}/build
../configure \ ../configure \
-enable-win64 \ -enable-win64 \
--without-freetype \
--without-x --without-x
for TOOL in winedump wmc wrc; do for TOOL in winedump wmc wrc; do
make -j${CORES} tools/${TOOL} make -j${CORES} tools/${TOOL}/all
cp tools/${TOOL}/${TOOL} ${BINDIR}/bin/ cp tools/${TOOL}/${TOOL} ${BINDIR}/bin/
for ARCH in ${ARCHS}; do for ARCH in ${ARCHS}; do
if [ ! -e ${BINDIR}/bin/${ARCH}-w64-mingw32-${TOOL} ]; then if [ ! -e ${BINDIR}/bin/${ARCH}-w64-mingw32-${TOOL} ]; then
@@ -608,6 +540,7 @@ xtchain_build()
ln -sf ${EXEC} ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC} ln -sf ${EXEC} ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC}
done done
done done
cp ${WRKDIR}/scripts/exetool ${BINDIR}/bin/
cp ${WRKDIR}/scripts/xtclib ${BINDIR}/lib/xtchain/ cp ${WRKDIR}/scripts/xtclib ${BINDIR}/lib/xtchain/
cp ${WRKDIR}/scripts/xtchain ${BINDIR}/ cp ${WRKDIR}/scripts/xtchain ${BINDIR}/
} }
@@ -616,16 +549,12 @@ xtchain_build()
# Exit immediately on any failure # Exit immediately on any failure
set -e 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 # Check number of CPU cores available
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)} if [[ ! -n ${CORES} ]]; then
: ${CORES:=$(nproc 2>/dev/null)} : ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
: ${CORES:=1} : ${CORES:=$(nproc 2>/dev/null)}
: ${CORES:=1}
fi
# Create working directories # Create working directories
mkdir -p ${BINDIR} mkdir -p ${BINDIR}
@@ -640,12 +569,6 @@ 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
@@ -658,16 +581,20 @@ mingw_build_crt
# Build and install LLVM compiler runtime # Build and install LLVM compiler runtime
llvm_build_runtime llvm_build_runtime
# Build and install LLVM compiler libraries
llvm_build_libs
# Build and install Mingw-W64 libraries # Build and install Mingw-W64 libraries
mingw_build_libs mingw_build_libs
# Build and install Mingw-W64 tools # Build and install Mingw-W64 tools
mingw_build_tools mingw_build_tools
# Build LLVM libraries # Download Binutils
llvm_build_libunwind binutils_fetch
llvm_build_libcxxabi
llvm_build_libcxx # Build and install Binutils
binutils_build
# Download Wine # Download Wine
wine_fetch wine_fetch
@@ -696,12 +623,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/{clang-{check,exdef-mapping,import-test,offload-*,rename,scan-deps},hmaptool,ld64.lld,wasm-ld} 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}
# 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:=DEV} : ${XTCVER:=DEVEL}
echo "${XTCVER}" > ${BINDIR}/Version echo "${XTCVER}" > ${BINDIR}/Version
# Prepare archive # Prepare archive

View File

@@ -0,0 +1,32 @@
diff --git a/gas/Makefile.in b/gas/Makefile.in
index 8319181b472..e4386b38621 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -2231,7 +2231,7 @@ de-stage3:
doc/asconfig.texi: doc/$(CONFIG).texi doc/$(am__dirstamp)
$(AM_V_at)rm -f doc/asconfig.texi
- $(AM_V_GEN)cp $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi
+ $(AM_V_GEN)cp -p $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi
$(AM_V_at)chmod u+w doc/asconfig.texi
# Maintenance
diff --git a/gas/doc/.dirstamp b/gas/doc/.dirstamp
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/gas/doc/local.mk b/gas/doc/local.mk
index f611a50913c..de13e3ca8b8 100644
--- a/gas/doc/local.mk
+++ b/gas/doc/local.mk
@@ -41,7 +41,7 @@ TEXI2DVI = texi2dvi -I "$(srcdir)/%D%" -I %D% -I "$(srcdir)/../libiberty" \
%D%/asconfig.texi: %D%/$(CONFIG).texi %D%/$(am__dirstamp)
$(AM_V_at)rm -f %D%/asconfig.texi
- $(AM_V_GEN)cp $(srcdir)/%D%/$(CONFIG).texi %D%/asconfig.texi
+ $(AM_V_GEN)cp -p $(srcdir)/%D%/$(CONFIG).texi %D%/asconfig.texi
$(AM_V_at)chmod u+w %D%/asconfig.texi
CPU_DOCS = \
--
2.39.2

View File

@@ -0,0 +1,60 @@
From ec231dd4c9ceb09140178b79e30ed0917bb2c955 Mon Sep 17 00:00:00 2001
From: belliash <belliash@codingworkshop.eu.org>
Date: Sat, 25 Mar 2023 19:33:33 +0100
Subject: [PATCH] test2
---
bfd/config.bfd | 8 +++++++-
gas/configure.tgt | 3 ++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 1b0111fd410..ada7889d362 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -249,7 +249,7 @@ case "${targ}" in
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_le_vec aarch64_pe_le_vec"
want64=true
;;
- aarch64-*-pe*)
+ aarch64-*-pe* | aarch64-*-mingw32)
targ_defvec=aarch64_pe_le_vec
targ_selvecs="aarch64_pe_le_vec aarch64_pei_le_vec"
want64=true
@@ -409,6 +409,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-*-mingw32)
+ 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 765ba73633d..9bfef1f72e8 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -136,6 +136,7 @@ case ${generic_target} in
aarch64*-*-netbsd*) fmt=elf em=nbsd;;
aarch64*-*-openbsd*) fmt=elf;;
aarch64*-*-pe*) fmt=coff em=pepaarch64 ;;
+ aarch64*-*-mingw32) fmt=coff em=pepaarch64 ;;
alpha-*-*vms*) fmt=evax ;;
alpha-*-osf*) fmt=ecoff ;;
alpha-*-linux*ecoff*) fmt=ecoff ;;
@@ -163,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-*-mingw32) fmt=coff em=pe ;;
arm-*-fuchsia*) fmt=elf ;;
arm-*-haiku*) fmt=elf em=haiku ;;
--
2.39.2

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> # 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 # Get the absolute path to the XTchain
export XTCDIR="$(realpath $(dirname ${0}))" export XTCDIR="$(realpath $(dirname ${0}))"

View File

@@ -55,7 +55,7 @@ export -f chbuild
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

View File

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