-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathREADME
97 lines (71 loc) · 4.05 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|/
|\ISS LINUX (unofficial repository) https://kisslinux.org
________________________________________________________________________
This is a kiss-compliant repository structure to build LLVM without any
traces of GCC libraries. It also provides any alternatives for official
KISS packages that cannot be built in an LLVM-only environment as is.
This repository is to be used in conjunction with KISS Linux
repositories and NOT as a total replacement for KISS Linux.
DISCLAIMER
________________________________________________________________________
While since 11 July KISS does support an LLVM/Clang toolchain as a first
class citizen along with GCC [1] (some of our changes to accommodate
systems built with kiss-llvm toolchain are also accepted), some packages
(namely, eiwd) will not work with Clang at all at present (version 1.15,
at the time I'm writing this). Those packages will *explicitly* depend
on gcc (and any attempts to build gcc with this repo will automatically
fail unless user manually overrides that by using their own repo, or
directly building it, CRUX-style, note that I won't be supporting the
use case though since I don't think it is possible without significant
headache).
When submitting reports about failure to build LLVM/Clang from this
repo, report it here, not kisslinux/repo. Otherwise, you probably
can open an issue there, but please state your toolchain.
Building kiss-llvm
________________________________________________________________________
To build LLVM compiler infrastructure from scratch (and without any
traces of GCC), you'll need to build and install the llvm bootstrap
packaged as @llvm before building the main llvm package.
See the build file for @llvm for more information. It builds
llvm proper first, clang (pass 1), compiler-rt, libunwind, libc++abi,
libc++, and finally, clang again (pass 2).
NOTE: This is what I could do, however, if you can find a better way
that doesn't require 2 passes to clang, patches welcome! Also,
some required packages may be missing.
Recommended: Since downloading files repeatedly is a waste of bandwidth
(especially if you have a slow Internet), you can use this
command to symlink thesource cache (usually located in
$HOME/.cache/kiss/sources):
$ ln -s llvm @llvm
And make sure to download the main LLVM package sources first and NOT
the bootstrap packages (by using `kiss c` in the llvm directory, or by
using `kiss c llvm` after adding the kiss-llvm directory to $PATH, make
sure the checksums are NOT changed, git should be able to track these).
Using LLVM from kiss-llvm
________________________________________________________________________
After installing llvm from kiss-llvm (and uninstalling the temporary
bootstrap packages), you can use the alternatives system to switch to
LLVM-provided binutils (except as).
Because programs might still detect GCC and use it, you can force Clang
by applying environment variables CC=cc and CXX=c++ after applying the
alternatives. (For some packages like Busybox, you may need to
explicitly use CC=clang, as they explicitly detect Clang through the
name of the binary)
Also, you will need to rebuild every single package that links to
/lib/libstdc++.so, a small way to check if a library or a program links
to libstdc++ using the shell as follows:
$ for file in /usr/bin/* /usr/lib/*; do
echo FILE: "$file" # This is as an identifier of which file
ldd "$file" | grep libstdc++
done
You may also need to check if any packages link to libatomic.so and
libgcc_s.so.
You can use kiss-owns to check which file belongs to which package, and
rebuild that.
________________________________________________________________________
If you think replacing just the compiler and the binutils is not enough,
head on over to Wyverkiss [2] since the distribution also removes the
need for GNU bison and many others (GNU make cannot be removed though).
Please note that Wyverkiss will _NOT_ be supported by Dylan though.
[1] https://kisslinux.org/blog/20210711a
[2] https://github.com/wyvertux/wyverkiss