Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make pcms for tinyxml and clhep #5862

Merged
merged 3 commits into from
May 26, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmssw-tool-conf.spec
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ Requires: OpenBLAS-toolfile
Requires: mxnet-predict-toolfile
Requires: mkfit-toolfile
Requires: dablooms-toolfile
Requires: pcm_util-toolfile

# Only for Linux platform.
%ifos linux
Expand Down
20 changes: 20 additions & 0 deletions pcm_util-toolfile.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
### RPM external pcm_util-toolfile 1.0
Requires: pcm_util
%prep

%build

%install

mkdir -p %i/etc/scram.d
cat << \EOF_TOOLFILE >%i/etc/scram.d/pcm_util.xml
<tool name="pcm_util" version="@TOOL_VERSION@">
<client>
<environment name="PCM_UTIL_BASE" default="@TOOL_ROOT@"/>
<environment name="INCLUDE" default="$PCM_UTIL_BASE/include"/>
</client>
</tool>
EOF_TOOLFILE

## IMPORT scram-tools-post

30 changes: 30 additions & 0 deletions pcm_util.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
### RPM external pcm_util 1.0

Source: none
BuildRequires: root clhep tinyxml2

%prep


%build

rm -f empty.h
rm -f dummy.modulemap

touch empty.h
echo "module Dummy{}" > dummy.modulemap

rm -f dummy_dict.cc
rm -f libDummy.so
rootcling dummy_dict.cc -moduleMapFile=${CLHEP_ROOT}/include/module.modulemap -s ./libDummy.so -moduleMapFile=dummy.modulemap -cxxmodule -m clhep -mByproduct clhep -I ${CLHEP_ROOT}/include/ empty.h

rm -f dummy_dict.cc
rm -f libDummy.so
rootcling dummy_dict.cc -s ./libDummy.so -moduleMapFile=dummy.modulemap -cxxmodule -m tinyxml2 -mByproduct tinyxml2 -I ${TINYXML2_ROOT}/include/ empty.h


%install

mkdir %{i}/include
cp clhep.pcm %{i}/include/.
cp tinyxml2.pcm %{i}/include/.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly PCM resides in the lib directory, so I would suggest to copy them to lib directory and use LIBDIR in toolfile too.

@vgvassilev , If I remember correctly, there was some restrictions about having libNAME.so and NAME.pcm in same directory (may be that is only for root dictionaries). So in case of these (clhep and tinyxml) PCMs do we need a library with same name in lib directory?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, they should not be connected to any library/dictionary.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also I think llvm finds PCMs via CLING_PREBUILT_MODULE_PATH ... right @vgvassilev ? I guess we need to set CLING_PREBUILT_MODULE_PATH in toolfile too

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, usually we do. In those particular case tinyxml2 and clhep depend only on libc and std (afaik) which will be loaded by default by rootcling -- we should be safe without that variable I think.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

without the variable how will llvm know about these pcms?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for cmssw, we set CLING_PREBUILT_MODULE_PATH (pointing to CMSSW_BASE/lib/arch:CMSSW_RELEASE/BASE/lib/arch ) so that already build pcms are visible to clang.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@smuzaffar - how do I add a PATH like variable to the tool file? Or does scram magically know that this variable is a PATH like variable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

without the variable how will llvm know about these pcms?

If you mean how rootcling will find libc.pcm and std.pcm -- you are right in that case we need that variable pointing to the location of those.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@smuzaffar - how do I add a PATH like variable to the tool file? Or does scram magically know that this variable is a PATH like variable?

just like https://github.com/cms-sw/cmsdist/blob/IB/CMSSW_11_2_X/master/clhep-toolfile.spec#L20 i.e. add type="path"

I think you do not need LIBDIR or LD_LIBRARY_PATH for this tool. Just add

<runtime name="CLING_PREBUILT_MODULE_PATH" value="$PCM_UTIL_BASE/lib" type="path"/>