#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright (c) 2023 Arm Limited. # # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import os.path LIB_PREFIX = "ckw" # Compute Kernel Writer (CKW) VERSION = "v0.0-unreleased" LIBRARY_VERSION_MAJOR = 1 LIBRARY_VERSION_MINOR = 0 LIBRARY_VERSION_PATCH = 0 SONAME_VERSION = str(LIBRARY_VERSION_MAJOR) + "." + str(LIBRARY_VERSION_MINOR) + "." + str(LIBRARY_VERSION_PATCH) Import('env') Import('vars') Import('install_lib') def build_library(name, build_env, sources, static=False, libs=[]): cloned_build_env = build_env.Clone() if env['os'] == 'android' and static == False: cloned_build_env["LINKFLAGS"].remove('-pie') cloned_build_env["LINKFLAGS"].remove('-static-libstdc++') if static: obj = cloned_build_env.StaticLibrary(name, source=sources, LIBS = ckw_env["LIBS"] + libs) else: obj = cloned_build_env.SharedLibrary(name, source=sources, LIBS = ckw_env["LIBS"] + libs) obj = install_lib(obj) build_env.Default(obj) return obj ckw_env = env.Clone() default_cpp_compiler = 'g++' if env['os'] not in ['android'] else 'clang++' cpp_compiler = os.environ.get('CXX', default_cpp_compiler) ckw_env.Append(CPPPATH =[Dir("./src/").path] ) # Append version defines for semantic versioning ckw_env.Append(CPPDEFINES = [('COMPUTE_KERNEL_WRITER_VERSION_MAJOR', LIBRARY_VERSION_MAJOR), ('COMPUTE_KERNEL_WRITER_VERSION_MINOR', LIBRARY_VERSION_MINOR), ('COMPUTE_KERNEL_WRITER_VERSION_PATCH', LIBRARY_VERSION_PATCH)]) # Don't allow undefined references in the libraries: undefined_flag = '-Wl,--no-undefined' ckw_env.Append(LINKFLAGS=[undefined_flag]) # Kernel writer files kernel_writer_files = Glob('./src/*.cpp') # OpenCL specific files kernel_writer_files += Glob('./src/cl/*.cpp') ckw_a = build_library(LIB_PREFIX + '-static', ckw_env, kernel_writer_files, static=True) Export('ckw_a') # SHARED library build. ckw_so = build_library(LIB_PREFIX, ckw_env, kernel_writer_files, static=False) Export('ckw_so')