-
Notifications
You must be signed in to change notification settings - Fork 0
148 lines (128 loc) · 5.62 KB
/
cmake-multi-platform.yml
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
136
137
138
139
140
141
142
143
144
145
146
147
name: CMake Build
on:
push:
branches: [ "main", "dev" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-24.04, macos-latest ]
build_type: [ Debug, Release ]
c_compiler: [ clang ]
include:
- os: macos-latest
c_compiler: clang
cpp_compiler: clang++
env:
LDFLAGS=: "-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++"
CPPFLAGS: "-I/opt/homebrew/opt/llvm/include -I/opt/homebrew/opt/llvm/include/c++/v1"
LD_LIBRARY_PATH: "/opt/homebrew/opt/llvm/lib"
DYLD_LIBRARY_PATH: "/opt/homebrew/opt/llvm/lib"
- os: ubuntu-24.04
c_compiler: clang
cpp_compiler: clang++-18
# Don't include the following configurations in the matrix
exclude:
- os: macos-latest
build_type: Debug
steps:
# Install dependencies: cmake, ninja, gcc, libgcrypt, openssl, readline, and libsodium
- name: Install Dependencies
if: matrix.os == 'macos-latest'
run: |
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=TRUE
brew update
brew install gcc readline ninja
brew reinstall llvm
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/opt/homebrew/opt/gcc/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/opt/homebrew/opt/gcc/lib/gcc/14:$PATH"' >> ~/.bash_profile
- name: Check configuration
run: |
echo "Homebrew prefix: $HOMEBREW_PREFIX"
echo "PATH: $PATH"
echo "LDFLAGS: $LDFLAGS"
echo "CPPFLAGS: $CPPFLAGS"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
echo "DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
echo "GCC: $(which gcc-14)"
echo "Otool output: $(otool -L $(which gcc-14))"
echo "Other Glibc: $(cat $(gcc-14 -print-file-name=libc.dylib))"
echo "GCC INCLUDES: $(gcc-14 -print-search-dirs | grep install)"
echo "GCC LIBS: $(gcc-14 -print-search-dirs | grep libraries)"
echo "Include dir: $(ls -l /opt/homebrew/lib/gcc/current/gcc/aarch64-apple-darwin23/14)"
echo "GCC bin dir: $(ls -l /opt/homebrew/opt/gcc/bin)"
echo "GCC info: $(gcc-14 -v)"
- uses: actions/checkout@v4
- name: Set reusable strings
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
# Build the project
- name: Build PrivacyShield
if: matrix.os == 'ubuntu-24.04'
run: |
sudo ./scripts/build.sh
- name: Install Blake3
if: matrix.os == 'macos-latest'
run: |
sudo ./scripts/install-blake3.sh ${{ matrix.c_compiler }}
- name: Configure CMake
if: matrix.os == 'macos-latest'
run: >
# export LDFLAGS="-L/usr/local/opt/gcc@13/lib/gcc/13 -Wl,-rpath,/usr/local/opt/gcc@13/lib/gcc/13";
# export CPPFLAGS="-I/usr/local/opt/gcc@13/include/c++/13 -I/usr/local/opt/gcc@13/include/c++/13/x86_64-apple-darwin22";
# export LD_LIBRARY_PATH="/usr/local/opt/gcc@13/lib/gcc/13";
# export DYLD_LIBRARY_PATH="/usr/local/opt/gcc@13/lib/gcc/13";
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++
-DCMAKE_C_COMPILER=/opt/homebrew/opt/llvm/bin/clang
-DCMAKE_CXX_FLAGS="-I/opt/homebrew/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -L/opt/homebrew/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -Wl,-rpath,/opt/homebrew/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -stdlib=libstdc++"
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-S ${{ github.workspace }} -G Ninja
- name: Build
if: matrix.os == 'macos-latest'
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} -j 4
- name: Package
if: matrix.os == 'macos-latest' && matrix.build_type == 'Release'
working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: |
cpack
- name: Package
if: matrix.os == 'ubuntu-24.04' && matrix.build_type == 'Release'
working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: |
sudo cpack
sudo chown -R $USER:$USER "${{ github.workspace }}/Packages"
- name: Import GPG Key
if: matrix.build_type == 'Release'
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_SIGNING_KEY }}
passphrase: ${{ secrets.GPG_PASS }}
trust_level: 5
- name: Sign Package
if: matrix.build_type == 'Release'
working-directory: ${{ github.workspace }}
run: |
for file in Packages/*; do
gpg --batch --status-file ~/gpg_log.txt --passphrase ${{ secrets.GPG_PASS }} --default-key dr8co@duck.com \
--pinentry-mode=loopback --detach-sign "$file" || (cat ~/gpg_log.txt && exit 1)
done
#
# # Upload the built artifacts
- name: Upload Artifacts
if: matrix.build_type == 'Release'
uses: actions/upload-artifact@v4
with:
name: "${{ matrix.os }}-${{ matrix.build_type }}"
path: "${{ github.workspace }}/Packages"
overwrite: true
if-no-files-found: 'warn'