Skip to content

Commit 28175f8

Browse files
authored
cmake : add option to build and link BoringSSL (ggml-org#17205)
* cmake: add option to build and link BoringSSL Signed-off-by: Adrien Gallouët <[email protected]> * cmake : fix typo Signed-off-by: Adrien Gallouët <[email protected]> * cmake : disable boringssl test and asm by default Signed-off-by: Adrien Gallouët <[email protected]> * cmake : skip bssl Signed-off-by: Adrien Gallouët <[email protected]> * cmake : disable fips Signed-off-by: Adrien Gallouët <[email protected]> * cmake : fix cmake --install Signed-off-by: Adrien Gallouët <[email protected]> * ci : use boringssl for windows and mac Signed-off-by: Adrien Gallouët <[email protected]> --------- Signed-off-by: Adrien Gallouët <[email protected]>
1 parent 9cc4080 commit 28175f8

File tree

3 files changed

+60
-80
lines changed

3 files changed

+60
-80
lines changed

.github/workflows/build.yml

Lines changed: 12 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -69,20 +69,15 @@ jobs:
6969
key: macOS-latest-cmake-arm64
7070
evict-old-files: 1d
7171

72-
- name: Dependencies
73-
id: depends
74-
continue-on-error: true
75-
run: |
76-
brew update
77-
brew install curl
78-
7972
- name: Build
8073
id: cmake_build
8174
run: |
8275
sysctl -a
8376
cmake -B build \
8477
-DCMAKE_BUILD_RPATH="@loader_path" \
8578
-DLLAMA_FATAL_WARNINGS=ON \
79+
-DLLAMA_CURL=OFF \
80+
-DLLAMA_BUILD_BORINGSSL=ON \
8681
-DGGML_METAL_USE_BF16=ON \
8782
-DGGML_METAL_EMBED_LIBRARY=OFF \
8883
-DGGML_METAL_SHADER_DEBUG=ON \
@@ -110,13 +105,6 @@ jobs:
110105
key: macOS-latest-cmake-x64
111106
evict-old-files: 1d
112107

113-
- name: Dependencies
114-
id: depends
115-
continue-on-error: true
116-
run: |
117-
brew update
118-
brew install curl
119-
120108
- name: Build
121109
id: cmake_build
122110
run: |
@@ -126,6 +114,8 @@ jobs:
126114
cmake -B build \
127115
-DCMAKE_BUILD_RPATH="@loader_path" \
128116
-DLLAMA_FATAL_WARNINGS=ON \
117+
-DLLAMA_CURL=OFF \
118+
-DLLAMA_BUILD_BORINGSSL=ON \
129119
-DGGML_METAL=OFF \
130120
-DGGML_RPC=ON \
131121
-DCMAKE_OSX_DEPLOYMENT_TARGET=13.3
@@ -151,13 +141,6 @@ jobs:
151141
key: macOS-latest-cmake-arm64-webgpu
152142
evict-old-files: 1d
153143

154-
- name: Dependencies
155-
id: depends
156-
continue-on-error: true
157-
run: |
158-
brew update
159-
brew install curl
160-
161144
- name: Dawn Dependency
162145
id: dawn-depends
163146
run: |
@@ -747,12 +730,6 @@ jobs:
747730
key: macOS-latest-cmake-ios
748731
evict-old-files: 1d
749732

750-
- name: Dependencies
751-
id: depends
752-
continue-on-error: true
753-
run: |
754-
brew update
755-
756733
- name: Build
757734
id: cmake_build
758735
run: |
@@ -784,12 +761,6 @@ jobs:
784761
key: macOS-latest-cmake-tvos
785762
evict-old-files: 1d
786763

787-
- name: Dependencies
788-
id: depends
789-
continue-on-error: true
790-
run: |
791-
brew update
792-
793764
- name: Build
794765
id: cmake_build
795766
run: |
@@ -815,12 +786,6 @@ jobs:
815786
id: checkout
816787
uses: actions/checkout@v4
817788

818-
- name: Dependencies
819-
id: depends
820-
continue-on-error: true
821-
run: |
822-
brew update
823-
824789
- name: Build
825790
id: cmake_build
826791
run: |
@@ -863,12 +828,6 @@ jobs:
863828
name: llama-xcframework
864829
path: build-apple/llama.xcframework/
865830

866-
- name: Dependencies
867-
id: depends
868-
continue-on-error: true
869-
run: |
870-
brew update
871-
872831
- name: Build llama.cpp with CMake
873832
id: cmake_build
874833
run: |
@@ -1020,21 +979,12 @@ jobs:
1020979
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
1021980
cmake --build build-arm64-release --target install --config release
1022981
1023-
- name: libCURL
1024-
id: get_libcurl
1025-
uses: ./.github/actions/windows-setup-curl
1026-
with:
1027-
architecture: ${{ matrix.arch == 'x64' && 'win64' || 'win64a' }}
1028-
1029982
- name: Build
1030983
id: cmake_build
1031-
env:
1032-
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }}
1033984
run: |
1034985
cmake -S . -B build ${{ matrix.defines }} `
1035-
-DCURL_LIBRARY="$env:CURL_PATH/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:CURL_PATH/include"
986+
-DLLAMA_CURL=OFF -DLLAMA_BUILD_BORINGSSL=ON
1036987
cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS}
1037-
cp $env:CURL_PATH/bin/libcurl-*.dll build/bin/Release
1038988
1039989
- name: Add libopenblas.dll
1040990
id: add_libopenblas_dll
@@ -1128,25 +1078,20 @@ jobs:
11281078
run: |
11291079
choco install ninja
11301080
1131-
- name: libCURL
1132-
id: get_libcurl
1133-
uses: ./.github/actions/windows-setup-curl
1134-
11351081
- name: Build
11361082
id: cmake_build
11371083
shell: cmd
1138-
env:
1139-
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }}
11401084
run: |
11411085
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
11421086
cmake -S . -B build -G "Ninja Multi-Config" ^
11431087
-DLLAMA_BUILD_SERVER=ON ^
1088+
-DLLAMA_CURL=OFF ^
1089+
-DLLAMA_BUILD_BORINGSSL=ON ^
11441090
-DGGML_NATIVE=OFF ^
11451091
-DGGML_BACKEND_DL=ON ^
11461092
-DGGML_CPU_ALL_VARIANTS=ON ^
11471093
-DGGML_CUDA=ON ^
1148-
-DGGML_RPC=ON ^
1149-
-DCURL_LIBRARY="%CURL_PATH%/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="%CURL_PATH%/include"
1094+
-DGGML_RPC=ON
11501095
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1
11511096
cmake --build build --config Release -j %NINJA_JOBS% -t ggml
11521097
cmake --build build --config Release
@@ -1178,7 +1123,7 @@ jobs:
11781123
run: |
11791124
scripts/install-oneapi.bat $WINDOWS_BASEKIT_URL $WINDOWS_DPCPP_MKL
11801125
1181-
# TODO: add libcurl support ; we will also need to modify win-build-sycl.bat to accept user-specified args
1126+
# TODO: add ssl support ; we will also need to modify win-build-sycl.bat to accept user-specified args
11821127

11831128
- name: Build
11841129
id: cmake_build
@@ -1235,14 +1180,8 @@ jobs:
12351180
key: ${{ github.job }}
12361181
evict-old-files: 1d
12371182

1238-
- name: libCURL
1239-
id: get_libcurl
1240-
uses: ./.github/actions/windows-setup-curl
1241-
12421183
- name: Build
12431184
id: cmake_build
1244-
env:
1245-
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }}
12461185
run: |
12471186
$env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path)
12481187
$env:CMAKE_PREFIX_PATH="${env:HIP_PATH}"
@@ -1251,11 +1190,12 @@ jobs:
12511190
-DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" `
12521191
-DCMAKE_CXX_FLAGS="-I$($PWD.Path.Replace('\', '/'))/opt/rocm-${{ env.ROCM_VERSION }}/include/" `
12531192
-DCMAKE_BUILD_TYPE=Release `
1193+
-DLLAMA_CURL=OFF `
1194+
-DLLAMA_BUILD_BORINGSSL=ON `
12541195
-DROCM_DIR="${env:HIP_PATH}" `
12551196
-DGGML_HIP=ON `
12561197
-DGGML_HIP_ROCWMMA_FATTN=ON `
1257-
-DGGML_RPC=ON `
1258-
-DCURL_LIBRARY="$env:CURL_PATH/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:CURL_PATH/include"
1198+
-DGGML_RPC=ON
12591199
cmake --build build -j ${env:NUMBER_OF_PROCESSORS}
12601200
12611201
ios-xcode-build:

