2151ba38a5cc41a639f8459cdede5036250f0b64
[libcds.git] / build / CI / cmake-gen
1 #! /usr/bin/perl
2
3 my $compiler=shift;
4 my $bitness =shift;
5 my $build   =shift;
6 $build="rel" unless $build;
7
8 my $cmake_build="RELEASE";
9 $cmake_build="DEBUG" if $build eq 'dbg';
10
11 my $cds_libs="cds-libs";
12
13 # get generic props
14 my $workspace=get_gen_prop("workspace") || "$HOME";
15 my $cds_source=get_gen_prop("libcds-source") || "../libcds";
16 my $make_jobs=get_gen_prop("make-job") || 2;
17
18 # get compiler-specific props
19 my $comp_root=get_prop("root");
20 my $boost=get_prop( "boost" );
21 my $boost_libs=get_prop( "boost-lib" );
22 my $gtest=get_prop("gtest");
23 my $gtest_lib=get_prop( "gtest-lib");
24 my $gtest_inc=get_prop("gtest-include") || get_gen_prop("gtest-include");
25 my $cxx=get_prop("cxx") or $compiler;
26 my $cc=get_prop("cc") or $compiler;
27 my $cxxflags=get_prop("cxxflags");
28 my $ldflags=get_prop("ldflags");
29 my $ext_lib=get_prop("extlib");
30 my $ld_lib_path=get_prop("ld-lib-path");
31
32
33 my $filename="cds-$build-$compiler-$bitness";
34 open( my $out, ">", $filename )  or die "Cannot open cds-$build-$compiler-$bitness";
35
36 print $out "#! /bin/sh\n\n";
37 #print $out "PATH=$comp_root:\$PATH\n" if $comp_root;
38 #print $out "BOOST_ROOT=$boost\n";
39 print $out "root=$workspace\n";
40 print $out "CDS_SOURCE=\$root/$cds_source\n";
41 print $out "OBJ_ROOT=\$root/obj\n";
42 print $out "BIN_ROOT=\$root/bin\n";
43 print $out "GTEST_ROOT=$gtest\n" if $gtest;
44 print $out "\n";
45 print $out "rm -fr \$OBJ_ROOT\n";
46 print $out "rm -fr \$BIN_ROOT\n";
47 print $out "mkdir -p \$OBJ_ROOT\n";
48 print $out "#cp -f run-ctest-rel \$OBJ_ROOT/run-ctest\n" if $build eq 'rel';
49 print $out "#cp -f run-ctest-dbg \$OBJ_ROOT/run-ctest\n" unless $build eq 'rel';
50 print $out "cd \$OBJ_ROOT\n";
51 print $out "\n";
52 #print $out "PATH=$comp_root:\$PATH \\\n" if $comp_root;
53 print $out "LD_LIBRARY_PATH=$ld_lib_path:\$LD_LIBRARY_PATH \\\n" if $ld_lib_path;
54 #print $out "CXX=$cxx \\\n";
55 #print $out "CC=$cc \\\n";
56 #print $out "CXXFLAGS=\"$cxxflags\" \\\n" if $cxxflags;
57 print $out "LDFLAGS=\"$ldflags\" \\\n" if $ldflags;
58 #print $out "GTEST_ROOT=\$GTEST_ROOT/$gtest_libs \\\n";
59 print $out "cmake -G \"Unix Makefiles\" \\\n";
60 print $out " -DCMAKE_BUILD_TYPE=$cmake_build \\\n";
61 print $out " -DCMAKE_C_COMPILER=$comp_root/$cc \\\n";
62 print $out " -DCMAKE_CXX_COMPILER=$comp_root/$cxx \\\n";
63 print $out " -DCMAKE_CXX_FLAGS=\"$cxxflags\" \\\n" if $cxxflags;
64 print $out " -DCDS_BIN_DIR=\$BIN_ROOT \\\n";
65 print $out " -DWITH_TESTS=ON \\\n";
66 print $out " -DWITH_ASAN=ON \\\n" if $build eq 'asan';
67 print $out " -DWITH_TSAN=ON \\\n" if $build eq 'tsan';
68 print $out " -DBOOSTROOT=$boost \\\n";
69 print $out " -DBOOST_LIBRARYDIR=\$BOOST_ROOT/$boost_libs \\\n" if $boost_libs;
70 print $out " -DGTEST_INCLUDE_DIRS=$gtest_inc \\\n" if $gtest_inc;
71 print $out " -DGTEST_LIBRARY=$gtest_lib \\\n" if $gtest_lib;
72 print $out " -DEXTERNAL_SYSTEM_LIBS=\"$ext_lib\" \\\n" if $ext_lib;
73 print $out " \$CDS_SOURCE && \\\n";
74 print $out "make -j $make_jobs \$* \n";
75
76 close $out;
77 chmod 0755, $filename;
78
79 sub get_prop($@)
80 {
81    my $what=shift;
82    my $key="$compiler-$bitness-$build-$what:";
83
84    my $grep = `grep -P $key $cds_libs`;
85    if ( $grep ) {
86       my @ret = $grep =~ /^$key\s+(\S.*\S*)\s+/;
87       return $ret[0] if @ret;
88    }
89
90    $key = "$compiler-$bitness-$what:";
91    my $grep = `grep -P $key $cds_libs`;
92    if ( $grep ) {
93       my @ret = $grep =~ /^$key\s+(\S.*\S*)\s+/;
94       return $ret[0] if @ret;
95    }
96
97    $key = "$compiler-$what:";
98    my $grep = `grep -P $key $cds_libs`;
99    if ( $grep ) {
100       my @ret = $grep =~ /^$key\s+(\S.*\S*)\s+/;
101       return $ret[0] if @ret;
102    }
103 }
104
105 sub get_gen_prop($@)
106 {
107    my $key=shift;
108    $key = "$key:";
109
110    my $grep = `grep -P $key $cds_libs`;
111    if ( $grep ) {
112       my @ret = $grep =~ /^$key\s+(\S.*\S*)\s+/;
113       return $ret[0] if @ret;
114    }
115 }