cmake/scripts/setup_cmake_tomls.py (66 lines of code) (raw):

#!/usr/bin/env python3 # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ''' [usage] setup_cmake_tomls.py [project_root_dir] [project_build_dir] Create cmake_tomls under build_dir Create separate folders for unix_app|sgx_trusted|sgx_untrusted under build_dir/cmake_tomls Create symlinks for Cargo.*.toml and folders so cargo build can run in separate folders Setup Cargo config for enclaves ''' import os import os.path as osp import sys # symlinks won't be created for the following directories SYM_FOLDER_BLACKLIST = ['docs', 'cmake', 'out', 'bin', 'build'] CATEGORIES = ['sgx_trusted_lib', 'sgx_untrusted_app', 'unix_app'] def exec_cmd(cmd): """execute a shell command""" # print(cmd) os.system(cmd) def filter_sym_dir(root_dir, name): """return true if name corresponds to a folder and is not in blacklist""" return not name.startswith( '.') and not name in SYM_FOLDER_BLACKLIST and osp.isdir( osp.join(root_dir, name)) def create_symlinks(root_dir, build_dir): """create symolic links""" exec_cmd('mkdir -p {build_dir}/cmake_tomls'.format(build_dir=build_dir)) sym_folders = list( filter(lambda name: filter_sym_dir(root_dir, name), os.listdir(root_dir))) for cate in CATEGORIES: cate_dir = '{build_dir}/cmake_tomls/{cate}'.format(build_dir=build_dir, cate=cate) cmd = 'mkdir -p {cate_dir} && [ ! -f {cate_dir}/Cargo.toml ] && \ ln -s {root_dir}/cmake/tomls/Cargo.{cate}.toml \ {cate_dir}/Cargo.toml && \ ln -s {root_dir}/cmake/tomls/Cargo.{cate}.lock \ {cate_dir}/Cargo.lock'.format(root_dir=root_dir, cate=cate, cate_dir=cate_dir) exec_cmd(cmd) for folder in sym_folders: cmd = '[ ! -d {cate_dir}/{folder} ] && ln -sn {root_dir}/{folder} \ {cate_dir}/'.format(root_dir=root_dir, folder=folder, cate_dir=cate_dir) exec_cmd(cmd) def setup_cargo_for_sgx(root_dir, build_dir): """setup cargo related files for sgx""" third_party_dir = os.path.join(root_dir, 'third_party') cmd = r'''mkdir -p {build_dir}/cmake_tomls/sgx_trusted_lib''' cmd = cmd.format(build_dir=build_dir, third_party_dir=third_party_dir) exec_cmd(cmd) def setup_cargo_for_unix(root_dir, build_dir): """setup cargo related files for sgx""" third_party_dir = os.path.join(root_dir, 'third_party') for target in ["unix_app", "sgx_untrusted_lib", "sgx_untrusted_app"]: cmd = r'''mkdir -p {build_dir}/cmake_tomls/{target}''' cmd = cmd.format(build_dir=build_dir, third_party_dir=third_party_dir, target=target) exec_cmd(cmd) def main(): """setup tomls for cmake""" if len(sys.argv) != 3: print( '[usage] setup_cmake_tomls.py [project_root_dir] [project_build_dir]' ) sys.exit(-1) root_dir = sys.argv[1] build_dir = sys.argv[2] create_symlinks(root_dir, build_dir) setup_cargo_for_unix(root_dir, build_dir) setup_cargo_for_sgx(root_dir, build_dir) if __name__ == "__main__": main()