diff options
| author | Emily Trau <emily@downunderctf.com> | 2023-09-24 20:39:58 -0700 |
|---|---|---|
| committer | Emily Trau <emily@downunderctf.com> | 2023-09-26 22:20:35 -0700 |
| commit | 0173d3bd90826538c20cc53eb0db8b3ff326f51d (patch) | |
| tree | fabf78e13ea62f65ec274a19c6f589e98ec92674 | |
| parent | minimal-bootstrap.*: replace uses of musl11 with tinycc-musl.libs (diff) | |
| download | nixpkgs-0173d3bd90826538c20cc53eb0db8b3ff326f51d.tar.gz | |
minimal-bootstrap.tinycc-musl: 0.9.27 -> unstable-2023-04-20
latest tinycc is able to build gcc 4.6.4
4 files changed, 71 insertions, 34 deletions
diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-duplicate-symbols.patch b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-duplicate-symbols.patch new file mode 100644 index 000000000000..0aec8b465bf2 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-duplicate-symbols.patch @@ -0,0 +1,13 @@ +--- tccelf.c ++++ tccelf.c +@@ -710,8 +710,9 @@ ST_FUNC int set_elf_sym(Section *s, addr_t value, unsigned long size, + #if 0 + printf("new_bind=%x new_shndx=%x new_vis=%x old_bind=%x old_shndx=%x old_vis=%x\n", + sym_bind, shndx, new_vis, esym_bind, esym->st_shndx, esym_vis); +-#endif + tcc_error_noabort("'%s' defined twice", name); ++#endif ++ goto do_patch; + } + } else { + esym->st_other = other; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-static-inside-array.patch b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-static-inside-array.patch new file mode 100644 index 000000000000..8dc2fe3fcfb4 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/ignore-static-inside-array.patch @@ -0,0 +1,21 @@ +--- tccgen.c ++++ tccgen.c +@@ -4941,7 +4941,7 @@ static int post_type(CType *type, AttributeDef *ad, int storage, int td) + next(); + n = -1; + t1 = 0; +- if (td & TYPE_PARAM) while (1) { ++ while (1) { + /* XXX The optional type-quals and static should only be accepted + in parameter decls. The '*' as well, and then even only + in prototypes (not function defs). */ +@@ -4972,7 +4972,8 @@ static int post_type(CType *type, AttributeDef *ad, int storage, int td) + } + break; + +- } else if (tok != ']') { ++ } ++ if (tok != ']') { + if (!local_stack || (storage & VT_STATIC)) + vpushi(expr_const()); + else { diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/musl.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/musl.nix index 18eab4202f0d..9dfa14e4821f 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/musl.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/musl.nix @@ -1,9 +1,3 @@ -# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-musl-pass1.sh -# -# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space> -# -# SPDX-License-Identifier: GPL-3.0-or-later - { lib , fetchurl , callPackage @@ -12,38 +6,27 @@ , musl , gnupatch , gnutar -, bzip2 +, gzip }: let pname = "tinycc-musl"; - version = "0.9.27"; + version = "unstable-2023-04-20"; + rev = "86f3d8e33105435946383aee52487b5ddf918140"; src = fetchurl { - url = "https://download.savannah.gnu.org/releases/tinycc/tcc-${version}.tar.bz2"; - hash = "sha256-3iOvePypDOMt/y3UWzQysjNHQLubt7Bb9g/b/Dls65w="; + url = "https://repo.or.cz/tinycc.git/snapshot/${rev}.tar.gz"; + hash = "sha256-V3XBXYyzHi9f4JSYGeQwz6+1biUp7cwGaEE+x9fOLYY="; }; - # Thanks to the live-bootstrap project! - # See https://github.com/fosslinux/live-bootstrap/blob/424aa5be38a3023aa6842883a3954599b1597986/sysa/tcc-0.9.27/tcc-musl-pass1.sh - liveBootstrap = "https://github.com/fosslinux/live-bootstrap/raw/424aa5be38a3023aa6842883a3954599b1597986/sysa/tcc-0.9.27"; patches = [ - (fetchurl { - url = "${liveBootstrap}/patches/ignore-duplicate-symbols.patch"; - hash = "sha256-6Js8HkzjYlA8ETxeEYRWu+03OJI60NvR5h1QPkcMTlQ="; - }) - (fetchurl { - url = "${liveBootstrap}/patches/ignore-static-inside-array.patch"; - hash = "sha256-IF4RevLGjzRBuYqhuyG7+x6SVljzMAsYRKicNsmtbDY="; - }) - (fetchurl { - url = "${liveBootstrap}/patches/static-link.patch"; - hash = "sha256-gX/hJ9a/0Zg29KIBUme+mOA8WrPQvp0SvojP8DN9mSI="; - }) + ./ignore-duplicate-symbols.patch + ./ignore-static-inside-array.patch + ./static-link.patch ]; meta = with lib; { description = "Small, fast, and embeddable C compiler and interpreter"; - homepage = "http://savannah.nongnu.org/projects/tinycc"; + homepage = "https://repo.or.cz/w/tinycc.git"; license = licenses.lgpl21Only; maintainers = teams.minimal-bootstrap.members; platforms = [ "i686-linux" ]; @@ -56,15 +39,12 @@ let tinycc-bootstrappable.compiler gnupatch gnutar - bzip2 + gzip ]; } '' # Unpack - cp ${src} tinycc.tar.bz2 - bunzip2 tinycc.tar.bz2 - tar xf tinycc.tar - rm tinycc.tar - cd tcc-${version} + tar xzf ${src} + cd tinycc-${builtins.substring 0 7 rev} # Patch ${lib.concatMapStringsSep "\n" (f: "patch -Np0 -i ${f}") patches} @@ -77,6 +57,13 @@ let # but when linked with musl it is. ln -s ${musl}/lib/libtcc1.a ./libtcc1.a + tcc \ + -B ${tinycc-bootstrappable.libs}/lib \ + -DC2STR \ + -o c2str \ + conftest.c + ./c2str include/tccdefs.h tccdefs_.h + tcc -v \ -static \ -o tcc-musl \ @@ -92,6 +79,9 @@ let -D CONFIG_USE_LIBGCC=1 \ -D TCC_VERSION=\"0.9.27\" \ -D ONE_SOURCE=1 \ + -D TCC_MUSL=1 \ + -D CONFIG_TCC_PREDEFS=1 \ + -D CONFIG_TCC_SEMLOCK=0 \ -B . \ -B ${tinycc-bootstrappable.libs}/lib \ tcc.c @@ -117,14 +107,17 @@ let -D CONFIG_USE_LIBGCC=1 \ -D TCC_VERSION=\"0.9.27\" \ -D ONE_SOURCE=1 \ + -D TCC_MUSL=1 \ + -D CONFIG_TCC_PREDEFS=1 \ + -D CONFIG_TCC_SEMLOCK=0 \ -B . \ -B ${musl}/lib \ tcc.c # libtcc1.a rm -f libtcc1.a ./tcc-musl -c -D HAVE_CONFIG_H=1 lib/libtcc1.c - ./tcc-musl -c -D HAVE_CONFIG_H=1 lib/alloca86.S - ./tcc-musl -ar cr libtcc1.a libtcc1.o alloca86.o + ./tcc-musl -c -D HAVE_CONFIG_H=1 lib/alloca.S + ./tcc-musl -ar cr libtcc1.a libtcc1.o alloca.o # Install install -D tcc-musl $out/bin/tcc diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/static-link.patch b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/static-link.patch new file mode 100644 index 000000000000..671a3b37f98d --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/static-link.patch @@ -0,0 +1,10 @@ +--- libtcc.c ++++ libtcc.c +@@ -793,6 +793,7 @@ LIBTCCAPI TCCState *tcc_new(void) + + s->gnu_ext = 1; + s->tcc_ext = 1; ++ s->static_link = 1; + s->nocommon = 1; + s->dollars_in_identifiers = 1; /*on by default like in gcc/clang*/ + s->cversion = 199901; /* default unless -std=c11 is supplied */ |
