Skip to content
Snippets Groups Projects
Commit d607e571 authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Merge branch 'update' into cmake_demangled

parents 58056b42 e53ebff8
No related branches found
No related tags found
No related merge requests found
...@@ -60,3 +60,4 @@ examples/cache ...@@ -60,3 +60,4 @@ examples/cache
# Working directories # Working directories
work work
build* build*
build/
...@@ -23,6 +23,80 @@ Instructions for downloading hcana can be found in the ...@@ -23,6 +23,80 @@ Instructions for downloading hcana can be found in the
Compiling Compiling
--------- ---------
CMake is the preferred build tool. See below for builds with scons/make which
are slightly different.
### Compiling with CMAKE
CMake build will do a **proper** build and install.
Here we are using the install prefix `$HOME/my_exp_soft` which is like the
standard `/usr/local`. To use it make sure you your environment is setup (e.g.,
towards the end of your `.bashrc`):
```
export PATH=$HOME/my_exp_soft/bin:$PATH
export LD_LIBRARY_PATH=$HOME/my_exp_soft/lib:$HOME/my_exp_soft/lib64:$LD_LIBRARY_PATH
```
(ノಠ益ಠ)ノ彡┻━┻ **Do not install into the source directories**.
(ノ^_^)ノ┻━┻ ┬─┬ ノ( ^_^ノ)
First you should build evio followed by podd. Here are all the steps:
#### Build EVIO with cmake
```
git clone https://github.com/whit2333/hallac_evio.git
cd hallac_evio
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
#### Build analyzer (PODD)
```
git clone https://github.com/whit2333/analyzer.git
cd analyzer
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
#### Build hcana
```
git clone https://github.com/whit2333/hcana.git
cd hcana
mkdir build && cd build
cmake ../. -DCMAKE_INSTALL_PREFIX=$HOME/my_exp_soft
make -j4 install
```
All done. Now you can run `hcana` and you're off to analyze.
#### Loading the libraries into ROOT
```
// .rootlogon.C
{
gSystem->AddIncludePath(" -Iinclude/podd" );
gSystem->AddIncludePath(" -Iinclude/hcana");
gSystem->AddIncludePath(" -Iinclude/evio" );
gInterpreter->AddIncludePath("include/podd" );
gInterpreter->AddIncludePath("include/hcana");
gInterpreter->AddIncludePath("include/evio" );
gSystem->Load("libevioxx.so");
gSystem->Load("libHallA.so");
gSystem->Load("libdc.so");
gSystem->Load("libHallC.so");
}
```
![libHallC in ROOT](/docs/libHallC_in_root.png)
### Other builds
hcana may be compiled with either make or scons. Switching between these hcana may be compiled with either make or scons. Switching between these
two build systems make require some cleanup of dependency files, binary files two build systems make require some cleanup of dependency files, binary files
and other autogenerated files. and other autogenerated files.
......
@PACKAGE_INIT@
include("@PACKAGE_TARGETS_INSTALL_PATH@")
check_required_components(HCANA)
find_package(PODD REQUIRED)
message(STATUS "Found HCANA")
#get_filename_component(HCANA_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
#include(CMakeFindDependencyMacro)
#
#list(APPEND CMAKE_MODULE_PATH ${HCANA_CMAKE_DIR})
#
## NOTE Had to use find_package because find_dependency does not support COMPONENTS or MODULE until 3.8.0
#
##find_dependency(Boost 1.55 REQUIRED COMPONENTS regex)
##find_dependency(RapidJSON 1.0 REQUIRED MODULE)
##find_package(Boost 1.55 REQUIRED COMPONENTS regex)
##find_package(RapidJSON 1.0 REQUIRED MODULE)
#list(REMOVE_AT CMAKE_MODULE_PATH -1)
#
#if(NOT TARGET HCANA::PODD)
# include("${HCANA_CMAKE_DIR}/PODDTargets.cmake")
#endif()
#
#set(HCANA_LIBRARIES PODD::PODD)
cmake_minimum_required(VERSION 2.8)
# Return the date (yyyy-mm-dd)
macro(DATE RESULT)
if(WIN32)
execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..)/(..)/(....).*" "\\3-\\2-\\1" ${RESULT} ${${RESULT}})
elseif(UNIX)
execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT})
else()
message(SEND_ERROR "Unable to detect date")
set(${RESULT} UNKNOWN)
endif()
endmacro()
# Return the time (hh:mm:ss)
macro(TIME RESULT)
if(WIN32)
execute_process(COMMAND "cmd" " /C echo %TIME%" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..:..:..),(..)" "\\1" ${RESULT} ${${RESULT}})
elseif(UNIX)
execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE ${RESULT})
else()
message(SEND_ERROR "Unable to detect time")
set(${RESULT} UNKNOWN)
endif()
endmacro()
execute_process(COMMAND "date" "+%b:%d:%Y"
OUTPUT_VARIABLE HCANA_BUILD_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "date" "+%a %b %d %H:%M:%S %Z %Y"
OUTPUT_VARIABLE HCANA_BUILD_DATETIME
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(uname -s)-$(uname -r)-$(uname -m)"
OUTPUT_VARIABLE HCANA_PLATFORM
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "uname" "-n"
OUTPUT_VARIABLE HCANA_NODE
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "pwd"
OUTPUT_VARIABLE HCANA_BUILD_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "whoami"
OUTPUT_VARIABLE HCANA_BUILD_USER
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(git rev-parse HEAD 2>/dev/null | cut -c1-7)"
OUTPUT_VARIABLE HCANA_GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(${CMAKE_CXX_COMPILER} --version 2>/dev/null | head -1)"
OUTPUT_VARIABLE HCANA_CXX_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "echo $(root-config --version)"
OUTPUT_VARIABLE HCANA_ROOT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "bash" "-c" "printf '%02d%02d%02d' ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_PATCH}"
OUTPUT_VARIABLE HCANA_VERCODE
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Finds liblz4.
#
# This module defines:
# LZ4_FOUND
# LZ4_INCLUDE_DIR
# LZ4_LIBRARY
#
find_path(LZ4_INCLUDE_DIR NAMES lz4.h)
find_library(LZ4_LIBRARY NAMES lz4)
# We require LZ4_compress_default() which was added in v1.7.0
if (LZ4_LIBRARY)
include(CheckCSourceRuns)
set(CMAKE_REQUIRED_INCLUDES ${LZ4_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${LZ4_LIBRARY})
check_c_source_runs("
#include <lz4.h>
int main() {
int good = (LZ4_VERSION_MAJOR > 1) ||
((LZ4_VERSION_MAJOR == 1) && (LZ4_VERSION_MINOR >= 7));
return !good;
}" LZ4_GOOD_VERSION)
set(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_LIBRARIES)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
LZ4 DEFAULT_MSG
LZ4_LIBRARY LZ4_INCLUDE_DIR LZ4_GOOD_VERSION)
if (NOT LZ4_FOUND)
message(STATUS "Using third-party bundled LZ4")
else()
message(STATUS "Found LZ4: ${LZ4_LIBRARY}")
endif (NOT LZ4_FOUND)
mark_as_advanced(LZ4_INCLUDE_DIR LZ4_LIBRARY)
## OSX/homebrew version of root6 installs its cmake macros in a non-standard
## location. This might be an issue on other systems as well.
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/root/cmake)
endif()
## Get rid of rpath warning on OSX
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_MACOSX_RPATH 1)
endif()
## Override root's ROOT_GENERATE_DICTIONARY macro to be less error-prone. This
## is done by only allowing for explicitly speficied header locations/include
## directories, instead of using the full search path for this module.
function(ROOT_GENERATE_DICTIONARY dictionary)
CMAKE_PARSE_ARGUMENTS(ARG "" "" "INCLUDEDIRS;LINKDEF;OPTIONS" "" ${ARGN})
## Get all include directories
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
set(dirs ${dirs} ${ARG_INCLUDEDIRS})
set(extra_includes "")
foreach(dir ${dirs})
set(extra_includes ${extra_includes} "-I${dir}")
endforeach()
## find and call ROOTCLING
find_program(ROOTCLING rootcling)
add_custom_command(
OUTPUT ${dictionary}.cxx ${dictionary}_rdict.pcm
COMMAND ${ROOTCLING} -f ${dictionary}.cxx -s ${dictionary}.pcm
${ARG_OPTIONS} ${extra_includes} ${ARG_UNPARSED_ARGUMENTS} ${ARG_LINKDEF}
DEPENDS ${includes} ${linkdefs})
endfunction()
docs/libHallC_in_root.png

