Skip to content
This repository was archived by the owner on Jan 18, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 18 additions & 16 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
QML2_IMPORT_PATH = "${qtbase}/${qtQmlPrefix}";
};

inherit (pkgs.callPackage ./llvm {}) llvm_15 lld_15 llvmPackages_15;

rust = pkgs.rust-bin.nightly."2021-09-01".default.override {
extensions = ["rust-src"];
targets = [];
Expand Down Expand Up @@ -167,7 +169,7 @@
};
pyproject = true;
build-system = [pkgs.python3Packages.setuptools];
nativeBuildInputs = [pkgs.llvm_15];
nativeBuildInputs = [llvm_15];
# Disable static linking
# https://github.com/numba/llvmlite/issues/93
postPatch = ''
Expand All @@ -176,7 +178,7 @@
'';
# Set directory containing llvm-config binary
preConfigure = ''
export LLVM_CONFIG=${pkgs.llvm_15.dev}/bin/llvm-config
export LLVM_CONFIG=${llvm_15.dev}/bin/llvm-config
'';
};

Expand All @@ -195,7 +197,7 @@
nativeBuildInputs = [pkgs.qt6.wrapQtAppsHook];
# keep llvm_x and lld_x in sync with llvmlite
propagatedBuildInputs =
[pkgs.llvm_15 pkgs.lld_15 sipyco.packages.x86_64-linux.sipyco pythonparser llvmlite-new pkgs.qt6.qtsvg artiq-comtools.packages.x86_64-linux.artiq-comtools]
[llvm_15 lld_15 sipyco.packages.x86_64-linux.sipyco pythonparser llvmlite-new pkgs.qt6.qtsvg artiq-comtools.packages.x86_64-linux.artiq-comtools]
++ (with pkgs.python3Packages; [pyqtgraph pygit2 numpy dateutil scipy prettytable pyserial levenshtein h5py pyqt6 qasync tqdm lmdb jsonschema platformdirs]);

dontWrapQtApps = true;
Expand All @@ -220,7 +222,7 @@
# FIXME: automatically propagate lld_15 llvm_15 dependencies
# cacert is required in the check stage only, as certificates are to be
# obtained from system elsewhere
nativeCheckInputs = with pkgs; [lld_15 llvm_15 lit outputcheck cacert] ++ [libartiq-support];
nativeCheckInputs = [lld_15 llvm_15 libartiq-support pkgs.lit pkgs.outputcheck pkgs.cacert];
checkPhase = ''
python -m unittest discover -v artiq.test

