Bump to version 1.5.0

This new release now includes the IEEE VHDL libraries, so we don't
need to download and copy them around by hand. The patches to use
newer LLVM versions are not needed anymore. Lastly, now we pass a
few --enable-foo and --with-bar options to the configure script to
enable additional features.
This commit is contained in:
Adrian Perez de Castro 2020-10-26 16:56:47 +02:00
parent 1843b035c7
commit eb6c1d42a2
No known key found for this signature in database
GPG key ID: 91C559DBE4C9123B
5 changed files with 28 additions and 328 deletions

View file

@ -1,7 +1,7 @@
pkgbase = nvc
pkgdesc = VHDL compiler and simulator
pkgver = 1.4.0
pkgrel = 3
pkgver = 1.5.0
pkgrel = 1
url = https://github.com/nickg/nvc
arch = x86_64
arch = i686
@ -16,29 +16,11 @@ pkgbase = nvc
makedepends = autoconf
depends = libelf
depends = llvm-libs
depends = ncurses
optdepends = ruby: for the scripts to download and install VHDL libraries
conflicts = nvc-git
source = https://github.com/nickg/nvc/releases/download/r1.4.0/nvc-1.4.0.tar.gz
source = https://standards.ieee.org/content/dam/ieee-standards/standards/web/download/1076.2-1996_downloads.zip
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/timing_p.vhdl
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/timing_b.vhdl
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/prmtvs_p.vhdl
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/prmtvs_b.vhdl
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/memory_p.vhdl
source = https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000/memory_b.vhdl
source = 01-llvm7-support.patch
source = 02-fix-warnings.patch
source = 03-fix-segfault.patch
sha512sums = 4450f035c0355befa18636748b7eddb0a4710d4db3b38dfba581ecfc5f1bdaa02ddcbcc1b5cbe42cfcb23688288095c9d06f83e240b8ae59c65163c5db61aba6
sha512sums = 428ebaaa02eb25240569c90e907828ce87e7a18e3a61d9809dda8ecc0bb46a59d0d6c15e625cc0d8e92b26d37dae3be68b480acc77326c07b763fd986bd8e563
sha512sums = bdc38f3f3b5f9b0e572277e8a984361fec7fc877db7ee819bfe4cc9de0f101e53d52472b39b0d3b2c931b50af942378002481dff8e4b99732823ec8d364abe12
sha512sums = affb483b7a2c2cf8e99619696289f578ff0c28b980d3807d9d3b815874af94ccaeb92adb9415409256b1ddd399cc64eefa52648a42913259af275eea871547b3
sha512sums = 741b95985a4a98427d459dba141eebca2fbc3b1a1a3c1cf237d5b6e9d5e12417a9568b38f98049ffdaaa6d6ea11604a869a53a1b66956d61c6487e53b719b309
sha512sums = f0f604bb5bd1e0a8a2a15a4ac5180948e35be30f1479646ddf52803100dcf2c3b8546722f23a81934d006be1b25b44a7fd76ba3dbc8a1ad670560b405f53a0f2
sha512sums = 7358582b3f3877c8492b8cce1bc238dc6ef60818cdfe7e4a2ed5cb50ffe74c81221b7e473e59504328d2583c7e555457be50faf9238402bce1f6236586891c51
sha512sums = 41d9d4862db13cf741fa857ca085ba3fa3596d61eb8276effcfe8b9b7359479670c83fe525a98b595f523506c821b2ed3569fa72df5f62a6f83f7805436b02bf
sha512sums = 3e82eddc83d3f0d63097b476e6f9e97e12e9aba4526f4d03c838b52abaa828e60f2ddb88dc6776d0a53417f6f6df6fbea6ff5bbbaafae11e8c03de2082d88b46
sha512sums = d38d400546de1c6a2f5c732a4e6af50641b6fe95435cd0fd410f9feeba4cac7660400799a80178300d6a84522f73719bd1bc7ae89af480a37da85c777235dba7
sha512sums = d41e1f6a2c7d5a6a1f25619b3c836534a25dd955d3ee6ce9580951a6e32d488da66c0d2d8e1976d63d5a7539146126dbbfc946114a7ac9e7e40fc088f43ddae0
source = https://github.com/nickg/nvc/releases/download/r1.5.0/nvc-1.5.tar.gz
sha512sums = b27afd32b86bf6242fae0bb06051eab818936ec457891b43d0a397781851670e8d0e16e17eaa285cf1af0c32c7915b89458e39aa1bbbc305c280bbcb963bd647
pkgname = nvc

