# # Copyright (C) 2015 The Android Open Source Project # # 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. # # This is a build configuration for the base of a Brillo system. # It contains the mandatory targets required to boot a Brillo device. # Define a make variable that identifies Brillo targets. BRILLO := 1 # Common Brillo init scripts. PRODUCT_COPY_FILES += \ device/generic/brillo/brillo.rc:system/etc/init/brillo.rc \ device/generic/brillo/sensorservice.rc:system/etc/init/sensorservice.rc \ device/generic/brillo/init.firewall-adbd-setup.sh:system/etc/init.firewall-adbd-setup.sh \ device/generic/brillo/init.firewall-setup.sh:system/etc/init.firewall-setup.sh \ device/generic/brillo/init.wifi-setup.sh:system/etc/init.wifi-setup.sh \ # Directory for init files. TARGET_COPY_OUT_INITRCD := $(TARGET_COPY_OUT_SYSTEM)/etc/init # Template for init files. INITRC_TEMPLATE := device/generic/brillo/init.template.rc.in # Directory for Brillo build time properties. OSRELEASED_DIRECTORY := os-release.d # Install the BDK version. PRODUCT_COPY_FILES += \ tools/bdk/VERSION:system/etc/$(OSRELEASED_DIRECTORY)/bdk_version # Include the cfgtree helpers for loading config values from disk. include device/generic/brillo/cfgtree.mk BOARD_BPT_INPUT_FILES := device/generic/brillo/brillo_partitions.bpt # Global Brillo USE flags. BRILLO_USE_BINDER := 1 BRILLO_USE_DBUS := 1 BRILLO_USE_OMAHA := 1 BRILLO_USE_SHILL := 1 BRILLO_USE_WEAVE := 1 # Java is not used or required for Brillo. JAVA_NOT_REQUIRED := true # Brillo does not use the Android recovery image. TARGET_NO_RECOVERY := true # Brillo does not run a surface flinger. TARGET_BOARD_HAS_NO_SURFACE_FLINGER := true # Generate Breakpad symbols. BREAKPAD_GENERATE_SYMBOLS := true # Skip API checks. WITHOUT_CHECK_API := true # Don't try to build and run all tests by default. Several tests have # dependencies on the framework. ANDROID_NO_TEST_CHECK := true PRODUCT_PACKAGES := \ adbd \ bootctl \ firewalld \ init \ init.environ.rc \ init.rc \ ip \ ip6tables \ iptables \ keymaster \ keystore \ libminijail \ linker \ logcat \ logd \ nativeperms \ nativepowerman \ peripheralman \ power_example \ reboot \ rootdev \ service \ servicemanager \ softkeymaster \ sh \ toolbox \ toybox \ update_engine \ update_engine_client \ weaved \ webservd \ # Android build adds libstdc++ dependencies to some modules. Normally Android # devices inherit embedded.mk which brings in libstdc++, but we don't, so we # need to explicitly add it. See http://b/24499744. PRODUCT_PACKAGES += \ libstdc++ \ # Packages included only for eng or userdebug builds. PRODUCT_PACKAGES_DEBUG += \ dumpsys \ webservd_test_client # eng builds don't include the official payload key so developers can test # providing their own testing key. PRODUCT_PACKAGES_ENG += \ brillo-update-payload-key # Packages for eng and userdebug images PRODUCT_PACKAGES_DEBUG += \ webservd_testc # Packages for eng images PRODUCT_PACKAGES_ENG += \ apmanager_test \ audio_hal_playback_test \ audio_hal_record_test \ brillo_audio_test \ brillo_camera_client \ crash_reporter_tests \ firewalld_unittest \ libbrillo_test \ libchrome_test \ libminijail_test \ libminijail_unittest \ libnativepower_tests \ libperipheralman_tests \ metrics_collector_tests \ metricsd_tests \ nativepowerman_tests \ seccomp_bpf_test \ sensors-hal-example-app \ sensors-ndk-example-app \ shill_setup_wifi \ shill_test \ syscall_filter_unittest \ update_engine_unittests \ weaved_test \ # SELinux packages. PRODUCT_PACKAGES += \ sepolicy \ file_contexts.bin \ seapp_contexts \ property_contexts \ mac_permissions.xml \ selinux_version \ service_contexts \ # Build time parameters. PRODUCT_PACKAGES += \ product_version \ product_id \ # D-Bus daemon, utilities, and example programs. ifeq ($(BRILLO_USE_DBUS),1) PRODUCT_PACKAGES += \ dbus-daemon \ dbus-example-client \ dbus-example-daemon \ dbus-monitor \ dbus-send endif # Audio NDK tests. PRODUCT_PACKAGES += \ slesTest_playFdPath \ slesTest_recBuffQueue \ slesTest_sawtoothBufferQueue \ # Audio dependencies. # TODO(deymo): Add back brilloaudioservice and audioserver once crash-loop is # fixed. PRODUCT_PACKAGES += \ libaudioroute \ libtinyalsa \ libtinycompress \ local_time.default \ # Audio libraries. PRODUCT_PACKAGES += \ libmedia \ libstagefright \ libOpenSLES \ libOpenMAXAL \ # OpenMAX audio codecs. PRODUCT_PACKAGES += \ libstagefright_soft_aacdec \ libstagefright_soft_aacenc \ libstagefright_soft_amrdec \ libstagefright_soft_amrnbenc \ libstagefright_soft_amrwbenc \ libstagefright_soft_flacenc \ libstagefright_soft_g711dec \ libstagefright_soft_gsmdec \ libstagefright_soft_mp3dec \ libstagefright_soft_opusdec \ libstagefright_soft_rawdec \ libstagefright_soft_vorbisdec \ # Sensor packages and example programs. PRODUCT_PACKAGES += \ libsensor \ sensorservice \ # Connectivity packages. PRODUCT_PACKAGES += \ cacerts \ cacerts_google \ dhcpcd \ dhcpcd-6.8.2 \ dnsmasq \ hostapd \ shill \ wifi_init \ wpa_supplicant \ # Check for targets that do not support WiFi. WIFI_SUPPORTED := true ifeq ($(TARGET_PRODUCT),brilloemulator_arm64) WIFI_SUPPORTED := false endif ifeq ($(TARGET_PRODUCT),brilloemulator_arm) WIFI_SUPPORTED := false endif ifeq ($(TARGET_PRODUCT),brilloemulator_x86_64) WIFI_SUPPORTED := false endif ifeq ($(TARGET_PRODUCT),brilloemulator_x86) WIFI_SUPPORTED := false endif ifeq ($(WIFI_SUPPORTED),true) # It only makes sense to include apmanager if WiFi is supported. PRODUCT_PACKAGES += apmanager SHILL_USE_WIFI := true endif # Metrics daemons and metrics library. PRODUCT_PACKAGES += \ libmetrics \ metrics_client \ metricsd \ # Crash reporter package. PRODUCT_PACKAGES += \ crash_reporter \ # Avahi packages. PRODUCT_PACKAGES += \ avahi-browse \ avahi-client \ avahi-daemon \ libdaemon \ # tlsdate binaries. PRODUCT_PACKAGES += \ tlsdate \ tlsdate-helper \ tlsdated \ # Make 3rd party packages available by default. PRODUCT_3RD_PARTY_PACKAGES := PRODUCT_PACKAGES += \ 3rd-party-packages \ # For android_filesystem_config.h # This configures filesystem capabilities. TARGET_ANDROID_FILESYSTEM_CONFIG_H := \ device/generic/brillo/fs_config/android_filesystem_config.h PRODUCT_PACKAGES += \ fs_config_files \ # Brillo targets use the A/B updater. AB_OTA_UPDATER := true # Do not build Android OTA package. TARGET_SKIP_OTA_PACKAGE := true # This is the list of partitions the A/B updater will update. These need to have # two partitions each in the partition table, with the right suffix used by the # bootloader, for example "system_a" and "system_b". AB_OTA_PARTITIONS := \ boot \ system include device/generic/brillo/net_packages_config.mk # Wireless debugging. PRODUCT_PACKAGES += \ iw \ libnl \ ping \ wpa_cli \ # Bluetooth. # Don't compile for targets without WiFi support until b/25083459 is fixed. ifeq ($(WIFI_SUPPORTED),true) PRODUCT_PACKAGES += \ bluetoothtbd \ bluetooth-cli \ endif # Access-Controlled NVRAM PRODUCT_PACKAGES += nvram-client # TODO(derat): Move this config file to a saner place. PRODUCT_COPY_FILES += \ device/generic/brillo/dbus.conf:system/etc/dbus.conf \ # TODO(samueltan): Move this config file to a saner place. PRODUCT_COPY_FILES += \ device/generic/brillo/wpa_supplicant.conf:/system/lib/shill/shims/wpa_supplicant.conf \ # TODO(zqiu): Move this config file to a saner place. PRODUCT_COPY_FILES += \ device/generic/brillo/dhcpcd-6.8.2.conf:/system/etc/dhcpcd-6.8.2/dhcpcd.conf \ BOARD_SEPOLICY_DIRS := $(BOARD_SEPOLICY_DIRS) device/generic/brillo/sepolicy # Ensure that this property is always defined so that bionic_systrace.cpp # can rely on it being initially set by init. # On Android this is defined in embedded.mk, see # https://android-review.googlesource.com/#/c/106470. PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ debug.atrace.tags.enableflags=0 \ ro.build.shutdown_timeout=5 \ # TODO(jorgelo): Move into main build. define generate-initrc-file @echo "Generate: $< -> $@" @mkdir -p $(dir $@) $(hide) sed -e 's?%SERVICENAME%?$(1)?g' $< > $@ $(hide) sed -i -e 's?%ARGS%?$(2)?g' $@ $(hide) sed -i -e 's?%GROUPS%?$(3)?g' $@ endef # Called from the product makefile, it sets any derived defaults. # DEPRECATED define set-product-defaults $(eval PRODUCT_NAME := $$(basename $$(notdir \ $$(filter $$(LOCAL_PATH)/%.mk,$$(MAKEFILE_LIST))))) endef # Returns the product name as guessed from the calling file. define get_product_name_from_file $(firstword $(basename $(notdir \ $(filter $(LOCAL_PATH)/%.mk,$(MAKEFILE_LIST))))) endef HARDWARE_BSP_PREFIX := hardware/bsp HARDWARE_BSP_PREBUILTS_PREFIX := vendor/bsp # New BSP helpers - move to /build once stable. define set_soc $(eval soc_vendor := $(strip $(1))) \ $(eval soc_name := $(strip $(2))) \ $(eval soc_make_file := $(HARDWARE_BSP_PREFIX)/$(soc_vendor)/soc/$(soc_name)/soc.mk) \ $(eval soc_prebuilts_make_file := $(HARDWARE_BSP_PREBUILTS_PREFIX)/$(soc_vendor)/hardware/soc/$(soc_name)/soc.mk) \ $(if $(wildcard $(soc_make_file)),$(eval include $(soc_make_file)), \ $(if $(wildcard $(soc_prebuilts_make_file)),$(eval include $(soc_prebuilts_make_file)), \ $(error Can't find SoC definition. Vendor: $(soc_vendor) SoC: $(soc_name)))) endef define add_peripheral $(eval peripheral_vendor := $(strip $(1))) \ $(eval peripheral_name := $(strip $(2))) \ $(eval peripheral_make_file := $(HARDWARE_BSP_PREFIX)/$(peripheral_vendor)/peripheral/$(peripheral_name)/peripheral.mk) \ $(eval peripheral_prebuilts_make_file := $(HARDWARE_BSP_PREBUILTS_PREFIX)/$(peripheral_vendor)/hardware/peripheral/$(peripheral_name)/peripheral.mk) \ $(eval HAL_MAKEFILES += $(HARDWARE_BSP_PREFIX)/$(peripheral_vendor)/peripheral/$(peripheral_name)/hal.mk) \ $(if $(wildcard $(peripheral_make_file)),$(eval include $(peripheral_make_file)), \ $(if $(wildcard $(peripheral_prebuilts_make_file)),$(eval include $(peripheral_prebuilts_make_file)), \ $(error Can't find peripheral definition. Vendor: $(peripheral_vendor) peripheral: $(peripheral_name)))) endef define add_device_packages $(eval CUSTOM_MODULES += $(DEVICE_PACKAGES)) endef define add_kernel_configs $(eval TARGET_KERNEL_CONFIGS := $(TARGET_KERNEL_CONFIGS) $(1)) endef # Configures adbd to listen for connections on the given TCP port on userdebug # and eng builds. The host can then use `adb connect :` to connect. # Usage: $(call enable_adb_over_tcp, [, ]) # port: TCP port for adbd to listen on. # start_on_boot: set to true to auto-start adbd on userdebug and eng builds. # Normally init.usb.rc handles this, but boards that do not include it # (e.g. boards without USB) may want to use this option. define enable_adb_over_tcp $(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)), \ $(eval PRODUCT_DEFAULT_PROPERTY_OVERRIDES += persist.adb.tcp.port=$(strip $(1))) \ $(if $(filter true,$(2)), \ $(eval PRODUCT_DEFAULT_PROPERTY_OVERRIDES += adbd-setup.autostart=1))) endef