aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/package/llvm/package.az
blob: 352dca5386e6821b4942a8ca1b3154bcc2fbfb5d (plain)
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package llvm-project {
	description = "LLVM monorepo with Rosa OS patches";
	anitya = 1830;

	version# = "22.1.8";
	output = remoteGitHub {
		suffix = "llvm/llvm-project";
		tag = "llvmorg-"+version;
		checksum = "_QzoDE0W6cv0vfIWeLPDvqG_vKhz6IGWl1nqUUvhlKWiRzf5dMGqeC3tyS2XgI6j";
	};
	patches = [
		"increase-stack-size-unconditional.patch",
		"add-rosa-vendor.patch",
		"xfail-broken-tests.patch",
		"path-system-include.patch",
		"path-system-libraries.patch",
	];
}

package early-compiler-rt {
	description = "early LLVM runtime: compiler-rt";
	source = llvm-project;

	exclusive = true;
	early = `
LLVM_VERSION_MAJOR="$(cmake -P /dev/stdin <<< '
include(cmake/Modules/LLVMVersion.cmake)
message(NOTICE "${LLVM_VERSION_MAJOR}")
' 2>&1)"
`;
	exec = cmake {
		append = [ "compiler-rt" ];
		cache = {
			"ENABLE_LINKER_BUILD_ID": "ON";

			// libc++ not yet available
			"CMAKE_CXX_COMPILER_TARGET": "";

			"LLVM_HOST_TRIPLE": `"${ROSA_TRIPLE}"`;
			"LLVM_DEFAULT_TARGET_TRIPLE": `"${ROSA_TRIPLE}"`;
			"LLVM_ENABLE_RTTI": "ON";
			"LLVM_BUILD_LLVM_DYLIB": "ON";
			"LLVM_LINK_LLVM_DYLIB": "ON";
			"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR": "ON";

			"COMPILER_RT_BUILD_BUILTINS": "ON";
			"COMPILER_RT_DEFAULT_TARGET_ONLY": "ON";
			"COMPILER_RT_USE_BUILTINS_LIBRARY": "ON";
			"COMPILER_RT_SANITIZERS_TO_BUILD": "asan";
			"COMPILER_RT_BUILD_GWP_ASAN": "OFF";

			// does not work without libunwind
			"COMPILER_RT_BUILD_CTX_PROFILE": "OFF";
			"COMPILER_RT_BUILD_LIBFUZZER": "OFF";
			"COMPILER_RT_BUILD_MEMPROF": "OFF";
			"COMPILER_RT_BUILD_PROFILE": "OFF";
			"COMPILER_RT_BUILD_XRAY": "OFF";
		};
		skipTest = true;
		postInstall = `
mkdir -p "/work/system/lib/clang/$LLVM_VERSION_MAJOR/lib/"
ln -s \
	"../../../${ROSA_TRIPLE}" \
	"/work/system/lib/clang/$LLVM_VERSION_MAJOR/lib/"

ln -s \
	"clang_rt.crtbegin-`+linuxArch+`.o" \
	"/work/system/lib/${ROSA_TRIPLE}/crtbeginS.o"
ln -s \
	"clang_rt.crtend-`+linuxArch+`.o" \
	"/work/system/lib/${ROSA_TRIPLE}/crtendS.o"
`;
	};

	inputs = [
		python-early,

		musl-headers,
		kernel-headers,
	];

	runtime = [ musl ];
}

package early-runtimes {
	description = "early LLVM runtimes: libunwind, libcxx, libcxxabi";
	source = llvm-project;

	exclusive = true;
	exec = cmake {
		append = [ "runtimes" ];
		cache = {
			"ENABLE_LINKER_BUILD_ID": "ON";

			// libc++ not yet available
			"CMAKE_CXX_COMPILER_WORKS": "ON";

			"LLVM_HOST_TRIPLE": `"${ROSA_TRIPLE}"`;
			"LLVM_DEFAULT_TARGET_TRIPLE": `"${ROSA_TRIPLE}"`;
			"LLVM_ENABLE_RTTI": "ON";
			"LLVM_BUILD_LLVM_DYLIB": "ON";
			"LLVM_LINK_LLVM_DYLIB": "ON";
			"LLVM_ENABLE_RUNTIMES": "'libunwind;libcxx;libcxxabi'";

			"LIBUNWIND_ENABLE_ASSERTIONS": "OFF";
			"LIBUNWIND_USE_COMPILER_RT": "ON";
			"LIBCXX_HAS_MUSL_LIBC": "ON";
			"LIBCXX_USE_COMPILER_RT": "ON";
			"LIBCXX_CXX_ABI": "libcxxabi";
			"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "OFF";
			"LIBCXX_HARDENING_MODE": "fast";
			"LIBCXX_HAS_ATOMIC_LIB": "OFF";
			"LIBCXXABI_USE_COMPILER_RT": "ON";
			"LIBCXXABI_USE_LLVM_UNWINDER": "ON";
			"LIBCXXABI_ENABLE_STATIC_UNWINDER": "OFF";
			"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL": "OFF";

			"LLVM_ENABLE_ZLIB": "FORCE_ON";
			"LLVM_ENABLE_ZSTD": "FORCE_ON";
			"LLVM_ENABLE_LIBXML2": "OFF";
		};
		skipTest = true;
	};

	inputs = [
		python-early,

		zlib,
		zstd,
		early-compiler-rt,
		kernel-headers,
	];

	runtime = [ early-compiler-rt ];
}