View file

@ -1,70 +0,0 @@
From 3c61c812e111b5458e0ccebec09f9e101e7ad61a Mon Sep 17 00:00:00 2001
From: Nick Gasson <nick@nickg.me.uk>
Date: Sat, 5 Jan 2019 20:14:52 +0800
Subject: [PATCH] Fix build with LLVM 7.0
---
m4/ax_llvm_c.m4 | 5 +++++
src/cgen.c | 8 ++++++++
2 files changed, 13 insertions(+)
diff --git a/m4/ax_llvm_c.m4 b/m4/ax_llvm_c.m4
index 22f6060b..661f3216 100644
--- a/m4/ax_llvm_c.m4
+++ b/m4/ax_llvm_c.m4
@@ -95,6 +95,11 @@ AC_DEFUN([AX_LLVM_C], [
[LLVM has new ORC API])
fi
+ if test "$llvm_ver_num" -lt "70"; then
+ AC_DEFINE_UNQUOTED(LLVM_INTRINSIC_ALIGN, [1],
+ [LLVM intrinsics have alignment param])
+ fi
+
LLVM_OBJ_EXT="o"
case $host_os in
*cygwin*|msys*|mingw32*)
diff --git a/src/cgen.c b/src/cgen.c
index 1fd062ae..c4120dd2 100644
--- a/src/cgen.c
+++ b/src/cgen.c
@@ -2029,7 +2029,9 @@ static void cgen_op_copy(int op, cgen_ctx_t *ctx)
llvm_void_cast(dest),
llvm_void_cast(src),
bytes,
+#if LLVM_INTRINSIC_ALIGN
llvm_int32(4),
+#endif
llvm_int1(0)
};
LLVMBuildCall(builder, llvm_fn(cgen_memcpy_name("memmove", 8)),
@@ -2229,7 +2231,9 @@ static void cgen_op_memset(int op, cgen_ctx_t *ctx)
llvm_void_cast(ptr),
LLVMBuildZExt(builder, value, LLVMInt8Type(), ""),
length,
+#if LLVM_INTRINSIC_ALIGN
llvm_int32(4),
+#endif
llvm_int1(false)
};
@@ -3769,7 +3773,9 @@ static LLVMValueRef cgen_support_fn(const char *name)
LLVMPointerType(LLVMInt8Type(), 0),
LLVMInt8Type(),
LLVMInt32Type(),
+#if LLVM_INTRINSIC_ALIGN
LLVMInt32Type(),
+#endif
LLVMInt1Type()
};
fn = LLVMAddFunction(module, "llvm.memset.p0i8.i32",
@@ -3786,7 +3792,9 @@ static LLVMValueRef cgen_support_fn(const char *name)
LLVMPointerType(LLVMIntType(width), 0),
LLVMPointerType(LLVMIntType(width), 0),
LLVMInt32Type(),
+#if LLVM_INTRINSIC_ALIGN
LLVMInt32Type(),
+#endif
LLVMInt1Type()
};
fn = LLVMAddFunction(module, cgen_memcpy_name(kind, width),

View file

@ -1,154 +0,0 @@
From 96f9409733cdbcfebe93498f84815d31d8fd43a8 Mon Sep 17 00:00:00 2001
From: Nick Gasson <nick@nickg.me.uk>
Date: Mon, 11 Mar 2019 21:23:07 +0800
Subject: [PATCH] Fix warnings with GCC 8.3
---
src/cgen.c | 6 ------
src/lib.c | 17 +++++++++--------
src/rt/fst.c | 5 +++--
src/rt/vcd.c | 5 +++--
src/vcode.c | 4 ++--
5 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/cgen.c b/src/cgen.c
index c4120dd2..a181f5c6 100644
--- a/src/cgen.c
+++ b/src/cgen.c
@@ -3595,12 +3595,6 @@ static void cgen_optimise(void)
{
LLVMPassManagerRef pass_mgr = LLVMCreatePassManager();
- LLVMAddPromoteMemoryToRegisterPass(pass_mgr);
- LLVMAddInstructionCombiningPass(pass_mgr);
- LLVMAddReassociatePass(pass_mgr);
- LLVMAddGVNPass(pass_mgr);
- LLVMAddCFGSimplificationPass(pass_mgr);
-
LLVMPassManagerBuilderRef builder = LLVMPassManagerBuilderCreate();
LLVMPassManagerBuilderSetOptLevel(builder, opt_get_int("optimise"));
LLVMPassManagerBuilderPopulateModulePassManager(builder, pass_mgr);
diff --git a/src/lib.c b/src/lib.c
index 2d73d481..82908c81 100644
--- a/src/lib.c
+++ b/src/lib.c
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2011-2017 Nick Gasson
+// Copyright (C) 2011-2019 Nick Gasson
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -231,8 +231,8 @@ static lib_unit_t *lib_put_aux(lib_t lib, tree_t unit,
static lib_t lib_find_at(const char *name, const char *path, bool exact)
{
char dir[PATH_MAX];
- char *p = dir + snprintf(dir, sizeof(dir) - 4 - strlen(name),
- "%s" PATH_SEP, path);
+ char *p = dir + checked_sprintf(dir, sizeof(dir) - 4 - strlen(name),
+ "%s" PATH_SEP, path);
bool found = false;
if (!exact) {
@@ -242,7 +242,7 @@ static lib_t lib_find_at(const char *name, const char *path, bool exact)
// Try suffixing standard revision extensions first
for (vhdl_standard_t s = standard(); (s > STD_87) && !found; s--) {
- snprintf(p, 4, ".%s", standard_suffix(s));
+ checked_sprintf(p, 4, ".%s", standard_suffix(s));
found = (access(dir, F_OK) == 0);
}
}
@@ -254,7 +254,7 @@ static lib_t lib_find_at(const char *name, const char *path, bool exact)
}
char marker[PATH_MAX];
- snprintf(marker, sizeof(marker), "%s" PATH_SEP "_NVC_LIB", dir);
+ checked_sprintf(marker, sizeof(marker), "%s" PATH_SEP "_NVC_LIB", dir);
if (access(marker, F_OK) < 0)
return NULL;
@@ -264,7 +264,7 @@ static lib_t lib_find_at(const char *name, const char *path, bool exact)
static const char *lib_file_path(lib_t lib, const char *name)
{
static char buf[PATH_MAX];
- snprintf(buf, sizeof(buf), "%s" PATH_SEP "%s", lib->path, name);
+ checked_sprintf(buf, sizeof(buf), "%s" PATH_SEP "%s", lib->path, name);
return buf;
}
@@ -525,7 +525,8 @@ void lib_destroy(lib_t lib)
struct dirent *e;
while ((e = readdir(d))) {
if (e->d_name[0] != '.') {
- snprintf(buf, sizeof(buf), "%s" PATH_SEP "%s", lib->path, e->d_name);
+ checked_sprintf(buf, sizeof(buf), "%s" PATH_SEP "%s",
+ lib->path, e->d_name);
if (unlink(buf) < 0)
perror("unlink");
}
@@ -786,7 +787,7 @@ void lib_realpath(lib_t lib, const char *name, char *buf, size_t buflen)
assert(lib != NULL);
if (name)
- snprintf(buf, buflen, "%s" PATH_SEP "%s", lib->path, name);
+ checked_sprintf(buf, buflen, "%s" PATH_SEP "%s", lib->path, name);
else
strncpy(buf, lib->path, buflen);
}
diff --git a/src/rt/fst.c b/src/rt/fst.c
index e0aebe6c..686e91d7 100644
--- a/src/rt/fst.c
+++ b/src/rt/fst.c
@@ -288,9 +288,10 @@ static void fst_process_signal(tree_t d)
const char *name_base = strrchr(istr(tree_ident(d)), ':') + 1;
const size_t base_len = strlen(name_base);
char name[base_len + 64];
- strncpy(name, name_base, base_len + 64);
if (type_is_array(type))
- snprintf(name + base_len, 64, "[%d:%d]\n", msb, lsb);
+ checked_sprintf(name, sizeof(name), "%s[%d:%d]\n", name_base, msb, lsb);
+ else
+ checked_sprintf(name, sizeof(name), "%s", name_base);
data->handle = fstWriterCreateVar2(
fst_ctx,
diff --git a/src/rt/vcd.c b/src/rt/vcd.c
index 09141488..1f21d687 100644
--- a/src/rt/vcd.c
+++ b/src/rt/vcd.c
@@ -187,9 +187,10 @@ static void vcd_process_signal(tree_t d, int *next_key)
const char *name_base = strrchr(istr(tree_ident(d)), ':') + 1;
const size_t base_len = strlen(name_base);
char name[base_len + 64];
- strncpy(name, name_base, base_len + 64);
if (type_is_array(type))
- snprintf(name + base_len, 64, "[%d:%d]\n", msb, lsb);
+ checked_sprintf(name, sizeof(name), "%s[%d:%d]\n", name_base, msb, lsb);
+ else
+ checked_sprintf(name, sizeof(name), "%s", name_base);
tree_add_attr_ptr(d, vcd_data_i, data);
diff --git a/src/vcode.c b/src/vcode.c
index f1745744..6ea9db43 100644
--- a/src/vcode.c
+++ b/src/vcode.c
@@ -2682,7 +2682,7 @@ int vcode_unit_depth(void)
vcode_type_t vcode_unit_result(void)
{
assert(active_unit != NULL);
- assert(active_unit->kind = VCODE_UNIT_FUNCTION);
+ assert(active_unit->kind == VCODE_UNIT_FUNCTION);
return active_unit->result;
}
@@ -5096,7 +5096,7 @@ static void vcode_write_unit(vcode_unit_t unit, fbuf_t *f,
void vcode_write(vcode_unit_t unit, fbuf_t *f)
{
- assert(unit->kind = VCODE_UNIT_CONTEXT);
+ assert(unit->kind == VCODE_UNIT_CONTEXT);
write_u32(VCODE_MAGIC, f);
write_u8(VCODE_VERSION, f);

View file

@ -1,25 +0,0 @@
From 122055b1b359d2890e3bd2050de1ffb0ee06050b Mon Sep 17 00:00:00 2001
From: Nick Gasson <nick@nickg.me.uk>
Date: Sun, 17 Mar 2019 21:03:34 +0800
Subject: [PATCH] Fix segfault with -O0
---
src/cgen.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/cgen.c b/src/cgen.c
index a181f5c6..e251f562 100644
--- a/src/cgen.c
+++ b/src/cgen.c
@@ -3595,6 +3595,11 @@ static void cgen_optimise(void)
{
LLVMPassManagerRef pass_mgr = LLVMCreatePassManager();
+ LLVMAddInstructionCombiningPass(pass_mgr);
+ LLVMAddReassociatePass(pass_mgr);
+ LLVMAddGVNPass(pass_mgr);
+ LLVMAddCFGSimplificationPass(pass_mgr);
+
LLVMPassManagerBuilderRef builder = LLVMPassManagerBuilderCreate();
LLVMPassManagerBuilderSetOptLevel(builder, opt_get_int("optimise"));
LLVMPassManagerBuilderPopulateModulePassManager(builder, pass_mgr);

View file

@ -1,76 +1,43 @@
# Maintainer: Adrian Perez de Castro <aperez@igalia.com>
pkgdesc='VHDL compiler and simulator'
pkgname=nvc
pkgver=1.4.0
pkgrel=3
url='https://github.com/nickg/nvc'
pkgver=1.5.0
pkgrel=1
url=https://github.com/nickg/nvc
license=(GPL3)
depends=(libelf llvm-libs)
conflicts=(nvc-git)
arch=(x86_64 i686)
depends=(libelf llvm-libs ncurses)
makedepends=(pkgconfig make flex check llvm tcl automake autoconf)
_vital_url='https://raw.githubusercontent.com/tgingold/ghdl/master/libraries/vital2000'
source=("${url}/releases/download/r${pkgver}/${pkgname}-${pkgver}.tar.gz"
"https://standards.ieee.org/content/dam/ieee-standards/standards/web/download/1076.2-1996_downloads.zip"
"${_vital_url}/timing_p.vhdl"
"${_vital_url}/timing_b.vhdl"
"${_vital_url}/prmtvs_p.vhdl"
"${_vital_url}/prmtvs_b.vhdl"
"${_vital_url}/memory_p.vhdl"
"${_vital_url}/memory_b.vhdl"
01-llvm7-support.patch
02-fix-warnings.patch
03-fix-segfault.patch)
sha512sums=('4450f035c0355befa18636748b7eddb0a4710d4db3b38dfba581ecfc5f1bdaa02ddcbcc1b5cbe42cfcb23688288095c9d06f83e240b8ae59c65163c5db61aba6'
'428ebaaa02eb25240569c90e907828ce87e7a18e3a61d9809dda8ecc0bb46a59d0d6c15e625cc0d8e92b26d37dae3be68b480acc77326c07b763fd986bd8e563'
'bdc38f3f3b5f9b0e572277e8a984361fec7fc877db7ee819bfe4cc9de0f101e53d52472b39b0d3b2c931b50af942378002481dff8e4b99732823ec8d364abe12'
'affb483b7a2c2cf8e99619696289f578ff0c28b980d3807d9d3b815874af94ccaeb92adb9415409256b1ddd399cc64eefa52648a42913259af275eea871547b3'
'741b95985a4a98427d459dba141eebca2fbc3b1a1a3c1cf237d5b6e9d5e12417a9568b38f98049ffdaaa6d6ea11604a869a53a1b66956d61c6487e53b719b309'
'f0f604bb5bd1e0a8a2a15a4ac5180948e35be30f1479646ddf52803100dcf2c3b8546722f23a81934d006be1b25b44a7fd76ba3dbc8a1ad670560b405f53a0f2'
'7358582b3f3877c8492b8cce1bc238dc6ef60818cdfe7e4a2ed5cb50ffe74c81221b7e473e59504328d2583c7e555457be50faf9238402bce1f6236586891c51'
'41d9d4862db13cf741fa857ca085ba3fa3596d61eb8276effcfe8b9b7359479670c83fe525a98b595f523506c821b2ed3569fa72df5f62a6f83f7805436b02bf'
'3e82eddc83d3f0d63097b476e6f9e97e12e9aba4526f4d03c838b52abaa828e60f2ddb88dc6776d0a53417f6f6df6fbea6ff5bbbaafae11e8c03de2082d88b46'
'd38d400546de1c6a2f5c732a4e6af50641b6fe95435cd0fd410f9feeba4cac7660400799a80178300d6a84522f73719bd1bc7ae89af480a37da85c777235dba7'
'd41e1f6a2c7d5a6a1f25619b3c836534a25dd955d3ee6ce9580951a6e32d488da66c0d2d8e1976d63d5a7539146126dbbfc946114a7ac9e7e40fc088f43ddae0')
prepare () {
cd "${pkgname}-${pkgver}"
local name
for name in 01-llvm7-support 02-fix-warnings 03-fix-segfault ; do
msg2 "Applying patch: ${name} ..."
patch -p1 < "${srcdir}/${name}.patch"
done
autoreconf -fvi
cd lib/ieee
cp -v "${srcdir}"/*.vhdl "${srcdir}/1076.2-1996_downloads"/*.vhdl .
sed -i -e '119,120 s/^--/ /' -e '89 s/^--/ /' \
std_logic_1164.vhdl
sed -i -e '367,382 s/^--/ /' -e '384,399 s/^--/ /' -e '165,168 s/^--/ /' \
std_logic_1164-body.vhdl
}
optdepends=('ruby: for the scripts to download and install VHDL libraries')
source=("${url}/releases/download/r${pkgver}/${pkgname}-${pkgver%.0}.tar.gz")
sha512sums=('b27afd32b86bf6242fae0bb06051eab818936ec457891b43d0a397781851670e8d0e16e17eaa285cf1af0c32c7915b89458e39aa1bbbc305c280bbcb963bd647')
build () {
cd "${pkgname}-${pkgver}"
./configure --prefix=/usr --with-llvm
make
cd "${pkgname}-${pkgver%.0}"
LDFLAGS="${LDFLAGS} -pthread" \
CFLAGS="${CFLAGS} -pthread" \
CXXFLAGS="${CXXFLAGS} -pthread" \
./configure \
--prefix=/usr \
--with-llvm \
--with-ncurses \
--enable-vhpi \
--enable-fst-pthread
make && make bootstrap
}
# The source distribution is missing VHDL source files which are
# needed to run the test suite.
#
# check () {
# cd "${pkgname}-${pkgver}"
# cd "${pkgname}-${pkgver%.0}"
# make check
# }
package () {
cd "${pkgname}-${pkgver}"
cd "${pkgname}-${pkgver%.0}"
make DESTDIR="${pkgdir}" install
install -m 644 -D src/vhpi/vhpi_user.h "${pkgdir}/usr/include/vhpi_user.h"
install -Dm755 -t "${pkgdir}/usr/share/doc/${pkgname}" README.md
install -Dm755 -t "${pkgdir}/usr/share/doc/${pkgname}/tools" tools/*.rb
}