build/init.py

58 lines
1.3 KiB
Python
Raw Normal View History

2019-02-22 12:46:26 +11:00
#!/usr/bin/env python3
import sys
import os
import itertools
OPTIONS = {
# compiler
'gcc': {'vars': {'CMAKE_CXX_COMPILER': 'g++', 'CMAKE_C_COMPILER': 'gcc'}},
'clang': {'vars': {'CMAKE_CXX_COMPILER': 'clang++', 'CMAKE_C_COMPILER': 'clang'}},
# profile
'debug': {'vars': {'CMAKE_BUILD_TYPE': 'Debug', 'LTO': 'OFF'}, 'args': ['-G', '"Unix Makefiles"']},
'release': {'vars': {'CMAKE_BUILD_TYPE': 'Release', 'LTO': 'ON'}},
# sanitizer
'sanitizer': {'vars': {'SANITIZER': 'ON'}, 'require': {'PROFILE': 'release'}},
# Default parameters
'': {
'vars': {
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"TESTS": "ON",
},
'args': ['-G', 'Ninja'],
},
}
def split_all_path(path):
parts = []
while len(path) > 1:
head,tail = os.path.split(path)
yield tail
path = head
if __name__ == '__main__':
accumulated = []
components = ['']
components += sys.argv[1:]
components += itertools.takewhile(lambda x: x in OPTIONS, split_all_path(os.getcwd()))
for key in components:
obj = OPTIONS[key]
vars = obj.get('vars', {})
args = obj.get('args', [])
accumulated += [f"-D{key}={val}" for key, val in vars.items()]
accumulated += args
print("cmake ../../../ " + " ".join(accumulated))