New package: Icarus (#19092)

Co-authored-by: Philipp Spilger <philipp.spilger@kip.uni-heidelberg.de>
Co-authored-by: Eric Müller <mueller@kip.uni-heidelberg.de>
This commit is contained in:
Andreas Baumbach 2020-10-02 21:06:01 +02:00 committed by GitHub
parent 569eb866fc
commit 145e3c7215
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 108 additions and 0 deletions

View file

@ -0,0 +1,71 @@
From d49d26a5c502faf132a7a65e5cc7173ac0dfa1f5 Mon Sep 17 00:00:00 2001
From: Huang Rui <vowstar@gmail.com>
Date: Wed, 29 Jan 2020 00:08:59 +0800
Subject: [PATCH] Fix fails to build with -fno-common or gcc-10
See also: https://bugs.gentoo.org/706366
gcc-10 and above flipped a default from -fcommon to -fno-common:
https://gcc.gnu.org/PR85678
Usually all it takes is to add a few 'extern' declarations and
move definitions from header files to modules. I've port iverilog
to gcc-10 accroding to this guide:
https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common
To fix this, I analyzed the code, and found ``pli_trace`` has been
defined at here:
https://github.com/steveicarus/iverilog/blob/v10_3/libveriuser/priv.c#L24
So I changed ``FILE* pli_trace;`` to ``extern FILE* pli_trace;``.
The var ``current_file`` only in ``cfparse_misc.h``, I changed it
from ``char *current_file;`` to ``extern char *current_file;`` and
declaring it in cflexor.lex
And then it works.
Signed-off-by: Huang Rui <vowstar@gmail.com>
---
driver/cflexor.lex | 2 ++
driver/cfparse_misc.h | 2 +-
libveriuser/priv.h | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/driver/cflexor.lex b/driver/cflexor.lex
index 5e9e2f506..1bf7cec1d 100644
--- a/driver/cflexor.lex
+++ b/driver/cflexor.lex
@@ -27,6 +27,8 @@
# include "globals.h"
# include <string.h>
+char *current_file = NULL;
+
static int comment_enter;
static char* trim_trailing_white(char*txt, int trim);
diff --git a/driver/cfparse_misc.h b/driver/cfparse_misc.h
index 3cb7ddd6e..0323690ce 100644
--- a/driver/cfparse_misc.h
+++ b/driver/cfparse_misc.h
@@ -39,6 +39,6 @@ int cferror(const char *);
int cfparse(void);
void switch_to_command_file(const char *);
void destroy_lexor(void);
-char *current_file;
+extern char *current_file;
#endif /* IVL_cfparse_misc_H */
diff --git a/libveriuser/priv.h b/libveriuser/priv.h
index 8256e16d3..8d3566087 100644
--- a/libveriuser/priv.h
+++ b/libveriuser/priv.h
@@ -31,6 +31,6 @@ extern char* __acc_newstring(const char*txt);
/*
* Trace file for logging ACC and TF calls.
*/
-FILE* pli_trace;
+extern FILE* pli_trace;
#endif /* IVL_priv_H */

View file

@ -0,0 +1,37 @@
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Icarus(AutotoolsPackage):
"""Icarus Verilog is a Verilog simulation and synthesis tool."""
homepage = "http://www.iverilog.icarus.com"
version('v10_3', git='https://github.com/steveicarus/iverilog.git',
commit='453c5465895eaca4a792d18b75e9ec14db6ea50e')
depends_on('autoconf', type='build')
depends_on('bison', type='build')
depends_on('flex', type='build')
depends_on('gperf @3.0:', type='build')
depends_on('readline @4.2:', type=('build', 'link'))
depends_on('zlib', type=('build', 'link'))
patch('fix-gcc-10.patch', when='@v10_3')
def autoreconf(self, spec, prefix):
bash = which('bash')
bash('./autoconf.sh')
@run_before('install')
def create_install_folders(self):
mkdirp(prefix.bin)
mkdirp(join_path(prefix.include, 'iverilog'))
mkdirp(join_path(prefix.lib, 'ivl'))
mkdirp(join_path(prefix.lib, 'ivl', 'include'))
mkdirp(join_path(prefix.share, 'man'))
mkdirp(join_path(prefix.share, 'man', 'man1'))