blob: 257431b2425aec2be371cbab5b298be9e2774881 [file] [log] [blame]
# Copyright (c) 2022 Project CHIP Authors
#
# 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("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/jsoncpp.gni")
import("${chip_root}/build/chip/tools.gni")
import("${chip_root}/build/config/compiler/compiler.gni")
import("${chip_root}/build/config/mac/mac_sdk.gni")
import("${chip_root}/examples//chip-tool/chip-tool.gni")
if (config_use_interactive_mode) {
import("//build_overrides/editline.gni")
}
assert(chip_build_tools)
declare_args() {
chip_codesign = current_os == "ios"
chip_inet_config_enable_ipv4 = true
if (!defined(chip_config_network_layer_ble)) {
chip_config_network_layer_ble = true
}
if (!defined(is_clang)) {
is_clang = false
}
enable_provisional_features = config_enable_yaml_tests
# Disable generating compiler database by default
generate_compilation_database = false
# Enable automatic leak checks before the application exits
enable_leak_checking = !is_asan && target_os == "mac"
# Use Network.framework instead of POSIX sockets
use_network_framework = false
}
sdk = "macosx"
sdk_build_dir_suffix = ""
if (getenv("SDKROOT") != "") {
sdk = getenv("SDKROOT")
sdk_root_parts = string_split(getenv("SDKROOT"), ".")
if (sdk_root_parts[0] != "macosx") {
sdk_build_dir_suffix = "-${sdk_root_parts[0]}"
}
}
output_sdk_type = "Debug${sdk_build_dir_suffix}"
action("build-darwin-framework") {
script = "${chip_root}/scripts/build/build_darwin_framework.py"
inputs = [
"${chip_root}/src/darwin/Framework/CHIP",
"${chip_root}/src/darwin/Framework/CHIP/zap-generated",
"${chip_root}/src/darwin/Framework/Matter.xcodeproj",
]
args = [
"--project_path",
rebase_path("${chip_root}/src/darwin/Framework/Matter.xcodeproj",
root_build_dir),
"--out_path",
"macos_framework_output",
"--target",
"Matter Framework",
"--log_path",
rebase_path("${root_build_dir}/darwin_framework_build.log", root_build_dir),
"--target_arch",
mac_target_arch,
]
if (sdk != "macosx") {
args += [
"--target_sdk",
sdk,
]
}
if (defined(chip_inet_config_enable_ipv4) && chip_inet_config_enable_ipv4) {
args += [ "--ipv4" ]
} else {
args += [ "--no-ipv4" ]
}
if (defined(is_asan) && is_asan) {
args += [ "--asan" ]
} else {
args += [ "--no-asan" ]
}
if (defined(chip_config_network_layer_ble) && chip_config_network_layer_ble) {
args += [ "--ble" ]
} else {
args += [ "--no-ble" ]
}
if (defined(is_clang) && is_clang) {
args += [ "--clang" ]
} else {
args += [ "--no-clang" ]
}
if (generate_compilation_database) {
args += [ "--compdb" ]
} else {
args += [ "--no-compdb" ]
}
if (config_enable_yaml_tests) {
args += [ "--enable-encoding-sentinel-enum-values" ]
} else {
args += [ "--no-enable-encoding-sentinel-enum-values" ]
}
if (defined(use_network_framework) && use_network_framework) {
args += [ "--use-network-framework" ]
} else {
args += [ "--no-use-network-framework" ]
}
output_name = "Matter.framework"
outputs = [
"${root_out_dir}/macos_framework_output/Build/Products/${output_sdk_type}/${output_name}",
"${root_out_dir}/macos_framework_output/Build/Intermediates.noindex/Matter.build/${output_sdk_type}/Matter.build/out/gen/include",
"${root_build_dir}/darwin_framework_build.log",
"${root_out_dir}/macos_framework_output/ModuleCache.noindex/",
"${root_out_dir}/macos_framework_output/Logs",
"${root_out_dir}/macos_framework_output/Index",
"${root_out_dir}/macos_framework_output/Build",
]
if (sdk == "macosx" || sdk_root_parts[0] == "macosx") {
outputs += [ "${root_out_dir}/macos_framework_output/Build/Intermediates.noindex/Matter.build/${output_sdk_type}/Matter.build/out/lib/libCHIP.a" ]
}
}
config("config") {
include_dirs = [
".",
"include",
"${chip_root}/examples/common",
"${chip_root}/examples/darwin-framework-tool/commands/common",
"${chip_root}/zzz_generated/darwin-framework-tool",
"${chip_root}/zzz_generated/controller-clusters",
"${chip_root}/examples/chip-tool",
"${chip_root}/zzz_generated/chip-tool",
"${root_out_dir}/macos_framework_output/Build/Products/${output_sdk_type}/",
]
framework_dirs = [
"${root_out_dir}/macos_framework_output/Build/Products/${output_sdk_type}/",
]
defines = [
"CHIP_ADDRESS_RESOLVE_IMPL_INCLUDE_HEADER=<lib/address_resolve/AddressResolve_DefaultImpl.h>",
"CONFIG_USE_INTERACTIVE_MODE=${config_use_interactive_mode}",
# Disable availability annotations in Matter.framework headers because we
# are not building against a system Matter.framework here anyway.
"MTR_NO_AVAILABILITY=1",
]
cflags = [
"-Wconversion",
"-fobjc-arc",
]
}
executable("darwin-framework-tool") {
sources = [
"${chip_root}/examples/chip-tool/commands/common/Command.cpp",
"${chip_root}/examples/chip-tool/commands/common/Command.h",
"${chip_root}/examples/chip-tool/commands/common/Commands.cpp",
"${chip_root}/examples/chip-tool/commands/common/Commands.h",
"${chip_root}/examples/chip-tool/commands/common/HexConversion.h",
"${chip_root}/examples/common/websocket-server/WebSocketServer.cpp",
"${chip_root}/examples/common/websocket-server/WebSocketServer.h",
"${chip_root}/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp",
"commands/bdx/Commands.h",
"commands/bdx/DownloadLogCommand.mm",
"commands/clusters/ClusterCommandBridge.h",
"commands/clusters/ModelCommandBridge.mm",
"commands/clusters/ReportCommandBridge.h",
"commands/clusters/WriteAttributeCommandBridge.h",
"commands/common/CHIPCommandBridge.mm",
"commands/common/CHIPCommandStorageDelegate.mm",
"commands/common/CHIPToolKeypair.mm",
"commands/common/CertificateIssuer.h",
"commands/common/CertificateIssuer.mm",
"commands/common/ControllerStorage.h",
"commands/common/ControllerStorage.mm",
"commands/common/DeviceDelegate.h",
"commands/common/DeviceDelegate.mm",
"commands/common/MTRDevice_Externs.h",
"commands/common/MTRError.mm",
"commands/common/MTRError_Utils.h",
"commands/common/MTRLogging.h",
"commands/common/PreferencesStorage.h",
"commands/common/PreferencesStorage.mm",
"commands/common/RemoteDataModelLogger.h",
"commands/common/RemoteDataModelLogger.mm",
"commands/configuration/Commands.h",
"commands/configuration/ResetMRPParametersCommand.h",
"commands/configuration/ResetMRPParametersCommand.mm",
"commands/configuration/SetMRPParametersCommand.h",
"commands/configuration/SetMRPParametersCommand.mm",
"commands/delay/Commands.h",
"commands/delay/SleepCommand.h",
"commands/delay/SleepCommand.mm",
"commands/delay/WaitForCommissioneeCommand.h",
"commands/delay/WaitForCommissioneeCommand.mm",
"commands/discover/Commands.h",
"commands/discover/DiscoverCommissionablesCommand.h",
"commands/discover/DiscoverCommissionablesCommand.mm",
"commands/memory/Commands.h",
"commands/memory/DumpMemoryGraphCommand.h",
"commands/memory/DumpMemoryGraphCommand.mm",
"commands/memory/LeaksTool.h",
"commands/memory/LeaksTool.mm",
"commands/pairing/Commands.h",
"commands/pairing/DeviceControllerDelegateBridge.mm",
"commands/pairing/GetCommissionerNodeIdCommand.h",
"commands/pairing/GetCommissionerNodeIdCommand.mm",
"commands/pairing/OpenCommissioningWindowCommand.h",
"commands/pairing/OpenCommissioningWindowCommand.mm",
"commands/pairing/PairingCommandBridge.mm",
"commands/payload/SetupPayloadParseCommand.mm",
"commands/provider/Commands.h",
"commands/provider/OTAProviderDelegate.mm",
"commands/provider/OTASoftwareUpdateInteractive.mm",
"commands/storage/Commands.h",
"commands/storage/StorageManagementCommand.mm",
"debug/LeakChecker.mm",
"logging/logging.mm",
"main.mm",
]
deps = [
":build-darwin-framework",
"${chip_root}/third_party/libwebsockets",
jsoncpp_root,
]
if (config_use_interactive_mode) {
sources += [ "commands/interactive/InteractiveCommands.mm" ]
deps += [ "${editline_root}:editline" ]
}
ldflags = [
"-rpath",
"@executable_path/macos_framework_output/Build/Products/${output_sdk_type}/",
]
frameworks = [
"Matter.framework",
"Security.framework",
]
include_dirs = [
"${chip_root}/config/standalone/",
"${chip_root}/src/",
"${chip_root}/src/include/",
"${chip_root}/src/protocols/",
"${chip_root}/src/protocols/interaction_model",
"${chip_root}/third_party/nlassert/repo/include/",
"${chip_root}/third_party/nlio/repo/include/",
"${chip_root}/zzz_generated/app-common/",
"${root_gen_dir}/include",
"${root_out_dir}/macos_framework_output/Build/Intermediates.noindex/Matter.build/${output_sdk_type}/Matter.build/out/gen/include",
]
defines = [ "CHIP_HAVE_CONFIG_H=1" ]
frameworks += [
"CoreFoundation.framework",
"Foundation.framework",
"CoreBluetooth.framework",
"Network.framework",
"IOKit.framework",
]
# Other SDKs are linked statically to Matter.framework but the macosx SDK is linked dynamically but needs some symbols that are
# not exposed by the dylib.
if (sdk == "macosx" || sdk_root_parts[0] == "macosx") {
libs = [ "${root_out_dir}/macos_framework_output/Build/Intermediates.noindex/Matter.build/${output_sdk_type}/Matter.build/out/lib/libCHIP.a" ]
}
if (enable_provisional_features) {
defines += [ "MTR_ENABLE_PROVISIONAL=1" ]
}
if (enable_leak_checking) {
defines += [ "DFT_ENABLE_LEAK_CHECKING=1" ]
}
public_configs = [ ":config" ]
output_dir = root_out_dir
}
if (chip_codesign) {
action("codesign") {
script = "entitlements/codesign.py"
public_deps = [ ":darwin-framework-tool" ]
args = [
"--target_path",
rebase_path("${root_build_dir}/darwin-framework-tool", root_build_dir),
"--log_path",
rebase_path("${root_build_dir}/codesign_log.txt", root_build_dir),
]
output_name = "codesign_log.txt"
outputs = [ "${root_build_dir}/${output_name}" ]
}
}
# Make sure we only build darwin-framework-tool, and not extraneous
# things like address-resolve, by default.
group("default") {
deps = [ ":darwin-framework-tool" ]
}