blob: ea76912cf1789343286547e5444330e6dc764662 [file] [log] [blame]
# Copyright (c) 2021, Alliance for Open Media. All rights reserved
#
# This source code is subject to the terms of the BSD 2 Clause License and
# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
# was not distributed with this source code in the LICENSE file, you can
# obtain it at www.aomedia.org/license/software. If the Alliance for Open
# Media Patent License 1.0 was not distributed with this source code in the
# PATENTS file, you can obtain it at www.aomedia.org/license/patent.
#
import os
import sys
def is_code_file(filename):
return filename.endswith(".c") or filename.endswith(".h")
def is_simd_file(filename):
simd_keywords = [
"avx2", "sse2", "sse3", "ssse3", "sse4", "dspr2", "neon", "msa", "simd",
"x86"
]
for keyword in simd_keywords:
if filename.find(keyword) >= 0:
return True
return False
def get_code_file_list(path, exclude_file_set):
code_file_list = []
for cur_dir, sub_dir, file_list in os.walk(path):
for filename in file_list:
if is_code_file(filename) and not is_simd_file(
filename) and filename not in exclude_file_set:
file_path = os.path.join(cur_dir, filename)
code_file_list.append(file_path)
return code_file_list
def av1_exclude_file_set():
exclude_file_set = {
"cfl_ppc.c",
"ppc_cpudetect.c",
}
return exclude_file_set
def get_av1_pp_command(fake_header_dir, code_file_list):
pre_command = "gcc -w -nostdinc -E -I./ -I../ -I" + fake_header_dir + (" "
"-D'ATTRIBUTE_PACKED='"
" "
"-D'__attribute__(x)='"
" "
"-D'__inline__='"
" "
"-D'float_t=float'"
" "
"-D'DECLARE_ALIGNED(n,"
" typ,"
" "
"val)=typ"
" val'"
" "
"-D'volatile='"
" "
"-D'AV1_K_MEANS_DIM=2'"
" "
"-D'INLINE='"
" "
"-D'AOM_INLINE='"
" "
"-D'AOM_FORCE_INLINE='"
" "
"-D'inline='"
)
return pre_command + " " + " ".join(code_file_list)
def modify_av1_rtcd(build_dir):
av1_rtcd = os.path.join(build_dir, "config/av1_rtcd.h")
fp = open(av1_rtcd)
string = fp.read()
fp.close()
new_string = string.replace("#ifdef RTCD_C", "#if 0")
fp = open(av1_rtcd, "w")
fp.write(new_string)
fp.close()
def preprocess_av1(aom_dir, build_dir, fake_header_dir):
cur_dir = os.getcwd()
output = os.path.join(cur_dir, "av1_pp.c")
path_list = [
os.path.join(aom_dir, "av1/encoder"),
os.path.join(aom_dir, "av1/common")
]
code_file_list = []
for path in path_list:
path = os.path.realpath(path)
code_file_list.extend(get_code_file_list(path, av1_exclude_file_set()))
modify_av1_rtcd(build_dir)
cmd = get_av1_pp_command(fake_header_dir, code_file_list) + " >" + output
os.chdir(build_dir)
os.system(cmd)
os.chdir(cur_dir)
if __name__ == "__main__":
aom_dir = sys.argv[1]
build_dir = sys.argv[2]
fake_header_dir = sys.argv[3]
preprocess_av1(aom_dir, build_dir, fake_header_dir)