From 333fe52eb3c7876cfe668dfe0445d34c46989d73 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Wed, 3 Feb 2016 19:53:55 +0100 Subject: Keep printf's happy --- dma/ipe.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dma/ipe.h b/dma/ipe.h index 58185ff..18452bd 100644 --- a/dma/ipe.h +++ b/dma/ipe.h @@ -5,10 +5,10 @@ #include "pcilib.h" #include "version.h" -#define IPEDMA_PAGE_SIZE 4096 /**< page size */ -#define IPEDMA_DMA_PAGES 1024 /**< number of DMA pages in the ring buffer to allocate */ +#define IPEDMA_PAGE_SIZE 4096l /**< page size */ +#define IPEDMA_DMA_PAGES 1024l /**< number of DMA pages in the ring buffer to allocate */ -#define IPEDMA_DMA_TIMEOUT 100000 /**< us, overrides PCILIB_DMA_TIMEOUT (actual hardware timeout is 50ms according to Lorenzo) */ +#define IPEDMA_DMA_TIMEOUT 100000l /**< us, overrides PCILIB_DMA_TIMEOUT (actual hardware timeout is 50ms according to Lorenzo) */ pcilib_dma_context_t *dma_ipe_init(pcilib_t *ctx, const char *model, const void *arg); void dma_ipe_free(pcilib_dma_context_t *vctx); -- cgit v1.2.3 From 0e12e11ed817d66ff1e9246a32931e14e4fa6700 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 4 Feb 2016 01:18:33 +0100 Subject: Add build information --- .bzrignore | 1 + CMakeLists.txt | 9 ++++++ cmake/FindBAZAAR.cmake | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++ cmake/build.cmake | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ pcilib/CMakeLists.txt | 8 ++--- pcilib/build.h.in | 7 +++++ pcitool/CMakeLists.txt | 6 ++-- pcitool/buildinfo.c | 12 ++++++++ pcitool/buildinfo.h | 6 ++++ pcitool/cli.c | 21 +++++++------ 10 files changed, 219 insertions(+), 16 deletions(-) create mode 100644 cmake/FindBAZAAR.cmake create mode 100644 cmake/build.cmake create mode 100644 pcilib/build.h.in create mode 100644 pcitool/buildinfo.c create mode 100644 pcitool/buildinfo.h diff --git a/.bzrignore b/.bzrignore index fdc70db..39cf710 100644 --- a/.bzrignore +++ b/.bzrignore @@ -31,3 +31,4 @@ pcitool/pci version.h Doxyfile html +pcilib/build.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 63bdeb3..46a35b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,8 +59,17 @@ add_definitions("-fPIC --std=c99 -Wall -O2 -gdwarf-2 -g3 -fno-omit-frame-pointer #add_definitions("-fPIC --std=c99 -Wall -O2") include(cmake/version.cmake) + VERSION_TO_VARS(${PCILIB_VERSION} PCILIB_VERSION_MAJOR PCILIB_VERSION_MINOR PCILIB_VERSION_MICRO) +add_custom_target(build) +add_custom_command(TARGET build + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +) +set_source_files_properties(${CMAKE_BINARY_DIR}/pcilib/build.h PROPERTIES GENERATED TRUE) + + set(TARNAME "pcitool") set(PACKAGE_VERSION ${PCILIB_VERSION}) set(PACKAGE_NAME "${TARNAME}") diff --git a/cmake/FindBAZAAR.cmake b/cmake/FindBAZAAR.cmake new file mode 100644 index 0000000..ad7b76b --- /dev/null +++ b/cmake/FindBAZAAR.cmake @@ -0,0 +1,83 @@ +# +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2010 Wayne Stambaugh +# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors. +# +# 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 the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +# This CMake script finds the BAZAAR version control system executable and +# and fetches the veresion string to valid that BAZAAR was found and executes +# properly. +# +# Usage: +# find_package( BAZAAR ) +# +# User definable. +# BAZAAR_EXECUTABLE Set this to use a version of BAZAAR that is not in +# current path. Defaults to bzr. +# +# Defines: +# BAZAAR_FOUND Set to TRUE if BAZAAR command line client is found +# and the bzr --version command executes properly. +# BAZAAR_VERSION Result of the bzr --version command. +# + +set( BAZAAR_FOUND FALSE ) + +find_program( BAZAAR_EXECUTABLE bzr + DOC "BAZAAR version control system command line client" ) +mark_as_advanced( BAZAAR_EXECUTABLE ) + +if( BAZAAR_EXECUTABLE ) + + # BAZAAR commands should be executed with the C locale, otherwise + # the message (which are parsed) may be translated causing the regular + # expressions to fail. + set( _BAZAAR_SAVED_LC_ALL "$ENV{LC_ALL}" ) + set( ENV{LC_ALL} C ) + + # Fetch the BAZAAR executable version. + execute_process( COMMAND ${BAZAAR_EXECUTABLE} --version + OUTPUT_VARIABLE _bzr_version_output + ERROR_VARIABLE _bzr_version_error + RESULT_VARIABLE _bzr_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE ) + + if( ${_bzr_version_result} EQUAL 0 ) + set( BAZAAR_FOUND TRUE ) + string( REGEX REPLACE "^[\n]*Bazaar \\(bzr\\) ([0-9.a-z]+).*" + "\\1" BAZAAR_VERSION "${_bzr_version_output}" ) + if( NOT BAZAAR_FIND_QUIETLY ) + message( STATUS "BAZAAR version control system version ${BAZAAR_VERSION} found." ) + endif() + endif() + + # restore the previous LC_ALL + set( ENV{LC_ALL} ${_BAZAAR_SAVED_LC_ALL} ) +endif() + +if( NOT BAZAAR_FOUND ) + if( NOT BAZAAR_FIND_QUIETLY ) + message( STATUS "BAZAAR version control command line client was not found." ) + else() + if( BAZAAR_FIND_REQUIRED ) + message( FATAL_ERROR "BAZAAR version control command line client was not found." ) + endif() + endif() +endif() diff --git a/cmake/build.cmake b/cmake/build.cmake new file mode 100644 index 0000000..3043014 --- /dev/null +++ b/cmake/build.cmake @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 2.6) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") + +find_package(BAZAAR QUIET) + +set(PCILIB_BUILD_DATE "") +set(PCILIB_LAST_MODIFICATION "") +set(PCILIB_REVISION "0") +set(PCILIB_REVISION_BRANCH "") +set(PCILIB_REVISION_AUTHOR "") +set(PCILIB_REVISION_MODIFICATIONS "") + +execute_process( + COMMAND date "+%Y/%m/%d %H:%M:%S" + RESULT_VARIABLE _retcode + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if (${_retcode} EQUAL 0) + set(PCILIB_BUILD_DATE ${_output}) +endif (${_retcode} EQUAL 0) + +execute_process( + COMMAND find ${CMAKE_SOURCE_DIR} -type f -name *.[ch] -printf "%TY/%Tm/%Td %TH:%TM:%TS %p\n" + COMMAND sort -n + COMMAND grep -E -v "build.h|config.h|CMakeFiles|./apps" + COMMAND tail -n 1 + COMMAND cut -d " " -f 1-2 + COMMAND cut -d "." -f 1 + RESULT_VARIABLE _retcode + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if (${_retcode} EQUAL 0) + set(PCILIB_LAST_MODIFICATION ${_output}) +endif (${_retcode} EQUAL 0) + +if (BAZAAR_FOUND) + execute_process( + COMMAND ${BAZAAR_EXECUTABLE} revno --tree ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE _retcode + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if (${_retcode} EQUAL 0) + set(PCILIB_REVISION ${_output}) + + execute_process( + COMMAND ${BAZAAR_EXECUTABLE} log -r${PCILIB_REVISION} ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE _retcode + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if (${_retcode} EQUAL 0) + string(REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*" + "\\2" PCILIB_REVISION_AUTHOR "${_output}" ) + string(REGEX REPLACE "^(.*\n)?branch nick: ([^\n]+).*" + "\\2" PCILIB_REVISION_BRANCH "${_output}" ) + endif (${_retcode} EQUAL 0) + endif (${_retcode} EQUAL 0) + + execute_process( + COMMAND ${BAZAAR_EXECUTABLE} status -SV + COMMAND cut -c 5- + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE _retcode + OUTPUT_VARIABLE _output + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if (${_retcode} EQUAL 0) + string(REGEX REPLACE "\n+" ";" PCILIB_REVISION_MODIFICATIONS ${_output}) +# set(PCILIB_REVISION_MODIFICATIONS ${_output}) + endif (${_retcode} EQUAL 0) +endif(BAZAAR_FOUND) + +configure_file(${CMAKE_SOURCE_DIR}/pcilib/build.h.in ${CMAKE_BINARY_DIR}/pcilib/build.h) diff --git a/pcilib/CMakeLists.txt b/pcilib/CMakeLists.txt index cdc9c3f..a7557b7 100644 --- a/pcilib/CMakeLists.txt +++ b/pcilib/CMakeLists.txt @@ -8,10 +8,10 @@ include_directories( ${UTHASH_INCLUDE_DIRS} ) -set(HEADERS pcilib.h pci.h datacpy.h memcpy.h pagecpy.h cpu.h timing.h export.h value.h bar.h fifo.h model.h bank.h register.h view.h property.h unit.h xml.h py.h kmem.h irq.h locking.h lock.h dma.h event.h plugin.h tools.h error.h debug.h env.h version.h config.h) -add_library(pcilib SHARED pci.c datacpy.c memcpy.c pagecpy.c cpu.c timing.c export.c value.c bar.c fifo.c model.c bank.c register.c view.c unit.c property.c xml.c py.c kmem.c irq.c locking.c lock.c dma.c event.c plugin.c tools.c error.c debug.c env.c ) +set(HEADERS pcilib.h pci.h datacpy.h memcpy.h pagecpy.h cpu.h timing.h export.h value.h bar.h fifo.h model.h bank.h register.h view.h property.h unit.h xml.h py.h kmem.h irq.h locking.h lock.h dma.h event.h plugin.h tools.h error.h debug.h env.h version.h config.h build.h) +add_library(pcilib SHARED pci.c datacpy.c memcpy.c pagecpy.c cpu.c timing.c export.c value.c bar.c fifo.c model.c bank.c register.c view.c unit.c property.c xml.c py.c kmem.c irq.c locking.c lock.c dma.c event.c plugin.c tools.c error.c debug.c env.c) target_link_libraries(pcilib dma protocols views ${CMAKE_THREAD_LIBS_INIT} ${UFODECODE_LIBRARIES} ${CMAKE_DL_LIBS} ${EXTRA_SYSTEM_LIBS} ${LIBXML2_LIBRARIES} ${PYTHON_LIBRARIES}) -add_dependencies(pcilib dma protocols views) +add_dependencies(pcilib build dma protocols views) install(TARGETS pcilib LIBRARY DESTINATION lib${LIB_SUFFIX} @@ -23,4 +23,4 @@ install(FILES pcilib.h install(FILES bar.h kmem.h locking.h lock.h bank.h register.h xml.h dma.h event.h model.h error.h debug.h env.h tools.h timing.h cpu.h datacpy.h pagecpy.h memcpy.h export.h version.h view.h unit.h DESTINATION include/pcilib -) +) \ No newline at end of file diff --git a/pcilib/build.h.in b/pcilib/build.h.in new file mode 100644 index 0000000..1713378 --- /dev/null +++ b/pcilib/build.h.in @@ -0,0 +1,7 @@ +#define PCILIB_REVISION "${PCILIB_REVISION}" +#define PCILIB_REVISION_BRANCH "${PCILIB_REVISION_BRANCH}" +#define PCILIB_REVISION_AUTHOR "${PCILIB_REVISION_AUTHOR}" +#define PCILIB_REVISION_MODIFICATIONS "${PCILIB_REVISION_MODIFICATIONS}" +#define PCILIB_BUILD_DATE "${PCILIB_BUILD_DATE}" +#define PCILIB_BUILD_DIR "${CMAKE_SOURCE_DIR}" +#define PCILIB_LAST_MODIFICATION "${PCILIB_LAST_MODIFICATION}" diff --git a/pcitool/CMakeLists.txt b/pcitool/CMakeLists.txt index 2f3639f..d8b5a6c 100644 --- a/pcitool/CMakeLists.txt +++ b/pcitool/CMakeLists.txt @@ -13,9 +13,9 @@ link_directories( ) if (NOT DISABLE_PCITOOL) - add_executable(pci cli.c sysinfo.c formaters.c) - set(HEADERS ${HEADERS} sysinfo.h formaters.h) - add_dependencies(pci pcilib) + set(HEADERS ${HEADERS} sysinfo.h formaters.h buildinfo.h) + add_executable(pci cli.c sysinfo.c formaters.c buildinfo.c) + add_dependencies(pci build pcilib) target_link_libraries(pci pcilib ${FASTWRITER_LIBRARIES}) set_target_properties(pci PROPERTIES LINK_FLAGS "${CMAKE_THREAD_LIBS_INIT} ${EXTRA_SYSTEM_LIBS}" diff --git a/pcitool/buildinfo.c b/pcitool/buildinfo.c new file mode 100644 index 0000000..624a934 --- /dev/null +++ b/pcitool/buildinfo.c @@ -0,0 +1,12 @@ +#include +#include +#include "pcilib/build.h" + +void BuildInfo() { + printf("\n"); + printf("Revision: %s built on %s in %s\n", PCILIB_REVISION, PCILIB_BUILD_DATE, PCILIB_BUILD_DIR); + printf("Branch: %s by %s\n", PCILIB_REVISION_BRANCH, PCILIB_REVISION_AUTHOR); + if (strlen(PCILIB_REVISION_MODIFICATIONS)) { + printf("Modifications: %s - %s\n", PCILIB_LAST_MODIFICATION, PCILIB_REVISION_MODIFICATIONS); + } +} diff --git a/pcitool/buildinfo.h b/pcitool/buildinfo.h new file mode 100644 index 0000000..5157a24 --- /dev/null +++ b/pcitool/buildinfo.h @@ -0,0 +1,6 @@ +#ifndef _PCITOOL_BUILDINFO_H +#define _PCITOOL_BUILDINFO_H + +void BuildInfo(); + +#endif /* _PCITOOL_BUILDINFO_H */ \ No newline at end of file diff --git a/pcitool/cli.c b/pcitool/cli.c index 4d5d3d5..bb3d9b8 100644 --- a/pcitool/cli.c +++ b/pcitool/cli.c @@ -31,18 +31,19 @@ #include "pcitool/sysinfo.h" #include "pcitool/formaters.h" +#include "pcitool/buildinfo.h" #include "views/transform.h" #include "views/enum.h" -#include "pci.h" -#include "plugin.h" -#include "config.h" -#include "tools.h" -#include "kmem.h" -#include "error.h" -#include "debug.h" -#include "model.h" -#include "locking.h" +#include "pcilib/pci.h" +#include "pcilib/plugin.h" +#include "pcilib/config.h" +#include "pcilib/tools.h" +#include "pcilib/kmem.h" +#include "pcilib/error.h" +#include "pcilib/debug.h" +#include "pcilib/model.h" +#include "pcilib/locking.h" /* defines */ #define MAX_KBUF 14 @@ -895,6 +896,8 @@ void Version(pcilib_t *handle, const pcilib_model_description_t *model_info) { PCILIB_VERSION_GET_MICRO(version) ); } + + BuildInfo(); } void Info(pcilib_t *handle, const pcilib_model_description_t *model_info, const char *target) { -- cgit v1.2.3 From cabe489a2e8e2ee7619924e447221177f4562962 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 4 Feb 2016 01:24:00 +0100 Subject: Improve gcc detection for module compilation --- driver/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/driver/Makefile b/driver/Makefile index 83a8c46..f2c993e 100644 --- a/driver/Makefile +++ b/driver/Makefile @@ -20,8 +20,8 @@ default: echo "No compiler of $$GCC_MAJOR series is installed" ;\ exit 1 ;\ fi ;\ - GCC_VERSION=`$$CC --version | head -n 1 | tr ' ' '\n' | grep -e "[0-9]\+\.[0-9]" | head -n 1` ;\ - if [ $$KERNEL_GCC_VERSION != $$GCC_VERSION ]; then \ + GCC_VERSION=`$$CC --version | head -n 1 | tr ' ' '\n' | grep -e "[0-9]\+\.[0-9]" | tail -n 1` ;\ + if [ $$KERNEL_GCC_VERSION != $$GCC_VERSION -a -z "$$RELAXED_GCC_CHECK" ]; then \ echo "The $$GCC_VERSION of $$GCC_MAJOR series is installed" ;\ exit 1 ;\ fi ;\ -- cgit v1.2.3 From 4f5185b37980bdf962ff7058e9f8fbb06098386c Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 4 Feb 2016 02:13:02 +0100 Subject: Report information about driver revision and build --- .bzrignore | 1 + cmake/build.cmake | 2 +- driver/Makefile | 11 +++++++++++ driver/base.c | 11 ++++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.bzrignore b/.bzrignore index 39cf710..3c1afaa 100644 --- a/.bzrignore +++ b/.bzrignore @@ -32,3 +32,4 @@ version.h Doxyfile html pcilib/build.h +build.h diff --git a/cmake/build.cmake b/cmake/build.cmake index 3043014..ffddf82 100644 --- a/cmake/build.cmake +++ b/cmake/build.cmake @@ -23,7 +23,7 @@ if (${_retcode} EQUAL 0) endif (${_retcode} EQUAL 0) execute_process( - COMMAND find ${CMAKE_SOURCE_DIR} -type f -name *.[ch] -printf "%TY/%Tm/%Td %TH:%TM:%TS %p\n" + COMMAND find ${CMAKE_SOURCE_DIR} -type f -name "*.[ch]" -printf "%TY/%Tm/%Td %TH:%TM:%TS %p\n" COMMAND sort -n COMMAND grep -E -v "build.h|config.h|CMakeFiles|./apps" COMMAND tail -n 1 diff --git a/driver/Makefile b/driver/Makefile index f2c993e..c26a84a 100644 --- a/driver/Makefile +++ b/driver/Makefile @@ -29,6 +29,17 @@ default: else \ CC=$(CC) ;\ fi ;\ + build_revision=`bzr revno` ;\ + build_author=`bzr log -r$$build_revision | grep committer | cut -c 12-` ;\ + build_path=`pwd` ;\ + build_branch=`bzr nick` ;\ + build_lastmod=`find . -type f -name '*.[ch]' -printf '%TY/%Tm/%Td %TH:%TM:%TS %p\n' | grep -E -v 'build.h|mod.c' | sort -n | tail -n 1 | cut -d ' ' -f 1-2 | cut -d '.' -f 1` ;\ + build_changes=`bzr status -SV | cut -c 5- | tr \\\n " "` ;\ + build_user=`whoami` ;\ + build_date=`date "+%Y/%m/%d %H:%M:%S"` ;\ + build="Built at $$build_date by $$build_user" ;\ + revision="Revision $$build_revision from $$build_branch by $$build_author at $$build_path, last modification from $$build_lastmod" ;\ + echo -e "#define PCIDRIVER_BUILD \"$$build\"\\n#define PCIDRIVER_REVISION \"$$revision\"\\n#define PCIDRIVER_CHANGES \"$$build_changes\"\\n" > build.h ;\ $(MAKE) $(CFLAGS) -C $(KERNELDIR) M=$(PWD) CC=$$CC modules install: diff --git a/driver/base.c b/driver/base.c index 2768f9e..bc9ab98 100644 --- a/driver/base.c +++ b/driver/base.c @@ -164,6 +164,8 @@ #include #include +#include "../pcilib/version.h" + /* Configuration for the driver (what should be compiled in, module name, etc...) */ #include "config.h" @@ -190,6 +192,8 @@ #include "ioctl.h" +#include "build.h" + /*************************************************************************/ /* Module device table associated with this driver */ MODULE_DEVICE_TABLE(pci, pcidriver_ids); @@ -240,7 +244,12 @@ static int __init pcidriver_init(void) goto init_pcireg_fail; } - mod_info("Module loaded\n"); + mod_info("pcidriver %u.%u.%u loaded\n", PCILIB_VERSION_GET_MAJOR(PCILIB_VERSION), PCILIB_VERSION_GET_MINOR(PCILIB_VERSION), PCILIB_VERSION_GET_MICRO(PCILIB_VERSION)); + mod_info("%s\n", PCIDRIVER_BUILD); + mod_info("%s\n", PCIDRIVER_REVISION); + if (strlen(PCIDRIVER_CHANGES)) { + mod_info("Extra changes - %s\n", PCIDRIVER_CHANGES); + } return 0; -- cgit v1.2.3 From ab0797327e5b7cf4c4710ce7d2fff533ba405507 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 4 Feb 2016 02:46:51 +0100 Subject: Fix build system --- CMakeLists.txt | 4 ++-- cmake/build.cmake | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46a35b3..fcd82b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,8 +64,8 @@ VERSION_TO_VARS(${PCILIB_VERSION} PCILIB_VERSION_MAJOR PCILIB_VERSION_MINOR PCIL add_custom_target(build) add_custom_command(TARGET build - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -DPCILIB_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DPCILIB_BINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) set_source_files_properties(${CMAKE_BINARY_DIR}/pcilib/build.h PROPERTIES GENERATED TRUE) diff --git a/cmake/build.cmake b/cmake/build.cmake index ffddf82..94eb4c1 100644 --- a/cmake/build.cmake +++ b/cmake/build.cmake @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.6) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") +list(APPEND CMAKE_MODULE_PATH "${PCILIB_SOURCE_DIR}/cmake/") find_package(BAZAAR QUIET) @@ -23,7 +23,7 @@ if (${_retcode} EQUAL 0) endif (${_retcode} EQUAL 0) execute_process( - COMMAND find ${CMAKE_SOURCE_DIR} -type f -name "*.[ch]" -printf "%TY/%Tm/%Td %TH:%TM:%TS %p\n" + COMMAND find ${PCILIB_SOURCE_DIR} -type f -name "*.[ch]" -printf "%TY/%Tm/%Td %TH:%TM:%TS %p\n" COMMAND sort -n COMMAND grep -E -v "build.h|config.h|CMakeFiles|./apps" COMMAND tail -n 1 @@ -40,7 +40,7 @@ endif (${_retcode} EQUAL 0) if (BAZAAR_FOUND) execute_process( - COMMAND ${BAZAAR_EXECUTABLE} revno --tree ${CMAKE_SOURCE_DIR} + COMMAND ${BAZAAR_EXECUTABLE} revno --tree ${PCILIB_SOURCE_DIR} RESULT_VARIABLE _retcode OUTPUT_VARIABLE _output OUTPUT_STRIP_TRAILING_WHITESPACE @@ -50,24 +50,25 @@ if (BAZAAR_FOUND) set(PCILIB_REVISION ${_output}) execute_process( - COMMAND ${BAZAAR_EXECUTABLE} log -r${PCILIB_REVISION} ${CMAKE_SOURCE_DIR} + COMMAND ${BAZAAR_EXECUTABLE} log -r${PCILIB_REVISION} ${PCILIB_SOURCE_DIR} RESULT_VARIABLE _retcode OUTPUT_VARIABLE _output OUTPUT_STRIP_TRAILING_WHITESPACE ) if (${_retcode} EQUAL 0) + set(_last_output ${_output}) string(REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*" - "\\2" PCILIB_REVISION_AUTHOR "${_output}" ) + "\\2" PCILIB_REVISION_AUTHOR "${_last_output}" ) string(REGEX REPLACE "^(.*\n)?branch nick: ([^\n]+).*" - "\\2" PCILIB_REVISION_BRANCH "${_output}" ) + "\\2" PCILIB_REVISION_BRANCH "${_last_output}" ) endif (${_retcode} EQUAL 0) endif (${_retcode} EQUAL 0) execute_process( COMMAND ${BAZAAR_EXECUTABLE} status -SV COMMAND cut -c 5- - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + WORKING_DIRECTORY ${PCILIB_SOURCE_DIR} RESULT_VARIABLE _retcode OUTPUT_VARIABLE _output OUTPUT_STRIP_TRAILING_WHITESPACE @@ -79,4 +80,4 @@ if (BAZAAR_FOUND) endif (${_retcode} EQUAL 0) endif(BAZAAR_FOUND) -configure_file(${CMAKE_SOURCE_DIR}/pcilib/build.h.in ${CMAKE_BINARY_DIR}/pcilib/build.h) +configure_file(${PCILIB_SOURCE_DIR}/pcilib/build.h.in ${PCILIB_BINARY_DIR}/pcilib/build.h) -- cgit v1.2.3 From 055279e09c3db9429e02874ec9620b9af357c80a Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 4 Feb 2016 02:48:24 +0100 Subject: Do not complain if no changes since last revision --- cmake/build.cmake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake/build.cmake b/cmake/build.cmake index 94eb4c1..b0d803a 100644 --- a/cmake/build.cmake +++ b/cmake/build.cmake @@ -57,11 +57,10 @@ if (BAZAAR_FOUND) ) if (${_retcode} EQUAL 0) - set(_last_output ${_output}) string(REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*" - "\\2" PCILIB_REVISION_AUTHOR "${_last_output}" ) + "\\2" PCILIB_REVISION_AUTHOR "${_output}" ) string(REGEX REPLACE "^(.*\n)?branch nick: ([^\n]+).*" - "\\2" PCILIB_REVISION_BRANCH "${_last_output}" ) + "\\2" PCILIB_REVISION_BRANCH "${_output}" ) endif (${_retcode} EQUAL 0) endif (${_retcode} EQUAL 0) @@ -75,7 +74,7 @@ if (BAZAAR_FOUND) ) if (${_retcode} EQUAL 0) - string(REGEX REPLACE "\n+" ";" PCILIB_REVISION_MODIFICATIONS ${_output}) + string(REGEX REPLACE "\n+" ";" PCILIB_REVISION_MODIFICATIONS "${_output}") # set(PCILIB_REVISION_MODIFICATIONS ${_output}) endif (${_retcode} EQUAL 0) endif(BAZAAR_FOUND) -- cgit v1.2.3 From dbef1e0271da298a0cbdc951dda84b7f150bbad0 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Tue, 23 Feb 2016 08:12:30 +0100 Subject: Stabilize merged code --- .bzrignore | 1 + pcilib/py.c | 30 ++++++++++++++++++------------ pywrap/test_pcipywrap.py | 2 +- views/transform.c | 4 ++-- xml/test/test_prop3.py | 6 +++--- 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/.bzrignore b/.bzrignore index e7ce7bc..453185a 100644 --- a/.bzrignore +++ b/.bzrignore @@ -36,3 +36,4 @@ build.h build pcipywrap.py pcipywrapPYTHON_wrap.c +apps/test_multithread diff --git a/pcilib/py.c b/pcilib/py.c index 9254df7..1db18f7 100644 --- a/pcilib/py.c +++ b/pcilib/py.c @@ -1,4 +1,9 @@ -#define _GNU_SOURCE +#include "config.h" + +#ifdef HAVE_PYTHON +# include +#endif /* HAVE_PYTHON */ + #include #include #include @@ -10,11 +15,6 @@ #include "pcilib.h" #include "py.h" #include "error.h" -#include "config.h" - -#ifdef HAVE_PYTHON -# include -#endif /* HAVE_PYTHON */ #ifdef HAVE_PYTHON typedef struct pcilib_script_s pcilib_script_t; @@ -40,13 +40,19 @@ void pcilib_log_python_error(const char *file, int line, pcilib_log_flags_t flag const char *val = NULL; #ifdef HAVE_PYTHON + PyGILState_STATE gstate; PyObject *pytype = NULL; PyObject *pyval = NULL; PyObject *pytraceback = NULL; - PyErr_Fetch(&pytype, &pyval, &pytraceback); - type = PyString_AsString(pytype); - val = PyString_AsString(pyval); + + gstate = PyGILState_Ensure(); + if (PyErr_Occurred()) { + PyErr_Fetch(&pytype, &pyval, &pytraceback); + type = PyString_AsString(pytype); + val = PyString_AsString(pyval); + } + PyGILState_Release(gstate); #endif /* HAVE_PYTHON */ va_start(va, msg); @@ -77,9 +83,9 @@ void pcilib_log_python_error(const char *file, int line, pcilib_log_flags_t flag va_end(va); #ifdef HAVE_PYTHON - Py_XDECREF(pytype); - Py_XDECREF(pyval); - Py_XDECREF(pytraceback); + if (pytype) Py_XDECREF(pytype); + if (pyval) Py_XDECREF(pyval); + if (pytraceback) Py_XDECREF(pytraceback); #endif /* HAVE_PYTHON */ } diff --git a/pywrap/test_pcipywrap.py b/pywrap/test_pcipywrap.py index 257b4a5..dea73ba 100644 --- a/pywrap/test_pcipywrap.py +++ b/pywrap/test_pcipywrap.py @@ -112,7 +112,7 @@ class test_pcipywrap(): pass if __name__ == '__main__': - lib = test_pcipywrap('/dev/fpga0','test_pywrap', num_threads = 150, + lib = test_pcipywrap('/dev/fpga0','test', num_threads = 150, write_percentage = 0.1, register = 'test_prop2',server_host = 'http://localhost', server_port = 12412, server_message_delay = 0) lib.testThreadSafeReadWrite() diff --git a/views/transform.c b/views/transform.c index f2d4b4a..25f30d1 100644 --- a/views/transform.c +++ b/views/transform.c @@ -10,13 +10,13 @@ #include "transform.h" #include "py.h" #include "error.h" +#include "pci.h" static pcilib_view_context_t * pcilib_transform_view_init(pcilib_t *ctx, pcilib_view_t view) { int err; pcilib_view_context_t *view_ctx; - const pcilib_model_description_t *model_info = pcilib_get_model_description(ctx); - pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(model_info->views[view]); + pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(ctx->views[view]); if(v->script) { pcilib_access_mode_t mode = 0; diff --git a/xml/test/test_prop3.py b/xml/test/test_prop3.py index a082096..c0728a3 100644 --- a/xml/test/test_prop3.py +++ b/xml/test/test_prop3.py @@ -1,5 +1,5 @@ def read_from_register(ctx, value): - return ctx.get_property('/registers/fpga/reg1') - + return ctx.get_property('/registers/fpga/sensor_temperature') + 500 + def write_to_register(ctx, value): - ctx.set_property(value, '/registers/fpga/reg1') + ctx.set_property(value, '/registers/fpga/sensor_temperature') - 500 -- cgit v1.2.3 From 3f3b678b15eef0d102a021e07c8476b45e52940a Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Tue, 23 Feb 2016 08:18:40 +0100 Subject: Add run script to run python scripts and binary executables in the local environment --- CMakeLists.txt | 4 ++++ run | 5 +++++ 2 files changed, 9 insertions(+) create mode 100755 run diff --git a/CMakeLists.txt b/CMakeLists.txt index b77529e..ed19146 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,10 @@ if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) DESTINATION ${CMAKE_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) + file(COPY ${CMAKE_SOURCE_DIR}/run + DESTINATION ${CMAKE_BINARY_DIR} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) endif(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) install(FILES diff --git a/run b/run new file mode 100755 index 0000000..42160f2 --- /dev/null +++ b/run @@ -0,0 +1,5 @@ +#! /bin/bash + +APP_PATH=`dirname $0` + +PYTHONPATH="$APP_PATH/pywrap:$PYTHONPATH" PCILIB_MODEL_DIR="$APP_PATH/xml" LD_LIBRARY_PATH="$APP_PATH/pcilib" $* -- cgit v1.2.3 From 3ea1907f3169e0233d3a32a7d470af3c34b6f967 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Tue, 23 Feb 2016 09:03:22 +0100 Subject: Add more GILs to prevent Python crashes in multithreaded applications --- pcilib/py.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/pcilib/py.c b/pcilib/py.c index 1db18f7..a5118fb 100644 --- a/pcilib/py.c +++ b/pcilib/py.c @@ -276,10 +276,12 @@ pcilib_py_object *pcilib_get_value_as_pyobject(pcilib_t* ctx, pcilib_value_t *va #ifdef HAVE_PYTHON int err = 0; PyObject *res = NULL; + PyGILState_STATE gstate; long ival; double fval; + gstate = PyGILState_Ensure(); switch(val->type) { case PCILIB_TYPE_LONG: ival = pcilib_get_value_as_int(ctx, val, &err); @@ -290,9 +292,12 @@ pcilib_py_object *pcilib_get_value_as_pyobject(pcilib_t* ctx, pcilib_value_t *va if (!err) res = (PyObject*)PyFloat_FromDouble(fval); break; default: - err = PCILIB_ERROR_NOTSUPPORTED; + PyGILState_Release(gstate); pcilib_error("Can't convert pcilib value of type (%lu) to PyObject", val->type); + if (ret) *ret = PCILIB_ERROR_NOTSUPPORTED; + return NULL; } + PyGILState_Release(gstate); if (err) { if (ret) *ret = err; @@ -314,7 +319,9 @@ int pcilib_set_value_from_pyobject(pcilib_t* ctx, pcilib_value_t *val, pcilib_py #ifdef HAVE_PYTHON int err = 0; PyObject *pyval = (PyObject*)pval; + PyGILState_STATE gstate; + gstate = PyGILState_Ensure(); if (PyInt_Check(pyval)) { err = pcilib_set_value_from_int(ctx, val, PyInt_AsLong(pyval)); } else if (PyFloat_Check(pyval)) { @@ -322,10 +329,12 @@ int pcilib_set_value_from_pyobject(pcilib_t* ctx, pcilib_value_t *val, pcilib_py } else if (PyString_Check(pyval)) { err = pcilib_set_value_from_string(ctx, val, PyString_AsString(pyval)); } else { + PyGILState_Release(gstate); pcilib_error("Can't convert PyObject to polymorphic pcilib value"); - err = PCILIB_ERROR_NOTSUPPORTED; + return PCILIB_ERROR_NOTSUPPORTED; } - + PyGILState_Release(gstate); + return err; #else /* HAVE_PYTHON */ pcilib_error("Python is not supported"); @@ -443,6 +452,8 @@ static char *pcilib_py_parse_string(pcilib_t *ctx, const char *codestr, pcilib_v int pcilib_py_eval_string(pcilib_t *ctx, const char *codestr, pcilib_value_t *value) { #ifdef HAVE_PYTHON + int err; + PyGILState_STATE gstate; char *code; PyObject* obj; @@ -463,7 +474,9 @@ int pcilib_py_eval_string(pcilib_t *ctx, const char *codestr, pcilib_value_t *va } pcilib_debug(VIEWS, "Evaluating a Python string \'%s\' to %lf=\'%s\'", codestr, PyFloat_AsDouble(obj), code); - return pcilib_set_value_from_float(ctx, value, PyFloat_AsDouble(obj)); + err = pcilib_set_value_from_float(ctx, value, PyFloat_AsDouble(obj)); + + return err; #else /* HAVE_PYTHON */ pcilib_error("Current build not support python."); return PCILIB_ERROR_NOTAVAILABLE; @@ -489,20 +502,22 @@ int pcilib_py_eval_func(pcilib_t *ctx, const char *script_name, const char *func if (err) return err; } + PyGILState_STATE gstate = PyGILState_Ensure(); + pyfunc = PyUnicode_FromString(func_name); if (!pyfunc) { if (pyval) Py_XDECREF(pyval); + PyGILState_Release(gstate); return PCILIB_ERROR_MEMORY; } - PyGILState_STATE gstate = PyGILState_Ensure(); pyret = PyObject_CallMethodObjArgs(module->module, pyfunc, ctx->py->pcilib_pywrap, pyval, NULL); - PyGILState_Release(gstate); Py_XDECREF(pyfunc); Py_XDECREF(pyval); if (!pyret) { + PyGILState_Release(gstate); pcilib_python_error("Error executing function (%s) of python script (%s)", func_name, script_name); return PCILIB_ERROR_FAILED; } @@ -511,6 +526,7 @@ int pcilib_py_eval_func(pcilib_t *ctx, const char *script_name, const char *func err = pcilib_set_value_from_pyobject(ctx, val, pyret); Py_XDECREF(pyret); + PyGILState_Release(gstate); return err; #else /* HAVE_PYTHON */ -- cgit v1.2.3