O que esse projeto está tentando fazer por mim?
Simplifique o Dead fazer solicitações HTTPS de C ++ (ou C).
Por que usar este projeto para obter uma biblioteca de clientes C ++ HTTPS?
O C ++ está famosa por falta de suporte de rede pronta para uso. Se você está lendo isso, suspeitamos que você está na mesma posição que estávamos: precisávamos preencher esse buraco para nós mesmos e não ficamos satisfeitos com as outras opções que vimos. Escrevemos esse código porque todas as outras regras do Bazel que vimos têm problemas sérios em agrupamento, se essa é a configuração incorreta no arquivo do tensorflow, causando erros de memória ou embrulho cmake que não lidam adequadamente com as configurações de Bazel ou a compilação cruzada. O objetivo aqui é criar um componente facilmente reutilizável que acerte para todos.
Tempo básico de configuração: 2M
Olá, usuário do Bazel?. Vamos fazer você fazer uma solicitação HTTPS em pouco tempo.
Há um monte de texto aqui, mas apenas porque estamos tentando soletrar as coisas e facilitar as coisas. Se você tiver problemas, informe -nos; Adoraríamos sua ajuda para tornar as coisas ainda mais completas e mais completas - e adoraríamos ajudá -lo!
Copie isso no seu arquivo de WORKSPACE Bazel para adicionar este repositório como uma dependência externa, certificando -se de atualizar para a última confirmação de acordo com as instruções abaixo.
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
# Hedron's Bazel Rules for C++ HTTPS Requests
# Makes @cpr, @curl, and @boringssl available for use
# https://github.com/hedronvision/bazel-make-cc-https-easy
# This also brings in @hedron_std_filesystem_backport to enable CPR across-platforms.
# Lets you use the std::filesystem API on Apple platforms, where it wouldn't otherwise be available. # (Deployment targets before macOS 10.15, iOS/tvOS 13.0, and watchOS 6.0)
# Just use fs:: as a drop-in replacement for std::filesystem.
# For more, see: https://github.com/hedronvision/bazel-cc-filesystem-backport
http_archive (
name = "hedron_make_cc_https_easy" ,
# Replace the commit hash in both places (below) with the latest, rather than using the stale one here.
# Even better, set up Renovate and let it do the work for you (see "Suggestion: Updates" in the README).
url = "https://github.com/hedronvision/bazel-make-cc-https-easy/archive/315416306204ce6bb2983b4a923815a7e89eb727.tar.gz" ,
strip_prefix = "bazel-make-cc-https-easy-315416306204ce6bb2983b4a923815a7e89eb727" ,
# When you first run this tool, it'll recommend a sha256 hash to put here with a message like: "DEBUG: Rule 'hedron_make_cc_https_easy' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = ..."
)
load ( "@hedron_make_cc_https_easy//:workspace_setup.bzl" , "hedron_make_cc_https_easy" )
hedron_make_cc_https_easy ()
load ( "@hedron_make_cc_https_easy//:transitive_workspace_setup.bzl" , "hedron_keep_cc_https_easy" )
hedron_keep_cc_https_easy ()Como em todos os C/C ++ dependentes da plataforma no Bazel, você precisará usar o Bazel 7+ (e uma versão similarmente recente de Regras_apple) para a configuração por plataforma para funcionar automaticamente fora da caixa. (Por favor, registre um PR para excluir esta seção se o Bazel 7 agora estiver tão antigo a ponto de ser padrão.)
Você precisará ter os cabeçalhos de desenvolvimento da libcurl instalados para que você possa usá -los no seu código.
Execute sudo apt-get install libcurl4-openssl-dev (debian/ubuntu) ou o equivalente para sua distribuição. Para obter instruções de instalação para outras distribuições, consulte as entradas libcurl aqui: https://everything.curl.dev/get/linux. Se você distribuir um pacote binário com base no seu código, deverá declarar uma dependência do libcurl4 ou informar seus usuários ao sudo apt-get libcurl4 . E, como sempre, se você aprender coisas que ajudariam os futuros usuários, registrar um PR ou emissão.
Como pano de fundo, adotamos a abordagem de vincular dinamicamente as bibliotecas que o sistema operacional pode fornecer com segurança e agrupamento (edifício + vincular estaticamente) de outra forma. O Linux é um caso especial, porque há um ótimo sistema de gerenciamento de dependência incorporado, para que possa fornecer mais bibliotecas do que o enviado com o sistema operacional.
Além: nos impressiona que há uma oportunidade aqui para uma extensão do Bazel que permitiria que a Bazel apoiasse melhor os gerentes de pacotes do Linux. Consulte esta proposta se você estiver interessado nisso ou em ajudar a invadir. Vamos continuar a discussão sobre esse assunto, se o Google está ou não interessado em implementá -lo.
Adicione "@cpr" aos seus deps e use a maravilhosa interface LIBCPR!
Por favor, consulte seus documentos para obter detalhes, mas a interface é realmente deliciosamente ergonômica. Como exemplo:
# include < cpr/cpr.h >
cpr::Response r = cpr::Get(cpr::Url{ " https://github.com " },
cpr::Parameters{{ " key " , " value " }});Para mais informações sobre por que escolhemos e recomendamos a RCP, consulte WhyCpr.md
Observe que você precisará ativar o C ++ 17 ou mais, se ainda não o fizer. Nós satisfazemos isso colocando o seguinte em nosso .bazelrc:
build --cxxopt=-std=gnu++20
build --per_file_copt=.*.mm$@-std=gnu++20
Adicione "@curl" aos seus deps e use libcurl em toda a glória usual (exemplo, documentos).
... ou apenas implemente sua interface C em C ++ (usando extern "C" ) e use LIBCPR.
Mas temos uma sugestão ...
As melhorias vêm frequentemente para as bibliotecas subjacentes, incluindo patches de segurança, por isso recomendamos manter-se atualizado.
Recomendamos fortemente que você configure renovados (ou similares) em algum momento para manter essa dependência (e outros) atualizados por padrão. [Não somos afiliados à reforma ou algo assim, mas achamos incrível. Ele observa novas versões e envia o PRS para revisão ou testes automatizados. É gratuito e fácil de configurar. Tem sido surpreendentemente útil em nossa base de código e trabalhamos com o maravilhoso mantenedor para tornar as coisas ótimas para uso da Bazel. E é usado em repositórios oficiais de Bazel-e este!]
Caso contrário, talvez volte a esta etapa mais tarde ou assista a este repositório para atualizações. [Ou ei, talvez nos dê uma estrela rápida, enquanto você está pensando em assistir.] Como Abseil, vivemos na cabeça; O mais recente comprometimento com o ramo principal é o compromisso que você deseja. Portanto, não confie nas notificações de liberação; Use renovar ou pesquisar manualmente para novos começos.
Maneira de fazer isso através da configuração. Felicidades para poder usar facilmente o poder da Web do C ++!
Isso deve funcionar perfeitamente para MacOS, Linux, Android, iOS, WatchOS e TVOS.
Se você quiser para o Windows, adoraríamos sua ajuda. Deve ser um pouco mais fácil adicionar suporte do que fazê -lo do zero. Vamos ajudar a guiar. E seu código funcionará em plataformas gratuitamente. Além disso, você estará ajudando todos. Entre em contato com o assunto quando você o iniciar, apenas para garantir que as pessoas não dupliquem esforços.
Se você estiver usando o Bazel para C ou C ++, provavelmente também deseja algumas de nossas outras ferramentas, como ...