PyXMake Developer Guide 1.0
PyXMake
Loading...
Searching...
No Matches
java.py
1# -*- coding: utf-8 -*-
2# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3# % PyXMake - Build environment for PyXMake %
4# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5"""
6Triple-use minimum working example for PyXMake. This script can be
7executed in three different ways in varying levels of accessibility
8
9@note: Compile the BoxBeam & MCODAC for Java applications
10 using Intel Fortran and Java Native Access (JNA)
11Created on 20.03.2018
12
13@version: 1.0
14----------------------------------------------------------------------------------------------
15@requires:
16 - PyXMake
17
18@change:
19 -
20
21@author: garb_ma [DLR-FA,STM Braunschweig]
22----------------------------------------------------------------------------------------------
23"""
24import os, sys
25import argparse
26
27try:
28 import PyXMake as _
29except ImportError:
30 # Script is executed as a plug-in
31 sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
32finally:
33 from PyXMake.Build import Make as pyx #@UnresolvedImport
34 from PyXMake.Tools import Utility #@UnresolvedImport
35 from PyXMake import VTL #@UnresolvedImport
36
37 # Predefined script local variables
38 __arch = Utility.GetArchitecture()
39
40try:
41 # Import PyCODAC to build library locally during setup.
42 from PyCODAC.Tools.Utility import GetPyCODACPath
43 # Import and set local path to PyCODAC
44 __mcd_core_path = os.path.join(GetPyCODACPath(),"Core")
45except ImportError:
46 # This script is not executed as plug-in
47 __mcd_core_path = ""
48except:
49 # Something else went wrong.
50 from PyXMake.Tools import ErrorHandling
52
53def main(
54 BuildID,
55 # Build MCODAC by default
56 files=VTL.GetSourceCode(0),
57 command = VTL.GetBuildCommand(1),
58 libs = VTL.GetLinkDependency(0, 1, __arch),
59 # Resource paths
60 source=os.path.join(__mcd_core_path,"src"),
61 include=[os.path.join(__mcd_core_path,"include",Utility.GetPlatform(),__arch, x) for x in VTL.GetIncludeDirectory(__mcd_core_path, 0, 4, __arch)],
62 dependency=os.path.join(__mcd_core_path,"lib",Utility.GetPlatform(),__arch),
63 output=os.path.join(__mcd_core_path,"bin",Utility.GetPlatform(),__arch),
64 # Architecture, verbose and scratch directory
65 architecture=__arch,scratch=VTL.Scratch, verbosity=2):
66 """
67 Main function to execute the script.
68 """
69 # Build a shared library using the Intel Fortran Compiler
70 FBuild = pyx.Fortran(BuildID, files, scratch=scratch, msvsc='vs2015', arch=architecture, verbose=verbosity, lib='shared')
71 FBuild.SourcePath(source)
72 FBuild.OutputPath(libpath=output)
73 FBuild.AddIncludePath(include)
74 FBuild.AddDependencyPath(dependency)
75 FBuild.UseLibraries(libs)
76 FBuild.Preprocessing(inend='.for', outend='.f90')
77 FBuild.Build(command)
78 FBuild.create()
79
80if __name__ == "__main__":
81# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82# % Access command line inputs %
83# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84 parser = argparse.ArgumentParser(description="Build a static Fortran library remotely on the institute cluster")
85 parser.add_argument("user", metavar="user", nargs=1, help="Current user for SSH connection")
86 parser.add_argument("key", metavar="key", nargs=1, help="Path to private SSH key")
87 parser.add_argument("source_path", metavar="source", nargs=1, help="Directory containing all source files")
88 parser.add_argument("feature_path", metavar="feature", nargs=1, help="Directory containing the feature source file \
89 (in dependence of requested feature: ABAQUS, ANSYS, NASTRAN.")
90
91 try:
92 _ = sys.argv[1]
93 args, _ = parser.parse_known_args()
94 # Extract command line option to identify the requested make operation
95 make_opt = args.make[0]
96 except:
97 # This is the default build option
98 make_opt = -1
99 # Build all supported features
100 if make_opt == -1:
101
102 # Build BoxBeam for Java applications (Fortran shared library).
103 BuildID = 'bbeam_java';
104 main(BuildID, files=VTL.GetSourceCode(1), source=os.path.join(__mcd_core_path,"external","boxbeam"),
105 include=[], dependency=[], libs=[])
106
107 # Build MCODAC for Java applications (Fortran shared library). Default settings.
108 BuildID = 'mcd_java'; main(BuildID)
109 else:
110 # This is not implemented yet
111 raise NotImplementedError
112
113 # Finish
114 print("==================================")
115 print("Finished build for Java")
116 print("==================================")
117 sys.exit()
Base class for all input errors.
Module containing all relevant modules and scripts associated with the building process.
Definition __init__.py:1
Module containing basic functionalities defined for convenience.
Definition __init__.py:1
main(BuildID, files=VTL.GetSourceCode(0), command=VTL.GetBuildCommand(1), libs=VTL.GetLinkDependency(0, 1, __arch), source=os.path.join(__mcd_core_path,"src"), include=[os.path.join(__mcd_core_path,"include", Utility.GetPlatform(), __arch, x) for x in VTL.GetIncludeDirectory(__mcd_core_path, 0, 4, __arch)], dependency=os.path.join(__mcd_core_path,"lib", Utility.GetPlatform(), __arch), output=os.path.join(__mcd_core_path,"bin", Utility.GetPlatform(), __arch), architecture=__arch, scratch=VTL.Scratch, verbosity=2)
Definition java.py:65