diff options
author | Hanoh Haim <hhaim@cisco.com> | 2015-07-02 13:35:47 +0300 |
---|---|---|
committer | Hanoh Haim <hhaim@cisco.com> | 2015-07-02 13:35:47 +0300 |
commit | 01c3340c77f6578e052eb60ab890b4b071fdd564 (patch) | |
tree | cf2bb0e7e778fd45eacf1c6a8e0a2210144eb4ec /linux/ws_main.py | |
parent | ca98e9e5f0c053a2180e4b7b780b1cc1c17f4eb2 (diff) |
clean up makefiles, after more eyes look into it
Diffstat (limited to 'linux/ws_main.py')
-rwxr-xr-x | linux/ws_main.py | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/linux/ws_main.py b/linux/ws_main.py new file mode 100755 index 00000000..93ed02b8 --- /dev/null +++ b/linux/ws_main.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python +# encoding: utf-8 + +# Hanoh Haim +# Cisco Systems, Inc. + + +VERSION='0.0.1' +APPNAME='cxx_test' +import os; +import commands; +import shutil; +import copy; + +top = '../' +out = 'build' +b_path ="./build/linux/" + + +class SrcGroup: + ' group of source by directory ' + + def __init__(self,dir,src_list): + self.dir = dir; + self.src_list = src_list; + self.group_list = None; + assert (type(src_list)==list) + assert (type(dir)==str) + + def file_list (self,top): + ' return the long list of the files ' + res='' + for file in self.src_list: + res= res + top+'/'+self.dir+'/'+file+' '; + return res; + + def __str__ (self): + return (self.file_list('')); + + def __repr__ (self): + return (self.file_list('')); + + + +class SrcGroups: + ' group of source groups ' + + def __init__(self,list_group): + self.list_group = list_group; + assert (type(list_group)==list) + + + def file_list (self,top): + ' return the long list of the files ' + res='' + for o in self.list_group: + res += o.file_list(top); + return res; + + + def __str__ (self): + return (self.file_list('')); + + def __repr__ (self): + return (self.file_list('')); + + +def options(opt): + opt.load('compiler_cxx') + +def configure(conf): + conf.load('g++') + + +main_src = SrcGroup(dir='src', + src_list=[ + 'main.cpp', + 'bp_sim.cpp', + 'bp_gtest.cpp', + 'os_time.cpp', + 'rx_check.cpp', + 'tuple_gen.cpp', + 'platform_cfg.cpp', + 'utl_yaml.cpp', + 'rx_check_header.cpp', + 'nat_check.cpp', + 'timer_wheel_pq.cpp', + 'time_histogram.cpp', + 'utl_json.cpp', + 'utl_cpuu.cpp', + 'msg_manager.cpp', + 'gtest/tuple_gen_test.cpp', + 'gtest/nat_test.cpp', + + 'pal/linux/pal_utl.cpp', + 'pal/linux/mbuf.cpp' + ]); + +cmn_src = SrcGroup(dir='src/common', + src_list=[ + 'gtest-all.cc', + 'gtest_main.cc', + 'basic_utils.cpp', + 'captureFile.cpp', + 'erf.cpp', + 'pcap.cpp' + ]); + + +net_src = SrcGroup(dir='src/common/Network/Packet', + src_list=[ + 'CPktCmn.cpp', + 'EthernetHeader.cpp', + 'IPHeader.cpp', + 'TCPHeader.cpp', + 'TCPOptions.cpp', + 'UDPHeader.cpp', + 'MacAddress.cpp', + 'VLANHeader.cpp']); + +yaml_src = SrcGroup(dir='yaml-cpp/src/', + src_list=[ + 'aliasmanager.cpp', + 'binary.cpp', + 'contrib/graphbuilder.cpp', + 'contrib/graphbuilderadapter.cpp', + 'conversion.cpp', + 'directives.cpp', + 'emitfromevents.cpp', + 'emitter.cpp', + 'emitterstate.cpp', + 'emitterutils.cpp', + 'exp.cpp', + 'iterator.cpp', + 'node.cpp', + 'nodebuilder.cpp', + 'nodeownership.cpp', + 'null.cpp', + 'ostream.cpp', + 'parser.cpp', + 'regex.cpp', + 'scanner.cpp', + 'scanscalar.cpp', + 'scantag.cpp', + 'scantoken.cpp', + 'simplekey.cpp', + 'singledocparser.cpp', + 'stream.cpp', + 'tag.cpp']); + +bp =SrcGroups([ + main_src, + cmn_src , + net_src , + yaml_src + ]); + + +cxxflags_base =['-DWIN_UCODE_SIM', + '-D_BYTE_ORDER', + '-D_LITTLE_ENDIAN', + '-DLINUX', + '-g', + ]; + + + + +includes_path =''' ../src/pal/linux/ + ../src/ + ../yaml-cpp/include/ + '''; + + + + + +RELEASE_ = "release" +DEBUG_ = "debug" +PLATFORM_64 = "64" +PLATFORM_32 = "32" + + +class build_option: + + def __init__(self,platform,debug_mode,is_pie): + self.mode = debug_mode; ##debug,release + self.platform = platform; #['32','64'] + self.is_pie = is_pie + + def __str__(self): + s=self.mode+","+self.platform; + return (s); + + def lib_name(self,lib_name_p,full_path): + if full_path: + return b_path+lib_name_p; + else: + return lib_name_p; + #private functions + def toLib (self,name,full_path = True): + lib_n = "lib"+name+".a"; + return (self.lib_name(lib_n,full_path)); + + def toExe(self,name,full_path = True): + return (self.lib_name(name,full_path)); + + def is64Platform (self): + return ( self.platform == PLATFORM_64); + + def isRelease (self): + return ( self.mode == RELEASE_); + + def isPIE (self): + return self.is_pie + + def update_executable_name (self,name): + return self.update_name(name,"-") + + def update_non_exe_name (self,name): + return self.update_name(name,"_") + + def update_name (self,name,delimiter): + trg = copy.copy(name); + if self.is64Platform(): + trg += delimiter + "64"; + else: + trg += delimiter + "32"; + + if self.isRelease () : + trg += ""; + else: + trg += delimiter + "debug"; + + if self.isPIE(): + trg += delimiter + "pie" + return trg; + + def cxxcomp_flags (self,flags): + result = copy.copy(flags); + if self.is64Platform () : + result+=['-m64']; + else: + result+=['-m32']; + + if self.isRelease () : + result+=['-O2']; + else: + result+=['-O0','-DDEBUG','-D_DEBUG','-DSTILE_CPP_ASSERT','-DSTILE_SHIM_ASSERT']; + + if self.isPIE(): + result += ['-fPIE', '-DPATCH_FOR_PIE'] + + return result; + + def get_target (self): + return self.update_executable_name("bp-sim"); + + def get_flags (self): + return self.cxxcomp_flags(cxxflags_base); + + def get_link_flags(self): + # add here basic flags + base_flags = ['-lpthread']; + if self.isPIE(): + base_flags.append('-lstdc++') + + #platform depended flags + + if self.is64Platform(): + base_flags += ['-m64']; + else: + base_flags += ['-lrt']; + if self.isPIE(): + base_flags += ['-pie', '-DPATCH_FOR_PIE'] + + return base_flags; + + def get_exe (self,full_path = True): + return self.toExe(self.get_target(),full_path); + + +build_types = [ + build_option(debug_mode= DEBUG_, platform = PLATFORM_32, is_pie = False), + build_option(debug_mode= DEBUG_, platform = PLATFORM_64, is_pie = False), + build_option(debug_mode= RELEASE_,platform = PLATFORM_32, is_pie = False), + build_option(debug_mode= RELEASE_,platform = PLATFORM_64, is_pie = False), + ] + + + +def build_prog (bld, build_obj): + bld.program(features='cxx cxxprogram', + includes =includes_path, + cxxflags =build_obj.get_flags(), + stlib = 'stdc++', + linkflags = build_obj.get_link_flags(), + source = bp.file_list(top), + target = build_obj.get_target()) + + +def build_type(bld,build_obj): + build_prog(bld, build_obj); + + +def post_build(bld): + print "copy objects" + exec_p ="../scripts/" + for obj in build_types: + install_single_system(bld, exec_p, obj); + +def build(bld): + bld.add_post_fun(post_build); + for obj in build_types: + build_type(bld,obj); + + +def build_info(bld): + pass; + +def install_single_system (bld, exec_p, build_obj): + o='build/linux/'; + src_file = os.path.realpath(o+build_obj.get_target()) + if os.path.exists(src_file): + dest_file = exec_p +build_obj.get_target() + if not os.path.lexists(dest_file): + relative_path = os.path.relpath(src_file, exec_p) + os.symlink(relative_path, dest_file); + + + + |