xref: /aosp_15_r20/external/pigweed/pw_bloat/bloat.cmake (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Workerinclude_guard(GLOBAL)
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Workerinclude($ENV{PW_ROOT}/pw_build/pigweed.cmake)
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker# This function creates a library under the specified ${NAME} which provides a
19*61c4878aSAndroid Build Coastguard Worker# a generated bloaty configuration for a given ELF file using
20*61c4878aSAndroid Build Coastguard Worker# pw_bloat.bloaty_config.
21*61c4878aSAndroid Build Coastguard Worker#
22*61c4878aSAndroid Build Coastguard Worker# Produces the ${OUTPUT} Bloaty McBloatface configuration file.
23*61c4878aSAndroid Build Coastguard Worker#
24*61c4878aSAndroid Build Coastguard Worker# Args:
25*61c4878aSAndroid Build Coastguard Worker#
26*61c4878aSAndroid Build Coastguard Worker#   NAME - name of the library to create
27*61c4878aSAndroid Build Coastguard Worker#   ELF_FILE - The input ELF file to process using pw_bloat.bloaty_config
28*61c4878aSAndroid Build Coastguard Worker#   OUTPUT - The output Bloaty McBloatface configuration file
29*61c4878aSAndroid Build Coastguard Workerfunction(pw_bloaty_config NAME)
30*61c4878aSAndroid Build Coastguard Worker  pw_parse_arguments(
31*61c4878aSAndroid Build Coastguard Worker    NUM_POSITIONAL_ARGS
32*61c4878aSAndroid Build Coastguard Worker      1
33*61c4878aSAndroid Build Coastguard Worker    ONE_VALUE_ARGS
34*61c4878aSAndroid Build Coastguard Worker      ELF_FILE
35*61c4878aSAndroid Build Coastguard Worker      OUTPUT
36*61c4878aSAndroid Build Coastguard Worker    REQUIRED_ARGS
37*61c4878aSAndroid Build Coastguard Worker      ELF_FILE
38*61c4878aSAndroid Build Coastguard Worker      OUTPUT
39*61c4878aSAndroid Build Coastguard Worker  )
40*61c4878aSAndroid Build Coastguard Worker  add_library(${NAME} INTERFACE)
41*61c4878aSAndroid Build Coastguard Worker  add_dependencies(${NAME} INTERFACE ${NAME}_generated_config)
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Worker  add_custom_command(
44*61c4878aSAndroid Build Coastguard Worker    COMMENT "Generating ${NAME}'s ${arg_OUTPUT} for ${arg_ELF_FILE}."
45*61c4878aSAndroid Build Coastguard Worker    COMMAND
46*61c4878aSAndroid Build Coastguard Worker       ${Python3_EXECUTABLE}
47*61c4878aSAndroid Build Coastguard Worker       "$ENV{PW_ROOT}/pw_bloat/py/pw_bloat/bloaty_config.py"
48*61c4878aSAndroid Build Coastguard Worker       ${arg_ELF_FILE} -o ${arg_OUTPUT} -l warning
49*61c4878aSAndroid Build Coastguard Worker    DEPENDS ${arg_ELF_FILE}
50*61c4878aSAndroid Build Coastguard Worker    OUTPUT ${arg_OUTPUT} POST_BUILD
51*61c4878aSAndroid Build Coastguard Worker  )
52*61c4878aSAndroid Build Coastguard Worker  add_custom_target(${NAME}_generated_config
53*61c4878aSAndroid Build Coastguard Worker    DEPENDS ${arg_OUTPUT}
54*61c4878aSAndroid Build Coastguard Worker  )
55*61c4878aSAndroid Build Coastguard Workerendfunction()
56