1*4882a593Smuzhiyun# Makefile for Rockchip Linux SDK 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Based on buildroot-2022.08's Makefile 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org> 6*4882a593Smuzhiyun# Copyright (C) 2006-2014 by the Buildroot developers <buildroot@uclibc.org> 7*4882a593Smuzhiyun# Copyright (C) 2014-2020 by the Buildroot developers <buildroot@buildroot.org> 8*4882a593Smuzhiyun# Copyright (C) 2022 by Jeffy Chen <jeffy.chen@rock-chips.com> 9*4882a593Smuzhiyun# 10*4882a593Smuzhiyun# This program is free software; you can redistribute it and/or modify 11*4882a593Smuzhiyun# it under the terms of the GNU General Public License as published by 12*4882a593Smuzhiyun# the Free Software Foundation; either version 2 of the License, or 13*4882a593Smuzhiyun# (at your option) any later version. 14*4882a593Smuzhiyun# 15*4882a593Smuzhiyun# This program is distributed in the hope that it will be useful, 16*4882a593Smuzhiyun# but WITHOUT ANY WARRANTY; without even the implied warranty of 17*4882a593Smuzhiyun# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18*4882a593Smuzhiyun# General Public License for more details. 19*4882a593Smuzhiyun# 20*4882a593Smuzhiyun# You should have received a copy of the GNU General Public License 21*4882a593Smuzhiyun# along with this program; if not, write to the Free Software 22*4882a593Smuzhiyun# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23*4882a593Smuzhiyun# 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun#-------------------------------------------------------------- 26*4882a593Smuzhiyun# Just run 'make menuconfig', configure stuff, then run 'make'. 27*4882a593Smuzhiyun# You shouldn't need to mess with anything beyond this point... 28*4882a593Smuzhiyun#-------------------------------------------------------------- 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# Delete default rules. We don't use them. This saves a bit of time. 31*4882a593Smuzhiyun.SUFFIXES: 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun# we want bash as shell 34*4882a593SmuzhiyunSHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 35*4882a593Smuzhiyun else if [ -x /bin/bash ]; then echo /bin/bash; \ 36*4882a593Smuzhiyun else echo sh; fi; fi) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun# Strip quotes and then whitespaces 39*4882a593Smuzhiyunqstrip = $(strip $(subst ",,$(1))) 40*4882a593Smuzhiyun#")) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun# Needed for the foreach loops to loop over the list of hooks, so that 43*4882a593Smuzhiyun# each hook call is properly separated by a newline. 44*4882a593Smuzhiyundefine sep 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun 47*4882a593Smuzhiyunendef 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun# absolute path 50*4882a593SmuzhiyunCOMMON_DIR := $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST))))) 51*4882a593SmuzhiyunDEVICE_DIR := $(abspath $(COMMON_DIR)/..) 52*4882a593SmuzhiyunSDK_DIR := $(abspath $(DEVICE_DIR)/../..) 53*4882a593SmuzhiyunCHIP_DIR := $(DEVICE_DIR)/.chip 54*4882a593SmuzhiyunCONFIG_DIR := $(COMMON_DIR)/configs 55*4882a593SmuzhiyunCONFIG_CONFIG_IN = Config.in 56*4882a593SmuzhiyunCONFIG = $(SDK_DIR)/buildroot/support/kconfig 57*4882a593SmuzhiyunOUTDIR := $(SDK_DIR)/output 58*4882a593SmuzhiyunBUILD_DIR := $(OUTDIR)/kconf 59*4882a593SmuzhiyunSCRIPT_TARGETS := $(shell $(SDK_DIR)/build.sh make-targets) 60*4882a593Smuzhiyun 61*4882a593SmuzhiyunRK_CONFIG = $(OUTDIR)/.config 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun# To put more focus on warnings, be less verbose as default 64*4882a593Smuzhiyun# Use 'make V=1' to see the full commands 65*4882a593Smuzhiyunifeq ("$(origin V)", "command line") 66*4882a593Smuzhiyun KBUILD_VERBOSE = $(V) 67*4882a593Smuzhiyunendif 68*4882a593Smuzhiyunifndef KBUILD_VERBOSE 69*4882a593Smuzhiyun KBUILD_VERBOSE = 0 70*4882a593Smuzhiyunendif 71*4882a593Smuzhiyun 72*4882a593Smuzhiyunifeq ($(KBUILD_VERBOSE),1) 73*4882a593Smuzhiyun Q = 74*4882a593Smuzhiyunifndef VERBOSE 75*4882a593Smuzhiyun VERBOSE = 1 76*4882a593Smuzhiyunendif 77*4882a593Smuzhiyunexport VERBOSE 78*4882a593Smuzhiyunelse 79*4882a593Smuzhiyun Q = @ 80*4882a593Smuzhiyunendif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun# Default to build script's default target 83*4882a593Smuzhiyun.PHONY: build 84*4882a593Smuzhiyunbuild: 85*4882a593Smuzhiyun $(Q)$(SDK_DIR)/build.sh 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun# kconfig uses CONFIG_SHELL 88*4882a593SmuzhiyunCONFIG_SHELL := $(SHELL) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyunexport SHELL CONFIG_SHELL Q KBUILD_VERBOSE 91*4882a593Smuzhiyun 92*4882a593SmuzhiyunHOSTCC := gcc 93*4882a593SmuzhiyunHOSTCXX := g++ 94*4882a593Smuzhiyun 95*4882a593Smuzhiyunexport HOSTCC HOSTCXX 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun# silent mode requested? 98*4882a593SmuzhiyunQUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun$(BUILD_DIR)/auto.conf: $(RK_CONFIG) 101*4882a593Smuzhiyun make -j1 $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC)" HOSTCXX="$(HOSTCXX)" syncconfig 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun$(BUILD_DIR)/%onf: 104*4882a593Smuzhiyun mkdir -p $(@D)/lxdialog 105*4882a593Smuzhiyun make CC="$(HOSTCC)" HOSTCC="$(HOSTCC)" \ 106*4882a593Smuzhiyun obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F) 107*4882a593Smuzhiyun 108*4882a593SmuzhiyunTARGET_DEFCONFIG := $(filter %_defconfig,$(MAKECMDGOALS)) 109*4882a593Smuzhiyunifneq ($(TARGET_DEFCONFIG),) 110*4882a593SmuzhiyunRK_DEFCONFIG := $(realpath $(CHIP_DIR)/$(TARGET_DEFCONFIG)) 111*4882a593Smuzhiyunelse 112*4882a593SmuzhiyunRK_DEFCONFIG := $(shell [ -e ${RK_CONFIG} ] && \ 113*4882a593Smuzhiyun grep RK_DEFCONFIG ${RK_CONFIG} | cut -d'=' -f2) 114*4882a593Smuzhiyunendif 115*4882a593SmuzhiyunDEFCONFIG := $(call qstrip,$(RK_DEFCONFIG)) 116*4882a593SmuzhiyunDEFCONFIG_NAME := $(notdir $(DEFCONFIG)) 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun# Setup some default values 119*4882a593SmuzhiyunRK_CHIP_FAMILY := $(notdir $(realpath $(CHIP_DIR))) 120*4882a593SmuzhiyunRK_CHIP := $(shell echo ${DEFCONFIG_NAME} | \ 121*4882a593Smuzhiyun cut -d'_' -f2 | grep -E "^(px|rk|rv)") 122*4882a593Smuzhiyun 123*4882a593SmuzhiyunCOMMON_CONFIG_ENV = \ 124*4882a593Smuzhiyun RK_DEFCONFIG='$(call qstrip,$(RK_DEFCONFIG))' \ 125*4882a593Smuzhiyun RK_CHIP_FAMILY='$(call qstrip,$(RK_CHIP_FAMILY))' \ 126*4882a593Smuzhiyun RK_CHIP='$(call qstrip,$(RK_CHIP))' \ 127*4882a593Smuzhiyun KCONFIG_AUTOCONFIG=$(BUILD_DIR)/auto.conf \ 128*4882a593Smuzhiyun KCONFIG_AUTOHEADER=$(BUILD_DIR)/autoconf.h \ 129*4882a593Smuzhiyun KCONFIG_TRISTATE=$(BUILD_DIR)/tristate.config \ 130*4882a593Smuzhiyun srctree=$(CONFIG_DIR) BR2_CONFIG=$(RK_CONFIG) 131*4882a593Smuzhiyun 132*4882a593Smuzhiyunmenuconfig: $(BUILD_DIR)/mconf 133*4882a593Smuzhiyun $(Q)$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun.PHONY: menuconfig 136*4882a593Smuzhiyun 137*4882a593Smuzhiyunoldconfig syncconfig olddefconfig: $(BUILD_DIR)/conf 138*4882a593Smuzhiyun $(Q)$(COMMON_CONFIG_ENV) $< --$@ $(CONFIG_CONFIG_IN) 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun.PHONY: oldconfig syncconfig olddefconfig 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun%_defconfig: $(BUILD_DIR)/conf $(CHIP_DIR)/%_defconfig 143*4882a593Smuzhiyun $(Q)$(COMMON_CONFIG_ENV) $< --defconfig=$(CHIP_DIR)/$@ $(CONFIG_CONFIG_IN) 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun.PHONY: %_defconfig 146*4882a593Smuzhiyun 147*4882a593Smuzhiyunsavedefconfig: $(BUILD_DIR)/conf 148*4882a593Smuzhiyun $(Q)$(COMMON_CONFIG_ENV) $< \ 149*4882a593Smuzhiyun --savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CHIP_DIR)/defconfig) \ 150*4882a593Smuzhiyun $(CONFIG_CONFIG_IN) 151*4882a593Smuzhiyun $(Q)sed '/^RK_DEFCONFIG=/d' $(if $(DEFCONFIG),$(DEFCONFIG),$(CHIP_DIR)/defconfig) 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun.PHONY: savedefconfig 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun.PHONY: help 156*4882a593Smuzhiyunhelp: 157*4882a593Smuzhiyun @echo ' menuconfig - interactive curses-based configurator' 158*4882a593Smuzhiyun @echo ' oldconfig - resolve any unresolved symbols in .config' 159*4882a593Smuzhiyun @echo ' syncconfig - Same as oldconfig, but quietly, additionally update deps' 160*4882a593Smuzhiyun @echo ' olddefconfig - Same as syncconfig but sets new symbols to their default value' 161*4882a593Smuzhiyun @echo ' savedefconfig - Save current config to RK_DEFCONFIG (minimal config)' 162*4882a593Smuzhiyun @echo ' clean - Cleanup' 163*4882a593Smuzhiyun @echo 164*4882a593Smuzhiyun @echo 'from build.sh:' 165*4882a593Smuzhiyun @$(SDK_DIR)/build.sh make-usage 166*4882a593Smuzhiyun 167*4882a593Smuzhiyundefine script_target 168*4882a593Smuzhiyun$(1): 169*4882a593Smuzhiyun $(Q)$(SDK_DIR)/build.sh $$@ 170*4882a593Smuzhiyunendef 171*4882a593Smuzhiyun$(eval $(foreach t,$(SCRIPT_TARGETS),$(call script_target,$(t))$(sep))) 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun.PHONY: $(SCRIPT_TARGETS) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun.PHONY: clean 176*4882a593Smuzhiyunclean: 177*4882a593Smuzhiyunifeq ($(RK_SESSION),) 178*4882a593Smuzhiyun $(Q)$(SDK_DIR)/build.sh cleanall 179*4882a593Smuzhiyunendif 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun.PHONY: distclean 182*4882a593Smuzhiyundistclean: clean 183*4882a593Smuzhiyun $(Q)rm -rf $(BUILD_DIR) $(RK_CONFIG)* 184