xref: /OK3568_Linux_fs/device/rockchip/common/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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