Xxhash: [cmake] evite referência ao diretório de compilação `xxhsum`

Criado em 1 ago. 2018  ·  7Comentários  ·  Fonte: Cyan4973/xxHash

Olá,
Estou fazendo um pacote (não oficial) para o Archlinux (minha distribuição) e makepkg (a ferramenta de compilação de pacotes da distro) me avisa que xxhsum tem referência ao diretório de compilação.

Eu verifiquei isso com

$ strings xxhsum | grep BUILD_DIR

e encontrou apenas uma ocorrência. Tentei construir o pacote com o sinalizador --save-temps para gcc e encontrei o BUILD_DIR no arquivo xxhsum.o.s . Não entendo o formato desse arquivo, mas de acordo com o ambiente da string, de alguma forma, ele pode estar relacionado à função XXXbenchHash . Infelizmente, não consegui descobrir como essa string chega a xxhsum , não vejo nenhum uso de macros especiais lá.

Gostaria de me livrar desta string (veja, por exemplo, "compilações reproduzíveis"), mas agora estou perdido e não tenho nenhuma ideia do que fazer a seguir. Alguém tem ideia de como se livrar dessa string no binário compilado ou sabe como depurar o problema?

build issue help wanted

Comentários muito úteis

Olá,
para registro, descobri o motivo e a solução alternativa para o problema. Resumindo: use o seguinte arquivo CMakeLists.txt e coloque-o no diretório superior.

Longa história: a referência ao diretório de origem se deve à macro __FILE__ em todas as suas formas. Neste caso específico, ele se esgueira pela macro assert . Se alguém compilar o projeto dentro do diretório de origem, não há problema porque neste caso __FILE__ é expandido (pelo compilador) para um caminho relativo. Mas um dos recursos cmake mais usados ​​é a compilação fora do diretório de origem e, nesse caso, o compilador expande a macro __FILE__ para o caminho completo. No entanto, é possível usar caminhos relativos ao diretório de origem, mas é necessário redefinir a macro __FILE__ . Pode-se usar cmake conforme mostrado no arquivo acima.

Todos 7 comentários

Isso é muito estranho.
Não há nada no código-fonte de xxhsum.c suscetível de gerar uma referência a BUILD_DIR .

Compilei em um Linux mint VM e fiz a mesma verificação que você:

$ strings xxhsum | grep BUILD_DIR
$

Não retornou nada.

Pode ser um artefato do sistema de construção.

Suponho que você use o diretório real em vez de BUILD_DIR, não é? Se você fizer isso, você pode estar certo, este é um artefato da minha ferramenta de construção. Vou tentar um sistema diferente para verificar isso. Quanto ao meu sistema atual, posso reproduzi-lo manualmente:

$ cd DIR_WITH_UNPACKED_SOURCE
$ mkdir build
$ cmake ../xxHash-0.6.5
$ make
$ strings xxhsum | grep BUILD_DIR
BUILD_DIR:
DIR_WITH_UNPACKED_SOURCE/xxHash-0.6.5/xxhsum.c

Ambiente: bash 4.4.023, gcc 8.1.1 20180531, binutils 2.30, cmake 3.11.4, make 4.2.1, glibc 2.27.

Ah, eu não testei cmake , e isso pode estar introduzindo esse problema.
Eu apenas testei o processo de compilação make mais simples:

$ cd XXH_SRC_DIR
$ make
$ strings xxhsum | grep BUILD_DIR
$

cmake é mantido por terceiros (daí a tag "não oficial"), eu não entendo todos os seus efeitos internos e colaterais, infelizmente, e apenas mantenho oficialmente Makefile .

Olá,
para registro, descobri o motivo e a solução alternativa para o problema. Resumindo: use o seguinte arquivo CMakeLists.txt e coloque-o no diretório superior.

Longa história: a referência ao diretório de origem se deve à macro __FILE__ em todas as suas formas. Neste caso específico, ele se esgueira pela macro assert . Se alguém compilar o projeto dentro do diretório de origem, não há problema porque neste caso __FILE__ é expandido (pelo compilador) para um caminho relativo. Mas um dos recursos cmake mais usados ​​é a compilação fora do diretório de origem e, nesse caso, o compilador expande a macro __FILE__ para o caminho completo. No entanto, é possível usar caminhos relativos ao diretório de origem, mas é necessário redefinir a macro __FILE__ . Pode-se usar cmake conforme mostrado no arquivo acima.

Olá!
Eu acredito que a macro assert deve ser definida como (void)0 se NDEBUG estiver definida.

NDEBUG é definido automaticamente pelo CMake se CMAKE_BUILD_TYPE estiver definido como _ "Release" _ (para geradores de configuração única como Makefiles Unix) ou se estiver criando projeto com a opção --config Release (para geradores de multiconfiguração como Xcode) .
Para o tipo de compilação _ "RelWithDebInfo" _, deve-se definir NDEBUG por conta própria nas fontes ou nas listas CMake.
Eu testei agora.

Boa sorte!

A lógica para assert foi atualizada e é definida aqui:
https://github.com/Cyan4973/xxHash/blob/dev/xxhash.c#L146

Por padrão, todas as declarações em xxhash estão desabilitadas.
Para habilitá-los, é necessário definir DEBUGLEVEL com um valor >= 1 .
Mesmo neste caso, assert() ainda pode ser desabilitado configurando NDEBUG .

Qualquer que seja o valor de DEBUGLEVEL ,
NDEBUG configuração não será modificada,
permanece exatamente o mesmo depois de incluir o código xxhash
(normalmente com XXH_INLINE_ALL , que é o tipo de compilação de maior impacto).

Acredito que esse problema foi corrigido.
Eu testei um cmake -produzido em xxhsum em um sistema Linux usando strings e não consegui encontrar nenhuma referência a BUILD_DIR .

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ifduyue picture ifduyue  ·  8Comentários

devnoname120 picture devnoname120  ·  8Comentários

carstenskyboxlabs picture carstenskyboxlabs  ·  6Comentários

eloff picture eloff  ·  6Comentários

jvriezen picture jvriezen  ·  6Comentários