Compare commits

...
68 Commits
Author SHA1 Message Date
harraiken ef1065278b Add missing cmake patch
Builds / XTChain (push) Has been cancelled
2024-12-29 12:09:19 +01:00
harraiken 391a58dffc Update tools
Builds / XTChain (push) Successful in 57m25s
2024-12-28 20:49:19 +01:00
harraiken bd4b7763d4 Update LLVM
Builds / XTChain (push) Failing after 48m48s
2024-12-27 17:11:24 +01:00
harraiken 33ce9e38d2 Change Wine URI
Builds / XTChain (push) Failing after 3m11s
Reviewed-on: #6
Reviewed-by: Rafal Kupiec <belliash@noreply.codingworkshop.git>
Co-authored-by: Aiken Harris <harraiken@noreply.codingworkshop.git>
Co-committed-by: Aiken Harris <harraiken@noreply.codingworkshop.git>
2024-08-13 14:51:21 +02:00
belliash 409aa4ffb4 Update LLVM to 18.1.8
Builds / XTChain (push) Successful in 55m26s
2024-07-09 23:18:03 +02:00
belliash b951abd511 Update Discord invitation link
Builds / XTChain (push) Successful in 54m0s
2024-06-15 22:35:59 +02:00
belliash 2171eaeed6 Fix incompatible pointer type error
Builds / XTChain (push) Successful in 54m44s
2024-06-07 08:28:40 +02:00
belliash 7075a9ad58 Update LLVM to 18.1.7
Builds / XTChain (push) Failing after 12s
2024-06-07 08:10:31 +02:00
belliash 9025a85bcc Update software and get rid of binutils
Builds / XTChain (push) Successful in 52m51s
2024-05-15 21:14:53 +02:00
belliash 3342b87fd0 Update LLVM to 18.1.4
Builds / XTChain (push) Successful in 53m41s
2024-04-21 09:38:29 +02:00
belliash cd4b20b701 Update LLVM to 18.1.2
Builds / XTChain (push) Successful in 52m51s
2024-03-23 12:16:49 +01:00
belliash fc120f4f33 Update LLVM to 18.1.1
Builds / XTChain (push) Successful in 54m3s
2024-03-17 12:20:12 +01:00
belliash b8d5a76ee7 Update LLVM to 18.1.0
Builds / XTChain (push) Successful in 55m24s
2024-03-06 19:42:22 +01:00
belliash 009d4a3421 Update PE file subsystem together with signature
Builds / XTChain (push) Successful in 1h17m23s
2024-01-18 14:35:55 +01:00
belliash 460d5820da Minimize exetool's output
Builds / XTChain (push) Failing after 1h9m36s
2023-11-28 15:21:17 +01:00
belliash 83e84c3ebf Update LLVM to 17.0.6
Builds / XTChain (push) Successful in 1h16m49s
2023-11-28 14:51:07 +01:00
perikiyoxd eeb1953d87 Improve performance with Git shallow clone and add .gitignore
Builds / XTChain (push) Successful in 1h15m53s
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
belliash e9707563d7 Update LLVM to 17.0.5
Builds / XTChain (push) Successful in 1h23m53s
2023-11-14 12:24:00 +01:00
belliash 11d0593c9e Add 'help' and 'xbuild' commands; fix 'version' command overriding build settings
Builds / XTChain (push) Successful in 1h23m6s
2023-11-08 19:41:22 +01:00
belliash 22a5abd279 Update release badge color
Builds / XTChain (push) Successful in 1h26m41s
2023-11-07 15:09:38 +01:00
belliash 8c047d6083 Add releases link to readme
Builds / XTChain (push) Successful in 1h24m53s
2023-11-07 15:07:04 +01:00
belliash 1832a39ed3 Update LLVM to 17.0.4
Builds / XTChain (push) Successful in 1h23m46s
2023-10-31 19:08:00 +01:00
belliash 2a00526666 Update LLVM to 17.0.3
Builds / XTChain (push) Successful in 1h22m13s
2023-10-17 23:36:43 +02:00
belliash 1f72016fc2 Print original/new subsystem names and turn new subsystem name case insensitive
Builds / XTChain (push) Successful in 1h23m4s
2023-10-17 22:12:46 +02:00
belliash a522cdc583 Massive toolchain update
Builds / XTChain (push) Failing after 1h13m34s
2023-10-04 16:05:03 +02:00
belliash 37230435aa Add bin2c utility
Builds / XTChain (push) Successful in 1h24m30s
2023-09-28 22:47:04 +02:00
belliash 737dda2960 Update LLVM to 17.0.1
Builds / XTChain (push) Successful in 1h21m12s
2023-09-21 15:09:24 +02:00
belliash 0d468bf245 Cleanup after NASM removal
Builds / XTChain (push) Successful in 1h20m48s
2023-07-28 23:07:02 +02:00
belliash b0baae79ba Update badge and URL for CI/CD
Builds / XTChain (push) Successful in 1h21m42s
2023-07-18 14:55:02 +02:00
belliash ecd243ed0d Better way to check if building from tag
Builds / XTChain (push) Has started running
2023-07-15 09:00:33 +02:00
belliash b9d0458a65 Migrate to Gitea Actions
Builds / XTChain (push) Successful in 1h22m2s
2023-07-13 23:16:29 +02:00
belliash 7fb2227034 Update LLVM to 16.0.6
ci/woodpecker/push/build Pipeline was successful
2023-06-21 21:33:02 +02:00
belliash 0e49773bf4 Upgrade LLVM to 16.0.5
ci/woodpecker/push/build Pipeline was successful
2023-06-03 09:47:03 +02:00
belliash 5684623164 Upgrade LLVM and rewrite exetool in C
ci/woodpecker/push/build Pipeline was successful
2023-05-17 15:17:58 +02:00
belliash 14f2f7cf1f Update used software list
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2023-03-29 22:43:20 +02:00
belliash 37e38daf36 Update versioning strategy 2023-03-29 22:42:25 +02:00
belliash b65a92d147 Add accidentally removed ninja_build() function
ci/woodpecker/push/build Pipeline was successful
2023-03-28 21:57:18 +02:00
belliash 173b6d6dd0 Enable control flow guard and fix LLVM compilation
ci/woodpecker/push/build Pipeline failed
2023-03-28 07:09:15 +02:00
belliash 2da20a4eba Use ninja as build system; reconfigure LLVM and enable LLDB
ci/woodpecker/push/build Pipeline failed
2023-03-26 17:45:22 +02:00
belliash c9ef8a6484 Get rid of NASM
ci/woodpecker/push/build Pipeline failed
2023-03-26 13:19:09 +02:00
belliash be63d61cf4 Unify README look'n'feel
ci/woodpecker/push/build Pipeline failed
2023-03-26 12:42:28 +02:00
belliash 9fd40e9617 Import missing binutils patches
ci/woodpecker/push/build Pipeline failed
2023-03-26 09:40:15 +02:00
belliash 116d309962 Update LLVM and add GAS from binutils
ci/woodpecker/push/build Pipeline failed
2023-03-25 22:59:27 +01:00
belliash 6845594e6a Update LLVM to 15.0.7
ci/woodpecker/push/build Pipeline was successful
2023-02-19 16:26:26 +01:00
belliash 69ae9afb88 Correct URL
ci/woodpecker/push/build Pipeline was successful
2023-01-07 10:19:56 +01:00
belliash 3ae3ceaabb Add shields
ci/woodpecker/push/build Pipeline was successful
2023-01-07 10:19:00 +01:00
belliash 361c0a1cdb Add exetool for modifying PE/COFF image subsystem
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2023-01-06 16:23:54 +01:00
belliash d6531be5ee Update LLVM
ci/woodpecker/push/build Pipeline was successful
2022-12-17 12:10:08 +01:00
belliash 771d3783fa Update LLVM
ci/woodpecker/push/build Pipeline was successful
2022-11-08 23:32:18 +01:00
belliash 2e7c7ec1d7 Update LLVM to 15.0.2
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-10-05 08:25:06 +02:00
belliash 99f0b83ac7 Add missing cmake patch
ci/woodpecker/push/build Pipeline was successful
2022-10-02 14:29:45 +02:00
belliash 9cc7d052dd Update cmake, llvm and mingw
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-09-28 18:09:27 +02:00
belliash abefcf8fe2 Remove old LLVM patch
ci/woodpecker/push/build Pipeline was successful
2022-09-28 15:51:43 +02:00
belliash 015bc8a666 Install llvm-lib, a lib.exe compatible tool
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline was successful
2022-08-09 18:43:15 +02:00
belliash 546d8718d2 Reimplement new pipeline and allow limiting number of cores used fo build
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
belliash a65685de5c Rewrite pipeline
ci/woodpecker/push/build Pipeline failed
2022-07-22 22:50:10 +02:00
belliash f9af39e058 Allow xtchain to be launched by root 2022-07-22 22:48:22 +02:00
belliash 9b7d73e0e9 Update LLVM
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-06-29 09:46:44 +02:00
belliash 8eb76f6b90 Update LLVM to 14.0.5
continuous-integration/drone/push Build is passing
2022-06-17 13:40:22 +02:00
belliash 00c659911d Make XTchain great again
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-05-29 15:05:09 +02:00
belliash b1de0a02b6 Update Mingw64 to v10.0.0
continuous-integration/drone/push Build is failing
2022-05-28 14:24:41 +02:00
belliash 36df8e42e6 Update LLVM to 14.0.4
continuous-integration/drone/push Build is failing
2022-05-28 12:37:01 +02:00
belliash 7d802e0835 Merge branch 'llvm_toolchain' into master
continuous-integration/drone/push Build is failing
2022-05-28 12:35:49 +02:00
belliash 1904f94583 Update cmake, ninja & wine packages 2022-05-28 12:09:43 +02:00
belliash 3096bf9255 Return 0 when printing help or version in the windres tool.
continuous-integration/drone/push Build is failing
2021-02-02 18:20:19 +01:00
belliash fdd5e32ea0 Update readme.
continuous-integration/drone/push Build is passing
2021-02-02 18:17:12 +01:00
belliash 3a35c39c8e Update readme. 2021-02-02 18:14:50 +01:00
belliash 51284f1845 Import readme and license. 2020-08-17 07:59:45 +02:00
15 changed files with 433 additions and 3322 deletions
-8
View File
@@ -1,8 +0,0 @@
kind: pipeline
type: exec
name: XT Toolchain Pipeline
steps:
- name: Compile XT Toolchain
commands:
- sh build-linux.sh
+20
View File
@@ -0,0 +1,20 @@
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
View File
@@ -0,0 +1,3 @@
binaries/*
sources/*
xtchain-*.zst
+25 -2
View File
@@ -1,7 +1,30 @@
<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
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 +34,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
+78 -221
View File
@@ -18,40 +18,35 @@ GENERIC="generic-w64-mingw32"
# CMake Settings # CMake Settings
CMAKEDIR="${SRCDIR}/cmake" CMAKEDIR="${SRCDIR}/cmake"
CMAKETAG="v3.19.2" CMAKETAG="v3.31.3"
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-19.1.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.3" MAKETAG="4.4.1"
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="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"
# 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.10.0" NINJATAG="v1.12.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-5.15" WINETAG="wine-9.8"
WINEVCS="git://source.winehq.org/git/wine.git" WINEVCS="https://github.com/wine-mirror/wine.git"
# This function applies a patches to the 3rd party project # This function applies a patches to the 3rd party project
@@ -100,9 +95,8 @@ cmake_fetch()
{ {
if [ ! -d ${CMAKEDIR} ]; then if [ ! -d ${CMAKEDIR} ]; then
echo ">>> Downloading CMAKE ..." echo ">>> Downloading CMAKE ..."
git clone ${CMAKEVCS} ${CMAKEDIR} git clone --depth 1 --branch ${CMAKETAG} ${CMAKEVCS} ${CMAKEDIR}
cd ${CMAKEDIR} cd ${CMAKEDIR}
git checkout tags/${CMAKETAG}
apply_patches ${CMAKEDIR##*/} ${CMAKETAG} apply_patches ${CMAKEDIR##*/} ${CMAKETAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@@ -129,156 +123,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 +200,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}
} }
@@ -337,9 +231,8 @@ llvm_fetch()
{ {
if [ ! -d ${LLVMDIR} ]; then if [ ! -d ${LLVMDIR} ]; then
echo ">>> Downloading LLVM ..." echo ">>> Downloading LLVM ..."
git clone ${LLVMVCS} ${LLVMDIR} git clone --depth 1 --branch ${LLVMTAG} ${LLVMVCS} ${LLVMDIR}
cd ${LLVMDIR} cd ${LLVMDIR}
git checkout tags/${LLVMTAG}
apply_patches ${LLVMDIR##*/} ${LLVMTAG##*-} apply_patches ${LLVMDIR##*/} ${LLVMTAG##*-}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@@ -374,9 +267,8 @@ make_fetch()
{ {
if [ ! -d ${MAKEDIR} ]; then if [ ! -d ${MAKEDIR} ]; then
echo ">>> Downloading Make ..." echo ">>> Downloading Make ..."
git clone ${MAKEVCS} ${MAKEDIR} git clone --depth 1 --branch ${MAKETAG} ${MAKEVCS} ${MAKEDIR}
cd ${MAKEDIR} cd ${MAKEDIR}
git checkout tags/${MAKETAG}
apply_patches ${MAKEDIR##*/} ${MAKETAG} apply_patches ${MAKEDIR##*/} ${MAKETAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@@ -411,6 +303,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 +349,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}"
@@ -468,7 +363,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 genlib genpeimg widl; do for TOOL in gendef genidl 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}
@@ -492,38 +387,13 @@ mingw_fetch()
{ {
if [ ! -d ${MINGWDIR} ]; then if [ ! -d ${MINGWDIR} ]; then
echo ">>> Downloading MinGW-w64 ..." echo ">>> Downloading MinGW-w64 ..."
git clone ${MINGWVCS} ${MINGWDIR} git clone --depth 1 --branch ${MINGWTAG} ${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()
{ {
@@ -541,9 +411,8 @@ ninja_fetch()
{ {
if [ ! -d ${NINJADIR} ]; then if [ ! -d ${NINJADIR} ]; then
echo ">>> Downloading NINJA ..." echo ">>> Downloading NINJA ..."
git clone ${NINJAVCS} ${NINJADIR} git clone --depth 1 --branch ${NINJATAG} ${NINJAVCS} ${NINJADIR}
cd ${NINJADIR} cd ${NINJADIR}
git checkout tags/${NINJATAG}
apply_patches ${NINJADIR##*/} ${NINJATAG} apply_patches ${NINJADIR##*/} ${NINJATAG}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@@ -557,9 +426,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
@@ -575,9 +445,8 @@ wine_fetch()
{ {
if [ ! -d ${WINEDIR} ]; then if [ ! -d ${WINEDIR} ]; then
echo ">>> Downloading WINE ..." echo ">>> Downloading WINE ..."
git clone ${WINEVCS} ${WINEDIR} git clone --depth 1 --branch ${WINETAG} ${WINEVCS} ${WINEDIR}
cd ${WINEDIR} cd ${WINEDIR}
git checkout tags/${WINETAG}
apply_patches ${WINEDIR##*/} ${WINETAG##*-} apply_patches ${WINEDIR##*/} ${WINETAG##*-}
cd ${WRKDIR} cd ${WRKDIR}
fi fi
@@ -601,7 +470,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 windres xtcspecc; do for EXEC in bin2c exetool 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
@@ -616,16 +485,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 +505,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,17 +517,15 @@ 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
llvm_build_libunwind
llvm_build_libcxxabi
llvm_build_libcxx
# Download Wine # Download Wine
wine_fetch wine_fetch
@@ -696,12 +553,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
@@ -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
@@ -1,13 +0,0 @@
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)
File diff suppressed because it is too large Load Diff
-6
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}))"
+32 -2
View File
@@ -51,6 +51,19 @@ 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()
{ {
@@ -66,9 +79,26 @@ 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} charch ${TARGET:-amd64}
chbuild DEBUG chbuild ${BUILD_TYPE:-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
+74
View File
@@ -0,0 +1,74 @@
/**
* 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;
}
+182
View File
@@ -0,0 +1,182 @@
/**
* 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;
}
+5 -5
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
@@ -169,9 +169,9 @@ void check_num_args(int arg,
int main(int argc, int main(int argc,
char* argv[]) char* argv[])
{ {
const char *dir; char *dir;
const char *basename; char *basename;
const char *target; char *target;
split_argv(argv[0], &dir, &basename, &target, NULL); split_argv(argv[0], &dir, &basename, &target, NULL);