vendor/cpp-httplib/CMakeLists.txt

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,38 @@ target_compile_definitions(${TARGET} PRIVATE
2222
CPPHTTPLIB_TCP_NODELAY=1
2323
)
2424

25-
if (LLAMA_OPENSSL)
25+
if (LLAMA_BUILD_BORINGSSL)
26+
set(OPENSSL_NO_ASM ON CACHE BOOL "Disable OpenSSL ASM code (BoringSSL)")
27+
set(FIPS OFF CACHE BOOL "Enable FIPS (BoringSSL)")
28+
29+
set(BORINGSSL_GIT "https://boringssl.googlesource.com/boringssl" CACHE STRING "BoringSSL git repository")
30+
set(BORINGSSL_VERSION "0.20251002.0" CACHE STRING "BoringSSL version")
31+
32+
message(STATUS "Fetching BoringSSL version ${BORINGSSL_VERSION}")
33+
34+
include(FetchContent)
35+
FetchContent_Declare(
36+
boringssl
37+
GIT_REPOSITORY ${BORINGSSL_GIT}
38+
GIT_TAG ${BORINGSSL_VERSION}
39+
PATCH_COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/patch-boringssl.cmake"
40+
)
41+
42+
set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
43+
set(SAVED_BUILD_TESTING ${BUILD_TESTING})
44+
45+
set(BUILD_SHARED_LIBS OFF)
46+
set(BUILD_TESTING OFF)
47+
48+
FetchContent_MakeAvailable(boringssl)
49+
50+
set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
51+
set(BUILD_TESTING ${SAVED_BUILD_TESTING})
52+
53+
set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
54+
target_link_libraries(${TARGET} PUBLIC ssl crypto)
55+
56+
elseif (LLAMA_OPENSSL)
2657
find_package(OpenSSL)
2758
if (OpenSSL_FOUND)
2859
include(CheckCSourceCompiles)
@@ -44,17 +75,20 @@ if (LLAMA_OPENSSL)
4475
set(CMAKE_REQUIRED_INCLUDES ${SAVED_CMAKE_REQUIRED_INCLUDES})
4576
if (OPENSSL_VERSION_SUPPORTED)
4677
message(STATUS "OpenSSL found: ${OPENSSL_VERSION}")
47-
target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT)
78+
set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
4879
target_link_libraries(${TARGET} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
49-
if (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
50-
target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
51-
find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
52-
find_library(SECURITY_FRAMEWORK Security REQUIRED)
53-
target_link_libraries(${TARGET} PUBLIC ${CORE_FOUNDATION_FRAMEWORK} ${SECURITY_FRAMEWORK})
54-
endif()
5580
endif()
5681
else()
5782
message(STATUS "OpenSSL not found, SSL support disabled")
5883
endif()
5984
endif()
6085

86+
if (CPPHTTPLIB_OPENSSL_SUPPORT)
87+
target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) # used in server.cpp
88+
if (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
89+
target_compile_definitions(${TARGET} PRIVATE CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
90+
find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
91+
find_library(SECURITY_FRAMEWORK Security REQUIRED)
92+
target_link_libraries(${TARGET} PUBLIC ${CORE_FOUNDATION_FRAMEWORK} ${SECURITY_FRAMEWORK})
93+
endif()
94+
endif()
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Remove bssl
2+
file(READ "CMakeLists.txt" content)
3+
string(REPLACE "add_executable(bssl" "#add_executable(bssl" content "${content}")
4+
string(REPLACE "target_link_libraries(bssl" "#target_link_libraries(bssl" content "${content}")
5+
string(REPLACE "install(TARGETS bssl" "#install(TARGETS bssl" content "${content}")
6+
file(WRITE "CMakeLists.txt" "${content}")

0 commit comments

Comments
 (0)