diff --git a/.SRCINFO b/.SRCINFO index f98ed44717e7..72e001ba7fe3 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -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 diff --git a/01-llvm7-support.patch b/01-llvm7-support.patch deleted file mode 100644 index 83d2185e6dc2..000000000000 --- a/01-llvm7-support.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 3c61c812e111b5458e0ccebec09f9e101e7ad61a Mon Sep 17 00:00:00 2001 -From: Nick Gasson -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), diff --git a/02-fix-warnings.patch b/02-fix-warnings.patch deleted file mode 100644 index 012ade80eee4..000000000000 --- a/02-fix-warnings.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 96f9409733cdbcfebe93498f84815d31d8fd43a8 Mon Sep 17 00:00:00 2001 -From: Nick Gasson -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); diff --git a/03-fix-segfault.patch b/03-fix-segfault.patch deleted file mode 100644 index 4323b8c4d749..000000000000 --- a/03-fix-segfault.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 122055b1b359d2890e3bd2050de1ffb0ee06050b Mon Sep 17 00:00:00 2001 -From: Nick Gasson -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); diff --git a/PKGBUILD b/PKGBUILD index f4473cb677a8..fd87ad0363dd 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,76 +1,43 @@ # Maintainer: Adrian Perez de Castro 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 }