|  | 
| 132 | 132 |          "JavaScript code executed in nodejs. This feature is only available " | 
| 133 | 133 |          "for x32, x86, and x64 architectures.") | 
| 134 | 134 | 
 | 
|  | 135 | +parser.add_option("--enable-pgo-generate", | 
|  | 136 | +    action="store_true", | 
|  | 137 | +    dest="enable_pgo_generate", | 
|  | 138 | +    help="Enable profiling with pgo of a binary. This feature is only available " | 
|  | 139 | +         "on linux with gcc and g++ 5.4.1 or newer.") | 
|  | 140 | + | 
|  | 141 | +parser.add_option("--enable-pgo-use", | 
|  | 142 | +    action="store_true", | 
|  | 143 | +    dest="enable_pgo_use", | 
|  | 144 | +    help="Enable use of the profile generated with --enable-pgo-generate. This " | 
|  | 145 | +         "feature is only available on linux with gcc and g++ 5.4.1 or newer.") | 
|  | 146 | + | 
| 135 | 147 | parser.add_option("--enable-lto", | 
| 136 | 148 |     action="store_true", | 
| 137 | 149 |     dest="enable_lto", | 
| 138 | 150 |     help="Enable compiling with lto of a binary. This feature is only available " | 
| 139 |  | -         "on linux with gcc and g++.") | 
|  | 151 | +         "on linux with gcc and g++ 5.4.1 or newer.") | 
| 140 | 152 | 
 | 
| 141 | 153 | parser.add_option("--link-module", | 
| 142 | 154 |     action="append", | 
| @@ -887,6 +899,16 @@ def configure_mips(o): | 
| 887 | 899 |   o['variables']['mips_fpu_mode'] = options.mips_fpu_mode | 
| 888 | 900 | 
 | 
| 889 | 901 | 
 | 
|  | 902 | +def gcc_version_ge(version_checked): | 
|  | 903 | +  for compiler in [(CC, 'c'), (CXX, 'c++')]: | 
|  | 904 | +    ok, is_clang, clang_version, compiler_version = \ | 
|  | 905 | +      try_check_compiler(compiler[0], compiler[1]) | 
|  | 906 | +    compiler_version_num = tuple(map(int, compiler_version)) | 
|  | 907 | +    if is_clang or compiler_version_num < version_checked: | 
|  | 908 | +      return False | 
|  | 909 | +  return True | 
|  | 910 | + | 
|  | 911 | + | 
| 890 | 912 | def configure_node(o): | 
| 891 | 913 |   if options.dest_os == 'android': | 
| 892 | 914 |     o['variables']['OS'] = 'android' | 
| @@ -931,22 +953,41 @@ def configure_node(o): | 
| 931 | 953 |   else: | 
| 932 | 954 |     o['variables']['node_enable_v8_vtunejit'] = 'false' | 
| 933 | 955 | 
 | 
|  | 956 | +  if flavor != 'linux' and (options.enable_pgo_generate or options.enable_pgo_use): | 
|  | 957 | +    raise Exception( | 
|  | 958 | +      'The pgo option is supported only on linux.') | 
|  | 959 | + | 
|  | 960 | +  if flavor == 'linux': | 
|  | 961 | +    if options.enable_pgo_generate or options.enable_pgo_use: | 
|  | 962 | +      version_checked = (5, 4, 1) | 
|  | 963 | +      if not gcc_version_ge(version_checked): | 
|  | 964 | +        version_checked_str = ".".join(map(str, version_checked)) | 
|  | 965 | +        raise Exception( | 
|  | 966 | +          'The options --enable-pgo-generate and --enable-pgo-use ' | 
|  | 967 | +          'are supported for gcc and gxx %s or newer only.' % (version_checked_str)) | 
|  | 968 | + | 
|  | 969 | +    if options.enable_pgo_generate and options.enable_pgo_use: | 
|  | 970 | +      raise Exception( | 
|  | 971 | +        'Only one of the --enable-pgo-generate or --enable-pgo-use options ' | 
|  | 972 | +        'can be specified at a time. You would like to use ' | 
|  | 973 | +        '--enable-pgo-generate first, profile node, and then recompile ' | 
|  | 974 | +        'with --enable-pgo-use') | 
|  | 975 | + | 
|  | 976 | +  o['variables']['enable_pgo_generate'] = b(options.enable_pgo_generate) | 
|  | 977 | +  o['variables']['enable_pgo_use']      = b(options.enable_pgo_use) | 
|  | 978 | + | 
| 934 | 979 |   if flavor != 'linux' and (options.enable_lto): | 
| 935 | 980 |     raise Exception( | 
| 936 | 981 |       'The lto option is supported only on linux.') | 
| 937 | 982 | 
 | 
| 938 | 983 |   if flavor == 'linux': | 
| 939 | 984 |     if options.enable_lto: | 
| 940 | 985 |       version_checked = (5, 4, 1) | 
| 941 |  | -      for compiler in [(CC, 'c'), (CXX, 'c++')]: | 
| 942 |  | -        ok, is_clang, clang_version, compiler_version = \ | 
| 943 |  | -          try_check_compiler(compiler[0], compiler[1]) | 
| 944 |  | -        compiler_version_num = tuple(map(int, compiler_version)) | 
| 945 |  | -        if is_clang or compiler_version_num < version_checked: | 
| 946 |  | -          version_checked_str = ".".join(map(str, version_checked)) | 
| 947 |  | -          raise Exception( | 
| 948 |  | -            'The option --enable-lto is supported for gcc and gxx %s' | 
| 949 |  | -            ' or newer only.' % (version_checked_str)) | 
|  | 986 | +      if not gcc_version_ge(version_checked): | 
|  | 987 | +        version_checked_str = ".".join(map(str, version_checked)) | 
|  | 988 | +        raise Exception( | 
|  | 989 | +          'The option --enable-lto is supported for gcc and gxx %s' | 
|  | 990 | +          ' or newer only.' % (version_checked_str)) | 
| 950 | 991 | 
 | 
| 951 | 992 |   o['variables']['enable_lto'] = b(options.enable_lto) | 
| 952 | 993 | 
 | 
|  | 
0 commit comments