From 11557ce7135ce1859b558531e81e69b63d3d1251 Mon Sep 17 00:00:00 2001 From: Marko Semet Date: Tue, 14 Jan 2020 19:48:13 +0100 Subject: [PATCH] Add MinGW extension --- Platform/v2.0/Extensions/ExtensionMinGW.yaml | 275 +++++++++++++++++++ Platform/v2.0/Extensions/build.sh | 5 + Platform/v2.0/Extensions/build_extension.sh | 14 + Platform/v2.0/Extensions/elf_compress.py | 23 ++ 4 files changed, 317 insertions(+) create mode 100644 Platform/v2.0/Extensions/ExtensionMinGW.yaml create mode 100755 Platform/v2.0/Extensions/build.sh create mode 100755 Platform/v2.0/Extensions/build_extension.sh create mode 100644 Platform/v2.0/Extensions/elf_compress.py diff --git a/Platform/v2.0/Extensions/ExtensionMinGW.yaml b/Platform/v2.0/Extensions/ExtensionMinGW.yaml new file mode 100644 index 0000000..7b10c42 --- /dev/null +++ b/Platform/v2.0/Extensions/ExtensionMinGW.yaml @@ -0,0 +1,275 @@ +build-extension: true +id: de.marko10_000.winebarrels.Platform.ExtensionsV2.MinGW +branch: "v2.0" + +sdk: de.marko10_000.winebarrels.Sdk +runtime: de.marko10_000.winebarrels.Platform +runtime-version: "v2.0" +separate-locales: false + +build-options: + prefix: /usr/wine_extensions/v2/MinGW + env: + C_INCLUDE_PATH: /usr/wine_extensions/v2/MinGW/include + CPLUS_INCLUDE_PATH: /usr/wine_extensions/v2/MinGW/include + prepend-path: /usr/wine_extensions/v2/MinGW/bin + prepend-ld-library-path: /usr/wine_extensions/v2/MinGW/lib + prepend-pkg-config-path: /usr/wine_extensions/v2/MinGW/lib/pkgconfig + ldflags: -L/usr/wine_extensions/v2/MinGW/lib + ldflags-override: true +modules: + # Check arches + - name: check-arch + buildsystem: simple + build-commands: + - "false" + skip-arches: + - i386 + - x86_64 + + # Bintutils + - name: mingw-binutils-32bit + sources: &BINUTILS_SOURCES + - type: archive + url: https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.xz + sha256: ab66fc2d1c3ec0359b8e08843c9f33b63e8707efdff5e4cc5c200eae24722cbf + config-opts: + - --target=i686-w64-mingw32 + - --disable-werror + - --enable-deterministic-archives + - --enable-lto + - --enable-plugins + - --enable-relro + - --with-system-zlib + builddir: true + only-arches: + - i386 + - x86_64 + - name: mingw-binutils-64bit + sources: *BINUTILS_SOURCES + config-opts: + - --target=x86_64-w64-mingw32 + - --disable-werror + - --enable-deterministic-archives + - --enable-lto + - --enable-plugins + - --enable-relro + - --with-system-zlib + builddir: true + only-arches: + - x86_64 + + # Headers + - name: mingw-headers-32bit + sources: &MINGW_SOURCES + - type: archive + url: https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v6.0.0.tar.bz2 + sha256: 805e11101e26d7897fce7d49cbb140d7bac15f3e085a91e0001e80b2adaf48f0 + subdir: mingw-w64-headers + config-opts: + - --target=i686-w64-mingw32 + - --enable-sdk=all + - --enable-secure-api + - --prefix=/usr/wine_extensions/v2/MinGW/i686-w64-mingw32 + builddir: true + only-arches: + - i386 + - x86_64 + - name: mingw-headers-64bit + sources: *MINGW_SOURCES + subdir: mingw-w64-headers + config-opts: + - --target=x86_64-w64-mingw32 + - --enable-sdk=all + - --enable-secure-api + - --prefix=/usr/wine_extensions/v2/MinGW/x86_64-w64-mingw32 + builddir: true + only-arches: + - x86_64 + + # GCC only compiler + - name: mingw-gcc-pass1-32bit + sources: &GCC_SOURCES + - type: archive + url: https://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz + sha256: ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206 + config-opts: &GCC_CONF_32BIT + - --target=i686-w64-mingw32 + - --disable-multilib + - --enable-cet=auto + - --enable-languages=c,c++,lto + - --enable-libstdcxx-time=yes + - --enable-libstdcxx-filesystem-ts=yes + - --enable-lto + - --enable-plugin + - --enable-shared + - --enable-static + - --with-system-zlib + builddir: true + no-make-install: true + build-options: + make-args: + - all-gcc + post-install: + - make install-gcc + only-arches: + - i386 + - x86_64 + - name: mingw-gcc-pass1-64bit + sources: *GCC_SOURCES + config-opts: &GCC_CONF_64BIT + - --target=x86_64-w64-mingw32 + - --disable-multilib + - --enable-cet=auto + - --enable-languages=c,c++,lto + - --enable-libstdcxx-time=yes + - --enable-libstdcxx-filesystem-ts=yes + - --enable-lto + - --enable-plugin + - --enable-shared + - --enable-static + - --with-system-zlib + builddir: true + no-make-install: true + build-options: + make-args: + - all-gcc + post-install: + - make install-gcc + only-arches: + - x86_64 + + # MinGW CRT + - name: mingw-crt-32bit + sources: *MINGW_SOURCES + subdir: mingw-w64-crt + config-opts: + - --host=i686-w64-mingw32 + - --target=i686-w64-mingw32 + - --disable-lib64 + - --enable-lib32 + - --enable-wildcard + - --prefix=/usr/wine_extensions/v2/MinGW/i686-w64-mingw32 + - CFLAGS=-O3 + - CPPFLAGS=-O3 + builddir: true + only-arches: + - i386 + - x86_64 + - name: mingw-crt-64bit + sources: *MINGW_SOURCES + subdir: mingw-w64-crt + config-opts: + - --host=x86_64-w64-mingw32 + - --target=x86_64-w64-mingw32 + - --disable-lib32 + - --enable-lib64 + - --enable-wildcard + - --prefix=/usr/wine_extensions/v2/MinGW/x86_64-w64-mingw32 + - CFLAGS=-O3 + - CPPFLAGS=-O3 + builddir: true + only-arches: + - x86_64 + + # GCC pass 2 full + - name: mingw-gcc-pass2-32bit + sources: *GCC_SOURCES + config-opts: *GCC_CONF_32BIT + builddir: true + ensure-writable: + - /lib/gcc/*/*/install-tools/*.conf + only-arches: + - i386 + - x86_64 + - name: mingw-gcc-pass2-64bit + sources: *GCC_SOURCES + config-opts: *GCC_CONF_64BIT + builddir: true + ensure-writable: + - /lib/gcc/*/*/install-tools/*.conf + only-arches: + - x86_64 + + # MinGW Winpthreads + - name: mingw-winpthreads-32bit + sources: *MINGW_SOURCES + subdir: mingw-w64-libraries/winpthreads + config-opts: + - --host=i686-w64-mingw32 + - --target=i686-w64-mingw32 + - --enable-shared + - --enable-static + - --prefix=/usr/wine_extensions/v2/MinGW/i686-w64-mingw32 + - CFLAGS=-O3 + - CPPFLAGS=-O3 + builddir: true + only-arches: + - i386 + - x86_64 + - name: mingw-winpthreads-64bit + sources: *MINGW_SOURCES + subdir: mingw-w64-libraries/winpthreads + config-opts: + - --host=x86_64-w64-mingw32 + - --target=x86_64-w64-mingw32 + - --enable-shared + - --enable-static + - --prefix=/usr/wine_extensions/v2/MinGW/x86_64-w64-mingw32 + - CFLAGS=-O3 + - CPPFLAGS=-O3 + builddir: true + only-arches: + - x86_64 + + # GCC full + - name: mingw-gcc-pass-32bit + sources: *GCC_SOURCES + config-opts: + - --target=i686-w64-mingw32 + - --disable-multilib + - --enable-cet=auto + - --enable-languages=c,c++,lto + - --enable-libstdcxx-time=yes + - --enable-libstdcxx-filesystem-ts=yes + - --enable-lto + - --enable-plugin + - --enable-shared + - --enable-static + - --enable-threads=posix + - --with-system-zlib + builddir: true + ensure-writable: + - /lib/gcc/*/*/install-tools/*.conf + only-arches: + - i386 + - x86_64 + - name: mingw-gcc-pass2-64bit + sources: *GCC_SOURCES + config-opts: + - --target=x86_64-w64-mingw32 + - --disable-multilib + - --enable-cet=auto + - --enable-languages=c,c++,lto + - --enable-libstdcxx-time=yes + - --enable-libstdcxx-filesystem-ts=yes + - --enable-lto + - --enable-plugin + - --enable-shared + - --enable-static + - --enable-threads=posix + - --with-system-zlib + builddir: true + ensure-writable: + - /lib/gcc/*/*/install-tools/*.conf + only-arches: + - x86_64 + + # Finalize + - name: update-elf + sources: + - type: file + path: elf_compress.py + buildsystem: simple + build-commands: + - python3 elf_compress.py /usr/wine_extensions/v2/MinGW diff --git a/Platform/v2.0/Extensions/build.sh b/Platform/v2.0/Extensions/build.sh new file mode 100755 index 0000000..d4edf9d --- /dev/null +++ b/Platform/v2.0/Extensions/build.sh @@ -0,0 +1,5 @@ +#! /usr/bin/env bash +# Args: [] + +CONF_PATH="$(dirname "$0")" && +"$CONF_PATH/build_extension.sh" "$CONF_PATH/ExtensionMinGW.yaml" "$1" "$2" "$3" \ No newline at end of file diff --git a/Platform/v2.0/Extensions/build_extension.sh b/Platform/v2.0/Extensions/build_extension.sh new file mode 100755 index 0000000..13c0100 --- /dev/null +++ b/Platform/v2.0/Extensions/build_extension.sh @@ -0,0 +1,14 @@ +#! /usr/bin/env bash +# Args: [] + +if [ -z "VERBOSE" ]; then + HASH_MODULE_ARGS="-v" +else + HASH_MODULE_ARGS="" +fi + +CONF_PATH="$(dirname "$0")" && +"$CONF_PATH/../../../tools/hash_modules.py" $HASH_MODULE_ARGS --require-build "$1" "$2" && +exec "$CONF_PATH/../../../tools/build.sh" "$1" "$2" "$3" "$4" + +echo 'No build required.' \ No newline at end of file diff --git a/Platform/v2.0/Extensions/elf_compress.py b/Platform/v2.0/Extensions/elf_compress.py new file mode 100644 index 0000000..8b9e92b --- /dev/null +++ b/Platform/v2.0/Extensions/elf_compress.py @@ -0,0 +1,23 @@ +#! /usr/bin/evn python3 + +if __name__ == '__main__': + import os + import subprocess + import sys + + def parse_path(path): + if os.path.islink(path): + return + elif os.path.isfile(path): + if open(path, "rb").read(4) == b"\x7FELF": + print("Compress: " + path) + subprocess.call(["cp", "-a", path, "tmp.so"]) + subprocess.call(["strip", "--strip-debug", "tmp.so"]) + subprocess.call(["cp", "-a", "tmp.so", path]) + subprocess.call(["eu-elfcompress", "-vt", "gnu", path]) + elif os.path.isdir(path): + for i in map(lambda x: os.path.join(path, x), + sorted(os.listdir(path))): + parse_path(i) + for i in sys.argv[1:]: + parse_path(i)