summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--cmake/GitHubRelease.cmake28
2 files changed, 26 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e1225022e..6580e2680 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -101,6 +101,8 @@ option(SLANG_ENABLE_TESTS "Enable test targets, some tests may require SLANG_ENA
option(SLANG_ENABLE_EXAMPLES "Enable example targets, requires SLANG_ENABLE_GFX" ON)
option(SLANG_ENABLE_REPLAYER "Enable slang-replay tool" ON)
+option(SLANG_GITHUB_TOKEN "Use a given token value for accessing Github REST API" "")
+
enum_option(
SLANG_LIB_TYPE
# Default
@@ -136,7 +138,7 @@ enum_option(
if(SLANG_SLANG_LLVM_FLAVOR MATCHES FETCH_BINARY)
# If the user didn't specify a URL, find the best one now
if(NOT SLANG_SLANG_LLVM_BINARY_URL)
- get_best_slang_binary_release_url(url)
+ get_best_slang_binary_release_url("${SLANG_GITHUB_TOKEN}" url)
if(NOT DEFINED url)
message(FATAL_ERROR "Unable to find binary release for slang-llvm, please set a different SLANG_SLANG_LLVM_FLAVOR or set SLANG_SLANG_LLVM_BINARY_URL manually")
endif()
diff --git a/cmake/GitHubRelease.cmake b/cmake/GitHubRelease.cmake
index e63fb7885..dd9dd8fe1 100644
--- a/cmake/GitHubRelease.cmake
+++ b/cmake/GitHubRelease.cmake
@@ -1,4 +1,4 @@
-function(check_release_and_get_latest owner repo version os arch out_var)
+function(check_release_and_get_latest owner repo version os arch github_token out_var)
# Construct the URL for the specified version's release API endpoint
set(version_url "https://api.github.com/repos/${owner}/${repo}/releases/tags/v${version}")
@@ -17,8 +17,22 @@ function(check_release_and_get_latest owner repo version os arch out_var)
set(${found_var} "${found}" PARENT_SCOPE)
endfunction()
- # Download the specified release info from GitHub
- file(DOWNLOAD "${version_url}" "${json_output_file}" STATUS download_statuses)
+ # Prepare download arguments
+ set(download_args
+ "${version_url}"
+ "${json_output_file}"
+ STATUS download_statuses
+ )
+
+ if(github_token)
+ # Add authorization header if token is provided
+ list(APPEND download_args HTTPHEADER "Authorization: token ${github_token}")
+ endif()
+
+ # Perform the download
+ file(DOWNLOAD ${download_args})
+
+ # Check if the downloading was successful
list(GET download_statuses 0 status_code)
if(status_code EQUAL 0)
file(READ "${json_output_file}" json_content)
@@ -34,6 +48,10 @@ function(check_release_and_get_latest owner repo version os arch out_var)
message(WARNING "Failed to find ${desired_zip} in release assets for ${version} from ${version_url}\nFalling back to latest version if it differs")
else()
message(WARNING "Failed to download release info for version ${version} from ${version_url}\nFalling back to latest version if it differs")
+
+ if(status_code EQUAL 22)
+ message(WARNING "If API rate limit is exceeded, Github allows a higher limit when you use token. Try a cmake option -DSLANG_GITHUB_TOKEN=your_token_here")
+ endif()
endif()
@@ -69,7 +87,7 @@ function(check_release_and_get_latest owner repo version os arch out_var)
endif()
endfunction()
-function(get_best_slang_binary_release_url out_var)
+function(get_best_slang_binary_release_url github_token out_var)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
set(arch "x86_64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64")
@@ -93,7 +111,7 @@ function(get_best_slang_binary_release_url out_var)
set(owner "shader-slang")
set(repo "slang")
- check_release_and_get_latest(${owner} ${repo} ${SLANG_VERSION_NUMERIC} ${os} ${arch} release_version)
+ check_release_and_get_latest(${owner} ${repo} ${SLANG_VERSION_NUMERIC} ${os} ${arch} "${github_token}" release_version)
if(DEFINED release_version)
set(${out_var} "https://github.com/${owner}/${repo}/releases/download/v${release_version}/slang-${release_version}-${os}-${arch}.zip" PARENT_SCOPE)
endif()