-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup_cpp.py
76 lines (58 loc) · 2.76 KB
/
setup_cpp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Copyright 2015 CERN. This software is distributed under the
# terms of the GNU General Public Licence version 3 (GPL Version 3),
# copied verbatim in the file LICENCE.md.
# In applying this licence, CERN does not waive the privileges and immunities
# granted to it by virtue of its status as an Intergovernmental Organization or
# submit itself to any jurisdiction.
# Project website: http://blond.web.cern.ch/
'''
@author: Danilo Quartullo
'''
# MAKE SURE YOU HAVE GCC 4.8.1 OR LATER VERSIONS ON YOUR SYSTEM LINKED TO YOUR
# SYSTEM PATH.IF YOU ARE ON CERN-LXPLUS YOU CAN TYPE FROM CONSOLE
# source /afs/cern.ch/sw/lcg/contrib/gcc/4.8.1/x86_64-slc6/setup.sh
# TO GET GCC 4.8.1 64 BIT. IN GENERAL IT IS ADVISED TO USE PYTHON 64 BIT PLUS
# GCC 64 BIT.
import os
import sys
import subprocess
import ctypes
# CHOOSE THE FLAG THAT YOU WANT
# EXAMPLE FLAGS: -Ofast -std=c++11 -fopt-info-vec
# -mfma4 -fopenmp
flags = '-Ofast -std=c++11 -fopt-info-vec' #-ftree-vectorizer-verbose=1' #-fopt-info-vec'
# CHOOSE THE cpp FILES THAT YOU WANT TO COMPILE
list_cpp_files = 'cpp_routines/histogram.cpp cpp_routines/kick.cpp cpp_routines/drift.cpp cpp_routines/linear_interp_kick.cpp toolbox/tomoscope.cpp'
# DON'T TOUCH THE CODE FROM HERE TILL THE END OF THIS SCRIPT!
if __name__ == "__main__":
if "lin" in sys.platform:
subprocess.Popen("rm -rf cpp_routines/*.so", shell = True, executable = "/bin/bash")
x = os.getcwd()
os.system('g++ -o '+ x +'/cpp_routines/result.so -shared ' + flags + ' -fPIC ' + x + '/' + list_cpp_files)
print ""
print ""
print "IF THE COMPILATION IS CORRECT A FILE NAMED result.so SHOULD APPEAR IN THE cpp_routines FOLDER."
print "OTHERWISE YOU HAVE TO CORRECT THE ERRORS AND COMPILE AGAIN."
sys.exit()
elif "win" in sys.platform:
os.system('gcc --version')
os.system('del /s/q '+ os.getcwd() +'\\cpp_routines\\*.dll')
x = os.getcwd()
os.system('g++ -o '+ x +'\\cpp_routines\\result.dll -shared ' + flags + ' ' + x + '\\' + list_cpp_files)
print ""
print ""
print "IF THE COMPILATION IS CORRECT A FILE NAMED result.dll SHOULD APPEAR IN THE cpp_routines FOLDER."
print "OTHERWISE YOU HAVE TO CORRECT THE ERRORS AND COMPILE AGAIN."
sys.exit()
else:
print "YOU DO NOT HAVE A WINDOWS OR LINUX OPERATING SYSTEM. ABORTING..."
sys.exit()
path = os.path.realpath(__file__)
parent_path = os.sep.join(path.split(os.sep)[:-1])
if "lin" in sys.platform:
libfib=ctypes.CDLL(parent_path+'/cpp_routines/result.so')
elif "win" in sys.platform:
libfib=ctypes.CDLL(parent_path+'\\cpp_routines\\result.dll')
else:
print "YOU DO NOT HAVE A WINDOWS OR LINUX OPERATING SYSTEM. ABORTING..."
sys.exit()