This allows a CustomTarget to be indexed, and the resulting indexed value (a CustomTargetIndex type), to be used as a source in other targets. This will confer a dependency on the original target, but only inserts the source file returning by index the original target's outputs. This can allow a CustomTarget that creates both a header and a code file to have it's outputs split, for example. Fixes #1470pull/2386/head
parent
dfc2b75ee2
commit
dda5e8cadb
15 changed files with 261 additions and 17 deletions
@ -0,0 +1,21 @@ |
||||
# Can index CustomTaget objects |
||||
|
||||
The `CustomTarget` object can now be indexed like an array. The resulting |
||||
object can be used as a source file for other Targets, this will create a |
||||
dependency on the original `CustomTarget`, but will only insert the generated |
||||
file corresponding to the index value of the `CustomTarget`'s `output` keyword. |
||||
|
||||
c = CustomTarget( |
||||
... |
||||
output : ['out.h', 'out.c'], |
||||
) |
||||
lib1 = static_library( |
||||
'lib1', |
||||
[lib1_sources, c[0]], |
||||
... |
||||
) |
||||
exec = executable( |
||||
'executable', |
||||
c[1], |
||||
link_with : lib1, |
||||
) |
@ -0,0 +1,49 @@ |
||||
# Copyright © 2017 Intel Corporation |
||||
# |
||||
# Licensed 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. |
||||
|
||||
import argparse |
||||
import textwrap |
||||
|
||||
HEADER = textwrap.dedent('''\ |
||||
void stringify(int foo, char * buffer); |
||||
''') |
||||
|
||||
CODE = textwrap.dedent('''\ |
||||
#include <stdio.h> |
||||
|
||||
#ifndef WORKS |
||||
# error "This shouldn't have been included" |
||||
#endif |
||||
|
||||
void stringify(int foo, char * buffer) { |
||||
sprintf(buffer, "%i", foo); |
||||
} |
||||
''') |
||||
|
||||
|
||||
def main(): |
||||
parser = argparse.ArgumentParser() |
||||
parser.add_argument('--header') |
||||
parser.add_argument('--code') |
||||
args = parser.parse_args() |
||||
|
||||
with open(args.header, 'w') as f: |
||||
f.write(HEADER) |
||||
|
||||
with open(args.code, 'w') as f: |
||||
f.write(CODE) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
@ -0,0 +1,20 @@ |
||||
/* Copyright © 2017 Intel Corporation
|
||||
* |
||||
* Licensed 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. |
||||
*/ |
||||
|
||||
#include "gen.h" |
||||
|
||||
void func(char * buffer) { |
||||
stringify(1, buffer); |
||||
} |
@ -0,0 +1,32 @@ |
||||
# Copyright © 2017 Intel Corporation |
||||
# |
||||
# Licensed 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. |
||||
|
||||
project('custom_target_index', 'c', default_options : 'c_std=c89') |
||||
|
||||
py_mod = import('python3') |
||||
prog_python = py_mod.find_python() |
||||
|
||||
gen = custom_target( |
||||
'gen.[ch]', |
||||
input : 'gen_sources.py', |
||||
output : ['gen.c', 'gen.h'], |
||||
command : [prog_python, '@INPUT@', '--header', '@OUTPUT1@', '--code', '@OUTPUT0@'], |
||||
) |
||||
|
||||
lib = static_library( |
||||
'libfoo', |
||||
['lib.c', gen[1]], |
||||
) |
||||
|
||||
subdir('subdir') |
@ -0,0 +1,22 @@ |
||||
/* Copyright © 2017 Intel Corporation
|
||||
* |
||||
* Licensed 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. |
||||
*/ |
||||
|
||||
#include "gen.h" |
||||
|
||||
int main(void) { |
||||
char buf[50]; |
||||
stringify(10, buf); |
||||
return 0; |
||||
} |
@ -0,0 +1,19 @@ |
||||
# Copyright © 2017 Intel Corporation |
||||
# |
||||
# Licensed 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. |
||||
|
||||
foo = executable( |
||||
'foo', |
||||
['foo.c', gen[0], gen[1]], |
||||
c_args : '-DWORKS', |
||||
) |
@ -0,0 +1,24 @@ |
||||
# Copyright © 2017 Intel Corporation |
||||
# |
||||
# Licensed 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. |
||||
|
||||
prog_python = import('python3').find_python() |
||||
|
||||
target = custom_target( |
||||
'target', |
||||
output : ['1', '2'], |
||||
command : [prog_python, '-c', |
||||
'with open("1", "w") as f: f.write("foo"); with open("2", "w") as f: f.write("foo")'], |
||||
) |
||||
|
||||
target[0] = 'foo' |
Loading…
Reference in new issue