1204431Sraj# 2204431Sraj# Device Tree Compiler 3204431Sraj# 4204431Sraj 5204431Sraj# 6204431Sraj# Version information will be constructed in this order: 7204431Sraj# EXTRAVERSION might be "-rc", for example. 8204431Sraj# LOCAL_VERSION is likely from command line. 9204431Sraj# CONFIG_LOCALVERSION from some future config system. 10204431Sraj# 11204431SrajVERSION = 1 12261215SimpPATCHLEVEL = 4 13318102SgonzoSUBLEVEL = 3 14204431SrajEXTRAVERSION = 15204431SrajLOCAL_VERSION = 16204431SrajCONFIG_LOCALVERSION = 17204431Sraj 18238742SimpCPPFLAGS = -I libfdt -I . 19318102SgonzoWARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \ 20318102Sgonzo -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow 21238742SimpCFLAGS = -g -Os -fPIC -Werror $(WARNINGS) 22204431Sraj 23204431SrajBISON = bison 24204431SrajLEX = flex 25204431Sraj 26204431SrajINSTALL = /usr/bin/install 27204431SrajDESTDIR = 28204431SrajPREFIX = $(HOME) 29204431SrajBINDIR = $(PREFIX)/bin 30204431SrajLIBDIR = $(PREFIX)/lib 31204431SrajINCLUDEDIR = $(PREFIX)/include 32204431Sraj 33204433SrajHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ 34204433Sraj sed -e 's/\(cygwin\).*/cygwin/') 35204433Sraj 36204433Srajifeq ($(HOSTOS),darwin) 37204433SrajSHAREDLIB_EXT=dylib 38204433SrajSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl, 39204433Srajelse 40204433SrajSHAREDLIB_EXT=so 41204433SrajSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname, 42204433Srajendif 43204433Sraj 44204431Sraj# 45204431Sraj# Overall rules 46204431Sraj# 47204431Srajifdef V 48204431SrajVECHO = : 49204431Srajelse 50204431SrajVECHO = echo " " 51243933SeadlerARFLAGS ?= rc 52204431Sraj.SILENT: 53204431Srajendif 54204431Sraj 55204431SrajNODEPTARGETS = clean 56204431Srajifeq ($(MAKECMDGOALS),) 57204431SrajDEPTARGETS = all 58204431Srajelse 59204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS)) 60204431Srajendif 61204431Sraj 62204431Sraj# 63204431Sraj# Rules for versioning 64204431Sraj# 65204431Sraj 66204431SrajDTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 67204431SrajVERSION_FILE = version_gen.h 68204431Sraj 69204431SrajCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 70204431Sraj else if [ -x /bin/bash ]; then echo /bin/bash; \ 71204431Sraj else echo sh; fi ; fi) 72204431Sraj 73204431Srajnullstring := 74204431Srajspace := $(nullstring) # end of line 75204431Sraj 76204431Srajlocalver_config = $(subst $(space),, $(string) \ 77204431Sraj $(patsubst "%",%,$(CONFIG_LOCALVERSION))) 78204431Sraj 79204431Srajlocalver_cmd = $(subst $(space),, $(string) \ 80204431Sraj $(patsubst "%",%,$(LOCALVERSION))) 81204431Sraj 82204431Srajlocalver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion) 83204431Srajlocalver_full = $(localver_config)$(localver_cmd)$(localver_scm) 84204431Sraj 85204431Srajdtc_version = $(DTC_VERSION)$(localver_full) 86204431Sraj 87204431Sraj# Contents of the generated version file. 88204431Srajdefine filechk_version 89204431Sraj (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; ) 90204431Srajendef 91204431Sraj 92204431Srajdefine filechk 93204431Sraj set -e; \ 94204431Sraj echo ' CHK $@'; \ 95204431Sraj mkdir -p $(dir $@); \ 96204431Sraj $(filechk_$(1)) < $< > $@.tmp; \ 97204431Sraj if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 98204431Sraj rm -f $@.tmp; \ 99204431Sraj else \ 100204431Sraj echo ' UPD $@'; \ 101204431Sraj mv -f $@.tmp $@; \ 102204431Sraj fi; 103204431Srajendef 104204431Sraj 105204431Sraj 106204433Srajinclude Makefile.convert-dtsv0 107204431Srajinclude Makefile.dtc 108238742Simpinclude Makefile.utils 109204431Sraj 110204433SrajBIN += convert-dtsv0 111204431SrajBIN += dtc 112238742SimpBIN += fdtdump 113238742SimpBIN += fdtget 114238742SimpBIN += fdtput 115204431Sraj 116238742SimpSCRIPTS = dtdiff 117204431Sraj 118204433Srajall: $(BIN) libfdt 119204431Sraj 120204433Sraj 121204431Srajifneq ($(DEPTARGETS),) 122204431Sraj-include $(DTC_OBJS:%.o=%.d) 123204433Sraj-include $(CONVERT_OBJS:%.o=%.d) 124238742Simp-include $(FDTDUMP_OBJS:%.o=%.d) 125238742Simp-include $(FDTGET_OBJS:%.o=%.d) 126238742Simp-include $(FDTPUT_OBJS:%.o=%.d) 127204431Srajendif 128204431Sraj 129204431Sraj 130204431Sraj 131204431Sraj# 132204431Sraj# Rules for libfdt 133204431Sraj# 134204431SrajLIBFDT_objdir = libfdt 135204431SrajLIBFDT_srcdir = libfdt 136204433SrajLIBFDT_archive = $(LIBFDT_objdir)/libfdt.a 137238742SimpLIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) 138204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) 139204433SrajLIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) 140204431Sraj 141204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt 142204431Sraj 143204431Sraj.PHONY: libfdt 144204433Srajlibfdt: $(LIBFDT_archive) $(LIBFDT_lib) 145204431Sraj 146204433Sraj$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 147204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 148204431Sraj 149204431Srajlibfdt_clean: 150204431Sraj @$(VECHO) CLEAN "(libfdt)" 151204431Sraj rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES)) 152204433Sraj rm -f $(LIBFDT_objdir)/*.so 153204431Sraj 154204431Srajifneq ($(DEPTARGETS),) 155204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d) 156204431Srajendif 157204431Sraj 158204433Sraj# This stops make from generating the lex and bison output during 159204433Sraj# auto-dependency computation, but throwing them away as an 160204433Sraj# intermediate target and building them again "for real" 161204433Sraj.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS) 162204433Sraj 163261215Simpinstall-bin: all $(SCRIPTS) 164261215Simp @$(VECHO) INSTALL-BIN 165204433Sraj $(INSTALL) -d $(DESTDIR)$(BINDIR) 166238742Simp $(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR) 167261215Simp 168261215Simpinstall-lib: all 169261215Simp @$(VECHO) INSTALL-LIB 170204433Sraj $(INSTALL) -d $(DESTDIR)$(LIBDIR) 171204433Sraj $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) 172238742Simp ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname) 173238742Simp ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT) 174204433Sraj $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR) 175261215Simp 176261215Simpinstall-includes: 177261215Simp @$(VECHO) INSTALL-INC 178204433Sraj $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) 179204433Sraj $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) 180204433Sraj 181261215Simpinstall: install-bin install-lib install-includes 182261215Simp 183204433Sraj$(VERSION_FILE): Makefile FORCE 184204433Sraj $(call filechk,version) 185204433Sraj 186204433Sraj 187204433Srajdtc: $(DTC_OBJS) 188204433Sraj 189204433Srajconvert-dtsv0: $(CONVERT_OBJS) 190204433Sraj @$(VECHO) LD $@ 191204433Sraj $(LINK.c) -o $@ $^ 192204433Sraj 193238742Simpfdtdump: $(FDTDUMP_OBJS) 194204433Sraj 195238742Simpfdtget: $(FDTGET_OBJS) $(LIBFDT_archive) 196204433Sraj 197238742Simpfdtput: $(FDTPUT_OBJS) $(LIBFDT_archive) 198238742Simp 199318102Sgonzodist: 200318102Sgonzo git archive --format=tar --prefix=dtc-$(dtc_version)/ HEAD \ 201318102Sgonzo > ../dtc-$(dtc_version).tar 202318102Sgonzo cat ../dtc-$(dtc_version).tar | \ 203318102Sgonzo gzip -9 > ../dtc-$(dtc_version).tar.gz 204238742Simp 205204431Sraj# 206318102Sgonzo# Release signing and uploading 207318102Sgonzo# This is for maintainer convenience, don't try this at home. 208318102Sgonzo# 209318102Sgonzoifeq ($(MAINTAINER),y) 210318102SgonzoGPG = gpg2 211318102SgonzoKUP = kup 212318102SgonzoKUPDIR = /pub/software/utils/dtc 213318102Sgonzo 214318102Sgonzokup: dist 215318102Sgonzo $(GPG) --detach-sign --armor -o ../dtc-$(dtc_version).tar.sign \ 216318102Sgonzo ../dtc-$(dtc_version).tar 217318102Sgonzo $(KUP) put ../dtc-$(dtc_version).tar.gz ../dtc-$(dtc_version).tar.sign \ 218318102Sgonzo $(KUPDIR)/dtc-$(dtc_version).tar.gz 219318102Sgonzoendif 220318102Sgonzo 221318102Sgonzotags: FORCE 222318102Sgonzo rm -f tags 223318102Sgonzo find . \( -name tests -type d -prune \) -o \ 224318102Sgonzo \( ! -name '*.tab.[ch]' ! -name '*.lex.c' \ 225318102Sgonzo -name '*.[chly]' -type f -print \) | xargs ctags -a 226318102Sgonzo 227318102Sgonzo# 228204431Sraj# Testsuite rules 229204431Sraj# 230204431SrajTESTS_PREFIX=tests/ 231238742Simp 232238742SimpTESTS_BIN += dtc 233238742SimpTESTS_BIN += convert-dtsv0 234238742SimpTESTS_BIN += fdtput 235238742SimpTESTS_BIN += fdtget 236318102SgonzoTESTS_BIN += fdtdump 237238742Simp 238204431Srajinclude tests/Makefile.tests 239204431Sraj 240204431Sraj# 241204431Sraj# Clean rules 242204431Sraj# 243238742SimpSTD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \ 244204431Sraj *.tab.[ch] *.lex.c *.output 245204431Sraj 246204431Srajclean: libfdt_clean tests_clean 247204431Sraj @$(VECHO) CLEAN 248204431Sraj rm -f $(STD_CLEANFILES) 249204431Sraj rm -f $(VERSION_FILE) 250204431Sraj rm -f $(BIN) 251318102Sgonzo rm -f dtc-*.tar dtc-*.tar.sign dtc-*.tar.asc 252204431Sraj 253204431Sraj# 254204431Sraj# Generic compile rules 255204431Sraj# 256204431Sraj%: %.o 257204431Sraj @$(VECHO) LD $@ 258204431Sraj $(LINK.c) -o $@ $^ 259204431Sraj 260204431Sraj%.o: %.c 261204431Sraj @$(VECHO) CC $@ 262204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 263204431Sraj 264204431Sraj%.o: %.S 265204431Sraj @$(VECHO) AS $@ 266204431Sraj $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $< 267204431Sraj 268204431Sraj%.d: %.c 269204431Sraj @$(VECHO) DEP $< 270204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 271204431Sraj 272204431Sraj%.d: %.S 273204431Sraj @$(VECHO) DEP $< 274204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 275204431Sraj 276204431Sraj%.i: %.c 277204431Sraj @$(VECHO) CPP $@ 278204431Sraj $(CC) $(CPPFLAGS) -E $< > $@ 279204431Sraj 280204431Sraj%.s: %.c 281204431Sraj @$(VECHO) CC -S $@ 282204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $< 283204431Sraj 284204431Sraj%.a: 285204431Sraj @$(VECHO) AR $@ 286204431Sraj $(AR) $(ARFLAGS) $@ $^ 287204431Sraj 288204433Sraj$(LIBFDT_lib): 289204433Sraj @$(VECHO) LD $@ 290238742Simp $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^ 291204433Sraj 292204431Sraj%.lex.c: %.l 293204431Sraj @$(VECHO) LEX $@ 294204431Sraj $(LEX) -o$@ $< 295204431Sraj 296204431Sraj%.tab.c %.tab.h %.output: %.y 297204431Sraj @$(VECHO) BISON $@ 298204431Sraj $(BISON) -d $< 299204431Sraj 300204431SrajFORCE: 301