Skip to content

Commit e0067c9

Browse files
committed
Add build script and github workflow
1 parent 09a6094 commit e0067c9

File tree

6 files changed

+183
-1
lines changed

6 files changed

+183
-1
lines changed

.github/workflows/build-llvm.yaml

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: "Build LLVM"
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
tag:
7+
description: 'Git tag for the release.'
8+
required: true
9+
type: string
10+
11+
jobs:
12+
build_llvm:
13+
name: Build LLVM
14+
strategy:
15+
matrix:
16+
# os: [ubuntu-20.04, macos-11, windows-2019]
17+
os: [ubuntu-20.04]
18+
runs-on: ${{ matrix.os }}
19+
permissions:
20+
contents: write # for creating releases
21+
container:
22+
# Intentionally old ubuntu version with old glibc.
23+
image: ubuntu:18.04
24+
steps:
25+
- name: checkout
26+
uses: actions/checkout@v3
27+
28+
# Install build dependencies.
29+
- run: "apt update && apt install -y clang git wget build-essential python3 ninja-build"
30+
# cmake from package manager is to old for the LLVM build.
31+
- run: "wget https://github.com/Kitware/CMake/releases/download/v3.30.0-rc2/cmake-3.30.0-rc2-linux-x86_64.sh"
32+
- run: "chmod +x cmake-*.sh"
33+
- run: "./cmake-*.sh --skip-license --prefix=/usr"
34+
# Build and package LLVM.
35+
- run: "./build-llvm-libs.sh"
36+
- uses: actions/upload-artifact@v3
37+
with:
38+
name: llvm-static-libs
39+
path: llvm-static-libs.tar.gz
40+
- name: create release
41+
id: create-release
42+
uses: actions/create-release@v1
43+
env:
44+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45+
with:
46+
tag_name: ${{ inputs.tag }}
47+
release_name: ${{ inputs.tag }}
48+
draft: false
49+
prerelease: true
50+
- name: upload linux artifact
51+
uses: actions/upload-release-asset@v1
52+
env:
53+
GITHUB_TOKEN: ${{ github.token }}
54+
with:
55+
upload_url: ${{ steps.create-release.outputs.upload_url }}
56+
asset_path: ./llvm-static-libs.tar.gz
57+
asset_name: llvm-static-linux-amd64.tar.gz
58+
asset_content_type: application/gzip

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build/

CMakeLists.txt

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
project(llvm-static)
3+
4+
if(POLICY CMP0114)
5+
cmake_policy(SET CMP0114 NEW)
6+
endif()
7+
8+
# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
9+
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
10+
cmake_policy(SET CMP0135 NEW)
11+
endif()
12+
13+
set(CMAKE_CXX_STANDARD 17)
14+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
15+
# set(CMAKE_POSITION_INDEPENDENT_CODE ON)
16+
set(CMAKE_BUILD_TYPE Release)
17+
18+
include(ExternalProject)
19+
ExternalProject_Add(${LLVM_PROJECT_TARGET}
20+
PREFIX ${LLVM_PROJECT_TARGET}
21+
GIT_REPOSITORY https://github.com/llvm/llvm-project.git
22+
GIT_TAG llvmorg-18.1.5
23+
GIT_SHALLOW ON
24+
SOURCE_SUBDIR llvm
25+
CMAKE_ARGS
26+
-G${CMAKE_GENERATOR}
27+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
28+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
29+
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
30+
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
31+
-DCMAKE_C_COMPILER_LAUNCHER:FILEPATH=${CMAKE_C_COMPILER_LAUNCHER}
32+
-DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=${CMAKE_CXX_COMPILER_LAUNCHER}
33+
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
34+
-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}
35+
-DLLVM_ENABLE_PROJECTS=clang
36+
-DLLVM_ENABLE_RTTI=ON
37+
-DLLVM_ENABLE_PIC=ON
38+
-DLLVM_TARGETS_TO_BUILD=X86
39+
-DLLVM_BUILD_TOOLS=OFF
40+
-DLLVM_BUILD_TESTS=OFF
41+
-DLLVM_ENABLE_TERMINFO=OFF
42+
-DLLVM_ENABLE_ZLIB=OFF
43+
-DLLVM_ENABLE_ZSTD=OFF
44+
-DLLVM_ENABLE_LIBXML2=OFF
45+
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target clangTooling -j16
46+
)

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# llvm-static
1+
# LLVM Tooling
2+
3+
This repository contains scripts to build static LLVM libraries which can be used to develop libclangTooling based tools. See the release page for downloadable archives.

build-llvm-libs.sh

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
3+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4+
BUILD_DIR="$SCRIPT_DIR/build"
5+
LLVM_BUILD_DIR="$BUILD_DIR/external.llvm-project"
6+
7+
cd "$SCRIPT_DIR"
8+
mkdir -p build
9+
# cmake -B build -GNinja .
10+
# cmake --build build
11+
mkdir -p $LLVM_BUILD_DIR/include
12+
touch $LLVM_BUILD_DIR/include/clang.h
13+
mkdir -p $LLVM_BUILD_DIR/lib
14+
touch $LLVM_BUILD_DIR/lib/libclang.a
15+
16+
# Pack everything we need into a tar archive.
17+
# We only need the header files, static libraries and add
18+
# a CMake file that makes it easy to link libclangTooling.
19+
cp $SCRIPT_DIR/cmake/CMakeLists.txt $LLVM_BUILD_DIR
20+
cd $LLVM_BUILD_DIR
21+
tar -czvf "$SCRIPT_DIR/llvm-static-libs.tar.gz" include/ lib/*.a CMakeLists.txt

cmake/CMakeLists.txt

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Static libraries that are needed when using libclangTooling
2+
set(CLANG_TOOLING_DEPS
3+
clangFormat
4+
clangToolingInclusions
5+
clangFrontend
6+
clangDriver
7+
clangParse
8+
clangSerialization
9+
clangSema
10+
clangAPINotes
11+
clangEdit
12+
clangAnalysis
13+
clangASTMatchers
14+
clangAST
15+
clangSupport
16+
clangToolingCore
17+
clangRewrite
18+
clangLex
19+
clangBasic
20+
# Order as reported by llvm-config --libs --link-static
21+
LLVMWindowsDriver
22+
LLVMOption
23+
LLVMFrontendOpenMP
24+
LLVMFrontendOffloading
25+
LLVMScalarOpts
26+
LLVMTransformUtils
27+
LLVMAnalysis
28+
LLVMProfileData
29+
LLVMDebugInfoDWARF
30+
LLVMObject
31+
LLVMTextAPI
32+
LLVMMCParser
33+
LLVMIRReader
34+
LLVMAsmParser
35+
LLVMMC
36+
LLVMBitReader
37+
LLVMCore
38+
LLVMRemarks
39+
LLVMBitstreamReader
40+
LLVMBinaryFormat
41+
LLVMTargetParser
42+
LLVMSupport
43+
LLVMDemangle)
44+
45+
foreach(lib ${CLANG_TOOLING_DEPS})
46+
add_library(${lib} STATIC IMPORTED)
47+
set_property(TARGET ${lib} PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/lib${lib}.a")
48+
endforeach(lib)
49+
50+
# Exported clangTooling target.
51+
add_library(clangTooling STATIC IMPORTED GLOBAL)
52+
set_property(TARGET clangTooling PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/libclangTooling.a")
53+
target_include_directories(clangTooling INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include)
54+
set_target_properties(clangTooling PROPERTIES INTERFACE_LINK_LIBRARIES "${CLANG_TOOLING_DEPS}")

0 commit comments

Comments
 (0)