Expand Down Expand Up @@ -306,9 +308,9 @@
nativeBuildInputs = [
(pkgs.python3.withPackages (ps: [migen misoc (artiq.withExperimentalFeatures experimentalFeatures) ps.packaging]))
rust
pkgs.llvmPackages_15.clang-unwrapped
pkgs.llvm_15
pkgs.lld_15
llvm_15
lld_15
llvmPackages_15.clang-unwrapped
vivado
];
overrideMain = _: {
Expand Down Expand Up @@ -496,9 +498,6 @@
[
git
lit
lld_15
llvm_15
llvmPackages_15.clang-unwrapped
outputcheck
pdf2svg

Expand All @@ -511,8 +510,11 @@
(python3.withPackages (ps: [migen misoc microscope ps.packaging ps.paramiko] ++ artiq.propagatedBuildInputs))
]
++ [
latex-artiq-manual
llvm_15
lld_15
llvmPackages_15.clang-unwrapped
rust
latex-artiq-manual
artiq-frontend-dev-wrappers

# To manually run compiler tests:
Expand All @@ -536,9 +538,9 @@
packages = [
rust

pkgs.llvmPackages_15.clang-unwrapped
pkgs.llvm_15
pkgs.lld_15
llvm_15
lld_15
llvmPackages_15.clang-unwrapped

packages.x86_64-linux.vivado
packages.x86_64-linux.openocd-bscanspi
Expand Down Expand Up @@ -582,8 +584,8 @@
]
++ ps.paramiko.optional-dependencies.ed25519
))
pkgs.llvm_15
pkgs.lld_15
llvm_15
lld_15
pkgs.openssh
packages.x86_64-linux.openocd-bscanspi # for the bscanspi bitstreams
];
Expand Down
97 changes: 97 additions & 0 deletions llvm/15/clang/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
lib,
stdenv,
cmake,
ninja,
python3,
libxml2,
runCommand,
libllvm,
src,
version,
llvm_meta,
getVersionFile,
}:
stdenv.mkDerivation {
pname = "clang";
inherit version;

# Extract clang from monorepo
src = runCommand "clang-src-${version}" {} ''
mkdir -p "$out"
cp -r ${src}/cmake "$out"
cp -r ${src}/clang "$out"
cp -r ${src}/clang-tools-extra "$out"
'';

sourceRoot = "clang-src-${version}/clang";

outputs = [
"out"
"lib"
"dev"
"python"
];

patches = [
(getVersionFile "clang/purity.patch")
(getVersionFile "clang/gnu-install-dirs.patch")
];

nativeBuildInputs = [
cmake
ninja
python3
];
buildInputs = [
libxml2
libllvm
];

cmakeFlags = [
"-DLLVM_ENABLE_RTTI=ON"
"-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang"
"-DLLVM_TABLEGEN_EXE=${libllvm.dev}/bin/llvm-tblgen"
];

postPatch = ''
# Link clang-tools-extra
(cd tools && ln -s ../../clang-tools-extra extra)
'';

postInstall = ''
# Create cpp symlink
ln -sv $out/bin/clang $out/bin/cpp

# Move libclang to lib output
moveToOutput "lib/libclang.*" "$lib"
moveToOutput "lib/libclang-cpp.*" "$lib"

# Setup python output
mkdir -p $python/bin $python/share/clang/
mv $out/bin/{git-clang-format,scan-view} $python/bin
if [ -e $out/bin/set-xcode-analyzer ]; then
mv $out/bin/set-xcode-analyzer $python/bin
fi
mv $out/share/clang/*.py $python/share/clang

# Remove test binary
rm $out/bin/c-index-test

# Move tblgen to dev
mkdir -p $dev/bin
cp bin/clang-tblgen $dev/bin
'';

passthru = {
inherit libllvm;
isClang = true;
};

meta =
llvm_meta
// {
description = "C language family frontend for LLVM";
homepage = "https://clang.llvm.org/";
};
}
105 changes: 105 additions & 0 deletions llvm/15/clang/gnu-install-dirs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c27beec313d7..480f13e73c9f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -78,15 +78,17 @@ if(CLANG_BUILT_STANDALONE)
if (NOT LLVM_CONFIG_FOUND)
# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config
# path is removed.
- set(MAIN_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")
+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}")
# N.B. this is just a default value, the CACHE PATHs below can be overriden.
set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm")
set(TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")
set(LIBRARY_DIR "${LLVM_LIBRARY_DIR}")
+ else()
+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}")
endif()

- set(LLVM_MAIN_INCLUDE_DIR "${MAIN_INCLUDE_DIR}" CACHE PATH "Path to llvm/include")
+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed")
set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree")
set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree")
set(LLVM_TOOLS_BINARY_DIR "${TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin")
@@ -128,7 +130,7 @@ if(CLANG_BUILT_STANDALONE)
set(LLVM_INCLUDE_TESTS ON)
endif()

- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}")
+ include_directories(${LLVM_INCLUDE_DIRS})
link_directories("${LLVM_LIBRARY_DIR}")

set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake
index 21ac332e4f5f..b16c314bd1e2 100644
--- a/cmake/modules/AddClang.cmake
+++ b/cmake/modules/AddClang.cmake
@@ -119,8 +119,8 @@ macro(add_clang_library name)
install(TARGETS ${lib}
COMPONENT ${lib}
${export_to_clangtargets}
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

if (NOT LLVM_ENABLE_IDE)
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
index 6e2060991b92..b9bc930d26b8 100644
--- a/lib/Headers/CMakeLists.txt
+++ b/lib/Headers/CMakeLists.txt
@@ -420,7 +420,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files})
add_header_target("windows-resource-headers" ${windows_only_files})
add_header_target("utility-resource-headers" ${utility_files})

-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)

#############################################################
# Install rules for the catch-all clang-resource-headers target
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
index 8d95d0900e8c..ebc70ff7526d 100644
--- a/tools/libclang/CMakeLists.txt
+++ b/tools/libclang/CMakeLists.txt
@@ -180,7 +180,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
COMPONENT
libclang-python-bindings
DESTINATION
- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
endforeach()
if(NOT LLVM_ENABLE_IDE)
add_custom_target(libclang-python-bindings)
diff --git a/tools/scan-build-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt
index 061dc7ef4dd9..adc54b2edc32 100644
--- a/tools/scan-build-py/CMakeLists.txt
+++ b/tools/scan-build-py/CMakeLists.txt
@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
install(PROGRAMS lib/libscanbuild/${lib}
- DESTINATION lib/libscanbuild
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild"
COMPONENT scan-build-py)
endforeach()

@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
install(PROGRAMS lib/libscanbuild/resources/${resource}
- DESTINATION lib/libscanbuild/resources
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources"
COMPONENT scan-build-py)
endforeach()

@@ -122,7 +122,7 @@ foreach(lib ${LibEar})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
install(PROGRAMS lib/libear/${lib}
- DESTINATION lib/libear
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear"
COMPONENT scan-build-py)
endforeach()

29 changes: 29 additions & 0 deletions llvm/15/clang/purity.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001
From: Will Dietz <w@wdtz.org>
Date: Thu, 18 May 2017 11:56:12 -0500
Subject: [PATCH] "purity" patch for 5.0

---
lib/Driver/ToolChains/Gnu.cpp | 7 -------
1 file changed, 7 deletions(-)

diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
index fe3c0191bb..c6a482bece 100644
--- a/lib/Driver/ToolChains/Gnu.cpp
+++ b/lib/Driver/ToolChains/Gnu.cpp
@@ -487,13 +487,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
} else {
if (Args.hasArg(options::OPT_rdynamic))
CmdArgs.push_back("-export-dynamic");

- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE &&
- !Args.hasArg(options::OPT_r)) {
- CmdArgs.push_back("-dynamic-linker");
- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) +
- ToolChain.getDynamicLinker(Args)));
- }
}

CmdArgs.push_back("-o");
--
2.11.0
49 changes: 49 additions & 0 deletions llvm/15/lld/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
lib,
stdenv,
cmake,
ninja,
libxml2,
libllvm,
runCommand,
src,
version,
llvm_meta,
getVersionFile,
}:
stdenv.mkDerivation {
pname = "lld";
inherit version;

src = runCommand "lld-src-${version}" {} ''
mkdir -p "$out"
cp -r ${src}/cmake "$out"
cp -r ${src}/lld "$out"
mkdir -p "$out/libunwind"
cp -r ${src}/libunwind/include "$out/libunwind"
mkdir -p "$out/llvm"
'';

sourceRoot = "lld-src-${version}/lld";

outputs = ["out" "lib" "dev"];

patches = [
(getVersionFile "lld/gnu-install-dirs.patch")
];

nativeBuildInputs = [cmake ninja];
buildInputs = [libllvm libxml2];

cmakeFlags = [
"-DLLD_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/lld"
"-DLLVM_TABLEGEN_EXE=${libllvm.dev}/bin/llvm-tblgen"
];

meta =
llvm_meta
// {
description = "LLVM linker";
homepage = "https://lld.llvm.org/";
};
}
Loading