201 lines
5.4 KiB
Makefile
201 lines
5.4 KiB
Makefile
#
|
|
# Copyright 2024 Google LLC. All Rights Reserved. This file and proprietary
|
|
# source code may only be used and distributed under the Widevine
|
|
# License Agreement.
|
|
#
|
|
CDM_DIR ?= $(shell pwd)/../..
|
|
|
|
# CROSS_COMPILE: prefix for cross compilers, e.g. arm-none-gnueabihf-
|
|
cc ?= $(CROSS_COMPILE)gcc
|
|
cxx ?= $(CROSS_COMPILE)g++
|
|
ARCH ?= 64
|
|
IS_ARM ?= 0
|
|
|
|
project := wv_factory_extractor
|
|
srcdir := $(shell realpath --relative-to=$(CURDIR) $(CDM_DIR))
|
|
output = $(project)
|
|
|
|
# Place outputs in $CDM_DIR/out/wv_factory_extractor/
|
|
default_build_dir := $(CDM_DIR)/out/$(project)
|
|
# Check if OUT_DIR is set and not empty
|
|
ifeq ($(strip $(OUT_DIR)),)
|
|
builddir := $(default_build_dir)/
|
|
else
|
|
builddir := $(OUT_DIR)/
|
|
endif
|
|
|
|
# All file locations are relative to the $CDM_DIR path.
|
|
REPO_TOP :=
|
|
|
|
# Path to the modified example_main file used by tests
|
|
MODIFIED_MAIN_SRC := example_main_modified.cpp
|
|
|
|
# Conditionally add the source file based on its existence
|
|
ifneq ($(wildcard $(MODIFIED_MAIN_SRC)),)
|
|
extractor_sources += $(REPO_TOP)/factory_upload_tool/ce/$MODIFIED_MAIN_SRC
|
|
$(info Using modified source for tests)
|
|
else
|
|
extractor_sources += $(REPO_TOP)/factory_upload_tool/ce/example_main.cpp
|
|
endif
|
|
|
|
# other sources
|
|
extractor_sources += \
|
|
$(REPO_TOP)/factory_upload_tool/ce/log.cpp \
|
|
$(REPO_TOP)/factory_upload_tool/ce/properties_ce.cpp \
|
|
$(REPO_TOP)/factory_upload_tool/ce/wv_factory_extractor.cpp \
|
|
$(REPO_TOP)/util/src/string_conversions.cpp \
|
|
$(REPO_TOP)/factory_upload_tool/common/src/WidevineOemcryptoInterface.cpp \
|
|
|
|
extractor_includes := \
|
|
$(REPO_TOP)/factory_upload_tool/common/include \
|
|
$(REPO_TOP)/oemcrypto/include \
|
|
$(REPO_TOP)/util/include
|
|
|
|
srcs := $(extractor_sources)
|
|
incs := $(extractor_includes)
|
|
|
|
ifdef USE_VALIDATOR
|
|
oemcrypto_util_dir := $(REPO_TOP)/oemcrypto/util
|
|
|
|
validator_sources := \
|
|
$(oemcrypto_util_dir)/src/bcc_validator.cpp \
|
|
$(oemcrypto_util_dir)/src/cbor_validator.cpp \
|
|
$(oemcrypto_util_dir)/src/device_info_validator.cpp \
|
|
$(oemcrypto_util_dir)/src/prov4_validation_helper.cpp \
|
|
$(oemcrypto_util_dir)/src/cmac.cpp \
|
|
$(oemcrypto_util_dir)/src/oemcrypto_drm_key.cpp \
|
|
$(oemcrypto_util_dir)/src/oemcrypto_ecc_key.cpp \
|
|
$(oemcrypto_util_dir)/src/oemcrypto_key_deriver.cpp \
|
|
$(oemcrypto_util_dir)/src/oemcrypto_oem_cert.cpp \
|
|
$(oemcrypto_util_dir)/src/oemcrypto_rsa_key.cpp \
|
|
$(oemcrypto_util_dir)/src/signed_csr_payload_validator.cpp \
|
|
$(oemcrypto_util_dir)/src/wvcrc.cpp
|
|
|
|
validator_includes := \
|
|
$(oemcrypto_util_dir)/include
|
|
|
|
cppbor_dir := $(REPO_TOP)/third_party/libcppbor
|
|
|
|
cppbor_sources += \
|
|
$(cppbor_dir)/src/cppbor.cpp \
|
|
$(cppbor_dir)/src/cppbor_parse.cpp
|
|
|
|
cppbor_includes += \
|
|
$(cppbor_dir)/include \
|
|
$(cppbor_dir)/include/cppbor
|
|
|
|
include $(CDM_DIR)/third_party/boringssl/kit/sources.mk
|
|
boringssl_sources_raw += $(crypto_sources)
|
|
ifeq ($(ARCH), 64)
|
|
ifneq ($(IS_ARM), 0)
|
|
boringssl_sources_raw += $(linux_aarch64_sources)
|
|
else
|
|
boringssl_sources_raw += $(linux_x86_64_sources)
|
|
endif
|
|
else ifeq ($(ARCH), 32)
|
|
ifneq ($(IS_ARM), 0)
|
|
boringssl_sources_raw += $(linux_arm_sources)
|
|
else
|
|
boringssl_sources_raw += $(linux_x86_sources)
|
|
endif
|
|
else
|
|
$(error No known value for ARCH; assembly not included for BoringSSL)
|
|
endif
|
|
|
|
boringssl_dir := $(REPO_TOP)/third_party/boringssl
|
|
|
|
boringssl_sources += \
|
|
$(addprefix $(boringssl_dir)/kit/, $(boringssl_sources_raw))
|
|
|
|
boringssl_includes += \
|
|
$(boringssl_dir)/kit/src/include
|
|
|
|
srcs += \
|
|
$(validator_sources) \
|
|
$(cppbor_sources) \
|
|
$(boringssl_sources)
|
|
|
|
incs += \
|
|
$(validator_includes) \
|
|
$(cppbor_includes) \
|
|
$(boringssl_includes)
|
|
endif
|
|
|
|
# flags
|
|
cflags += \
|
|
-Wall \
|
|
-Werror \
|
|
-fPIC \
|
|
-fsanitize=address \
|
|
$(addprefix -I, $(includes))
|
|
|
|
cflags_c += \
|
|
$(cflags) \
|
|
-std=c11 \
|
|
-D_POSIX_C_SOURCE=200809L \
|
|
-fno-inline
|
|
|
|
cppflags += \
|
|
$(cflags)
|
|
|
|
ifdef USE_VALIDATOR
|
|
cppflags += -DUSE_VALIDATOR
|
|
endif
|
|
|
|
ldflags = \
|
|
-ldl \
|
|
-rdynamic \
|
|
-fsanitize=address \
|
|
|
|
# make rules
|
|
ifneq ($V,1)
|
|
q := @
|
|
cmd-echo := true
|
|
cmd-echo-silent := echo
|
|
else
|
|
q :=
|
|
cmd-echo := echo
|
|
cmd-echo-silent := true
|
|
endif
|
|
|
|
ssrc := $(patsubst %.S, %.o, $(filter %.S, $(srcs)))
|
|
csrc := $(patsubst %.c, %.o, $(filter %.c, $(srcs)))
|
|
cppsrc := $(patsubst %.cpp, %.o, $(filter %.cpp, $(srcs)))
|
|
ccsrc := $(patsubst %.cc, %.o, $(filter %.cc, $(srcs)))
|
|
objs := $(sort $(addprefix $(builddir), $(csrc) $(cppsrc) $(ccsrc) $(ssrc)))
|
|
|
|
includes := $(addprefix $(srcdir), $(incs)) $(global-incs)
|
|
|
|
.PHONY: all
|
|
all: $(builddir)$(output)
|
|
|
|
$(builddir)$(output): $(objs)
|
|
@$(cmd-echo-silent) ' LD $@'
|
|
${q}$(cxx) -o $@ $(objs) $(ldflags)
|
|
|
|
$(builddir)%.o: $(srcdir)%.c
|
|
${q}mkdir -p $(shell dirname $@)
|
|
@$(cmd-echo-silent) ' CC $@'
|
|
${q}$(cc) $(cflags_c) -c $< -o $@
|
|
|
|
$(builddir)%.o: $(srcdir)%.cc
|
|
${q}mkdir -p $(shell dirname $@)
|
|
@$(cmd-echo-silent) ' CPP $@'
|
|
${q}$(cxx) $(cppflags) -c $< -o $@
|
|
|
|
$(builddir)%.o: $(srcdir)%.cpp
|
|
${q}mkdir -p $(shell dirname $@)
|
|
@$(cmd-echo-silent) ' CPP $@'
|
|
$(cxx) $(cppflags) -c $< -o $@
|
|
|
|
$(builddir)%.o: $(srcdir)%.S
|
|
${q}mkdir -p $(shell dirname $@)
|
|
@$(cmd-echo-silent) ' CC $@'
|
|
${q}$(cc) $(cflags_c) -c $< -o $@
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@$(cmd-echo-silent) ' CLEAN $(builddir)'
|
|
${q}rm -f $(objs) $(output)
|
|
@if [ -d $(builddir) ]; then rm -r $(builddir); fi
|