108 lines
2.2 KiB
Python
108 lines
2.2 KiB
Python
# Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights
|
|
# reserved. Use of this source code is governed by a BSD-style license that
|
|
# can be found in the LICENSE file.
|
|
#
|
|
# Resort order of object files in libcef.ninja file.
|
|
#
|
|
# See: https://bitbucket.org/chromiumembedded/cef/issues/1999
|
|
#
|
|
# Usage:
|
|
# import issue_1999
|
|
# issue_1999.apply(output_path)
|
|
#
|
|
from __future__ import absolute_import
|
|
from __future__ import print_function
|
|
from io import open
|
|
import sys
|
|
import os
|
|
|
|
module_order = [
|
|
"_sse",
|
|
"-sse",
|
|
"_ssse",
|
|
"-ssse",
|
|
"_sse2",
|
|
"-sse2",
|
|
"_ssse2",
|
|
"-ssse2",
|
|
"_sse3",
|
|
"-sse3",
|
|
"_ssse3",
|
|
"-ssse3",
|
|
"_sse4",
|
|
"-sse4",
|
|
"_ssse4",
|
|
"-ssse4",
|
|
"_avx",
|
|
"-avx",
|
|
"_savx",
|
|
"-savx",
|
|
"_avx1",
|
|
"-avx1",
|
|
"_savx1",
|
|
"-savx1",
|
|
"_avx2",
|
|
"-avx2",
|
|
"_savx2",
|
|
"-savx2",
|
|
]
|
|
|
|
|
|
def get_obj_class(item):
|
|
item = item.lower()
|
|
for i in range(len(module_order) - 1, -1, -1):
|
|
x = module_order[i]
|
|
if x in item:
|
|
return 1 + i
|
|
return 0
|
|
|
|
|
|
def obj_compare(x, y):
|
|
xc = get_obj_class(x)
|
|
yc = get_obj_class(y)
|
|
if xc < yc:
|
|
return -1
|
|
elif xc > yc:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
|
|
def process_line(line):
|
|
if line.startswith("build ./libcef.dll ./libcef.dll.lib: solink "):
|
|
index = line.find("solink")
|
|
if index >= 0:
|
|
part1 = line[0:index + 6]
|
|
part2 = line[index + 6:]
|
|
stampsIndex = part2.find("||")
|
|
stamps = part2[stampsIndex:]
|
|
objects = part2[:stampsIndex]
|
|
|
|
objects_list = objects.split()
|
|
objects_list = sorted(objects_list, cmp=obj_compare)
|
|
return part1 + " " + " ".join(objects_list) + " " + stamps
|
|
return line
|
|
|
|
|
|
def process_file(path):
|
|
print("Applying issue #1999 fix to " + path)
|
|
|
|
with open(path, 'r', encoding='utf-8') as f:
|
|
content = f.read().splitlines()
|
|
|
|
result = []
|
|
|
|
for line in content:
|
|
result.append(process_line(line))
|
|
|
|
with open(path, 'w', encoding='utf-8') as fp:
|
|
str = "\n".join(result) + "\n"
|
|
if sys.version_info.major == 2:
|
|
fp.write(str.decode('utf-8'))
|
|
else:
|
|
fp.write(str)
|
|
|
|
|
|
def apply(confpath):
|
|
process_file(os.path.join(confpath, "obj", "cef", "libcef.ninja"))
|