135 KiB

cmake_minimum_required(VERSION 3.1)
#message(STATUS "Subproject: PODD...")
# Download and unpack gflags at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/PODD.CMakeLists.txt
${CMAKE_BINARY_DIR}/PODD-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
if(result)
message(FATAL_ERROR "CMake step for PODD failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
if(result)
message(FATAL_ERROR "Download step for exteranl PODD build failed: ${result}")
endif()
add_subdirectory(
${CMAKE_BINARY_DIR}/hallac_PODD-src
${CMAKE_BINARY_DIR}/hallac_PODD-build)
#execute_process(COMMAND "rm -r *"
# RESULT_VARIABLE result
# WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/PODD-download)
message(STATUS "Subproject: PODD...DONE")
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
#cmake_policy(SET CMP0053 NEW)
#cmake_policy(SET CMP0010 NEW)
project(PODD-download NONE)
include(ExternalProject)
ExternalProject_Add(PODD_project
GIT_REPOSITORY https://github.com/whit2333/analyzer.git
GIT_TAG origin/master
SOURCE_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/hallac_PODD-build"
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=@CMAKE_INSTALL_PREFIX@" "-DCMAKE_PREFIX_PATH=@CMAKE_INSTALL_PREFIX@"
BUILD_COMMAND ${CMAKE_COMMAND} --build . -- -j4
USES_TERMINAL_BUILD ON
TEST_COMMAND ""
LOG_DOWNLOAD ON
)
ExternalProject_Add_StepTargets(PODD_project install)
#ifndef HCANA_COMPILEDATA_H
#define HCANA_COMPILEDATA_H
#define HC_INCLUDEPATH "@CMAKE_INSTALL_PREFIX@/include"
#define HC_VERSION "@PROJECT_VERSION@"
#define HC_DATE "@HCANA_BUILD_DATE@"
#define HC_DATETIME "@HCANA_BUILD_DATETIME@"
#define HC_PLATFORM "@HCANA_PLATFORM@"
#define HC_BUILDNODE "@HCANA_NODE@"
#define HC_BUILDDIR "@HCANA_BUILD_DIR@"
#define HC_BUILDUSER "@HCANA_BUILD_USER@"
#define HC_GITVERS "@HCANA_GIT_VERSION@"
#define HC_CXXVERS "@HCANA_CXX_VERSION@"
#define HC_ROOTVERS "@HCANA_ROOT_VERSION@"
#define HCANA_VERSION_CODE @HCANA_VERCODE@
#define HCANA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#endif
// Example:
//#ifndef ANALYZER_COMPILEDATA_H
//#define ANALYZER_COMPILEDATA_H
//
//#define HA_INCLUDEPATH "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/src /mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA/hana_decode"
//#define HA_VERSION "1.6.0"
//#define HA_DATE "Jun 26 2018"
//#define HA_DATETIME "Tue Jun 26 2018"
//#define HA_PLATFORM "Linux-4.13.0-45-generic-x86_64-with-Ubuntu-17.10-artful"
//#define HA_BUILDNODE "wpad"
//#define HA_BUILDDIR "/mnt/old_home/whit/projects/hall_AC_projects/hcana/HCANA"
//#define HA_BUILDUSER "whit"
//#define HA_GITVERS "5b48832"
//#define HA_CXXVERS "c++ (GCC) 8.1.0"
//#define HA_ROOTVERS "6.15/01"
//#define ANALYZER_VERSION_CODE 67072
//#define ANALYZER_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
//
//#endif
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#pragma link off all classes; #pragma link off all classes;
#pragma link off all functions; #pragma link off all functions;
#pragma link C++ nestedclass; #pragma link C++ nestedclass;
#pragma link C++ nestedtypedef; #pragma link C++ nestedtypedef;
...@@ -56,7 +55,6 @@ ...@@ -56,7 +55,6 @@
#pragma link C++ class THcRawHit+; #pragma link C++ class THcRawHit+;
#pragma link C++ class THcRawHodoHit+; #pragma link C++ class THcRawHodoHit+;
#pragma link C++ class THcRawShowerHit+; #pragma link C++ class THcRawShowerHit+;
#pragma link C++ class THcRawShowerHit+;
#pragma link C++ class THcRawTdcHit+; #pragma link C++ class THcRawTdcHit+;
#pragma link C++ class THcReactionPoint+; #pragma link C++ class THcReactionPoint+;
#pragma link C++ class THcRun+; #pragma link C++ class THcRun+;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment