diff options
| -rw-r--r-- | CMakeLists.txt | 4 | ||||
| -rw-r--r-- | cmake/GitHubRelease.cmake | 28 |
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() |
