PageRenderTime 2408ms CodeModel.GetById 2ms RepoModel.GetById 0ms app.codeStats 0ms

/Makefile

https://gitlab.com/unlogic/radare-mirror
Makefile | 418 lines | 351 code | 60 blank | 7 comment | 48 complexity | 7ceaa55ff601ac6fb795146b99cc78f4 MD5 | raw file
  1. -include config-user.mk
  2. include global.mk
  3. PREVIOUS_RELEASE=1.4.0
  4. R2R=radare2-regressions
  5. R2R_URL=$(shell doc/repo REGRESSIONS)
  6. R2BINS=$(shell cd binr ; echo r*2 r2agent r2pm r2-indent)
  7. BUILDSEC=$(shell date "+__%H:%M:%S")
  8. DATADIRS=libr/cons/d libr/bin/d libr/asm/d libr/syscall/d libr/magic/d libr/anal/d
  9. USE_ZIP=YES
  10. ZIP=zip
  11. R2VC=$(shell git rev-list --all --count 2>/dev/null)
  12. ifeq ($(R2VC),)
  13. # release
  14. R2VC=0
  15. endif
  16. STRIP?=strip
  17. ifneq ($(shell xz --help 2>/dev/null | grep improve),)
  18. TAR=tar -cvf
  19. TAREXT=tar.xz
  20. CZ=xz -f
  21. else
  22. TAR=bsdtar cvf
  23. TAREXT=tar.gz
  24. CZ=gzip -f
  25. endif
  26. PWD=$(shell pwd)
  27. # For echo without quotes
  28. Q='
  29. ESC=
  30. ifeq ($(BUILD_OS),windows)
  31. ifeq ($(OSTYPE),mingw32)
  32. ifneq (,$(findstring mingw32-make,$(MAKE)))
  33. ifneq ($(APPVEYOR),True)
  34. Q=
  35. ESC=^
  36. LC_ALL=C
  37. export LC_ALL
  38. endif
  39. endif
  40. endif
  41. endif
  42. all: plugins.cfg libr/include/r_version.h
  43. ${MAKE} -C shlr/zip
  44. ${MAKE} -C libr/util
  45. ${MAKE} -C libr/socket
  46. ${MAKE} -C shlr
  47. ${MAKE} -C libr
  48. ${MAKE} -C binr
  49. #.PHONY: libr/include/r_version.h
  50. GIT_TAP=$(shell git describe --tags --match "[0-9]*" 2>/dev/null || echo $(VERSION))
  51. GIT_TIP=$(shell git rev-parse HEAD 2>/dev/null || echo HEAD)
  52. ifndef SOURCE_DATE_EPOCH
  53. GIT_NOW=$(shell date +%Y-%m-%d)
  54. else
  55. GIT_NOW=$(shell date --utc --date="@$$SOURCE_DATE_EPOCH" +%Y-%m-%d)
  56. endif
  57. libr/include/r_version.h:
  58. @echo Generating r_version.h file
  59. @echo $(Q)#ifndef R_VERSION_H$(Q) > $@.tmp
  60. @echo $(Q)#define R_VERSION_H 1$(Q) >> $@.tmp
  61. @echo $(Q)#define R2_VERSION_COMMIT $(R2VC)$(Q) >> $@.tmp
  62. @echo $(Q)#define R2_GITTAP $(ESC)"$(GIT_TAP)$(ESC)"$(Q) >> $@.tmp
  63. @echo $(Q)#define R2_GITTIP $(ESC)"$(GIT_TIP)$(ESC)"$(Q) >> $@.tmp
  64. @echo $(Q)#define R2_BIRTH $(ESC)"$(GIT_NOW)$(BUILDSEC)$(ESC)"$(Q) >> $@.tmp
  65. @echo $(Q)#endif$(Q) >> $@.tmp
  66. @mv -f $@.tmp $@
  67. @rm -f $@.tmp
  68. plugins.cfg:
  69. @if [ ! -e config-user.mk ]; then echo ; \
  70. echo " Please, run ./configure first" ; echo ; exit 1 ; fi
  71. sh configure-plugins
  72. w32:
  73. sys/mingw32.sh
  74. depgraph.png:
  75. cd libr ; perl depgraph.pl dot | dot -Tpng -o../depgraph.png
  76. android:
  77. @if [ -z "$(NDK_ARCH)" ]; then echo "Set NDK_ARCH=[arm|arm64|mips|x86]" ; false; fi
  78. sys/android-${NDK_ARCH}.sh
  79. w32dist:
  80. ${MAKE} windist WINBITS=w32
  81. w64dist:
  82. ${MAKE} windist WINBITS=w64
  83. WINDIST=${WINBITS}dist
  84. C=$(shell printf "\033[32m")
  85. R=$(shell printf "\033[0m")
  86. windist:
  87. @echo "${C}[WINDIST] Installing binaries and libraries${R}"
  88. [ -n "${WINBITS}" ] || exit 1
  89. rm -rf "radare2-${WINBITS}-${VERSION}" "${WINDIST}"
  90. mkdir "${WINDIST}"
  91. for FILE in `find libr | grep -e dll$$`; do cp "$$FILE" "${WINDIST}" ; done
  92. for FILE in `find binr | grep -e exe$$`; do cp "$$FILE" "${WINDIST}" ; done
  93. rm -f "${WINDIST}/plugin.dll"
  94. @echo "${C}[WINDIST] Picking plugins from libraries${R}"
  95. mkdir -p "${WINDIST}/libs"
  96. mv "${WINDIST}/"lib*.dll "${WINDIST}/libs"
  97. mkdir -p "${WINDIST}/plugins"
  98. mv ${WINDIST}/*.dll "${WINDIST}/plugins"
  99. mv ${WINDIST}/libs/* "${WINDIST}"
  100. @echo "${C}[WINDIST] Do not include plugins for now${R}"
  101. rm -rf "${WINDIST}/libs"
  102. rm -rf ${WINDIST}/plugins/*
  103. @echo "${C}[WINDIST] Copying web interface${R}"
  104. mkdir -p "${WINDIST}/www"
  105. cp -rf shlr/www/* "${WINDIST}/www"
  106. mkdir -p "${WINDIST}/share/radare2/${VERSION}/magic"
  107. cp -f libr/magic/d/default/* "${WINDIST}/share/radare2/${VERSION}/magic"
  108. mkdir -p "${WINDIST}/share/radare2/${VERSION}/syscall"
  109. cp -f libr/syscall/d/*.sdb "${WINDIST}/share/radare2/${VERSION}/syscall"
  110. mkdir -p "${WINDIST}/share/radare2/${VERSION}/fcnsign"
  111. cp -f libr/anal/d/*.sdb "${WINDIST}/share/radare2/${VERSION}/fcnsign"
  112. mkdir -p "${WINDIST}/share/radare2/${VERSION}/opcodes"
  113. cp -f libr/asm/d/*.sdb "${WINDIST}/share/radare2/${VERSION}/opcodes"
  114. mkdir -p "${WINDIST}/share/doc/radare2"
  115. mkdir -p "${WINDIST}/include/libr/sdb"
  116. mkdir -p "${WINDIST}/include/libr/r_util"
  117. @echo "${C}[WINDIST] Copying development files${R}"
  118. cp -f libr/include/sdb/*.h "${WINDIST}/include/libr/sdb/"
  119. cp -f libr/include/r_util/*.h "${WINDIST}/include/libr/r_util/"
  120. cp -f libr/include/*.h "${WINDIST}/include/libr"
  121. #mkdir -p "${WINDIST}/include/libr/sflib"
  122. @cp -f doc/fortunes.* "${WINDIST}/share/doc/radare2"
  123. @mkdir -p "${WINDIST}/share/radare2/${VERSION}/format/dll"
  124. @cp -f libr/bin/d/elf32 "${WINDIST}/share/radare2/${VERSION}/format"
  125. @cp -f libr/bin/d/elf64 "${WINDIST}/share/radare2/${VERSION}/format"
  126. @cp -f libr/bin/d/elf_enums "${WINDIST}/share/radare2/${VERSION}/format"
  127. @cp -f libr/bin/d/pe32 "${WINDIST}/share/radare2/${VERSION}/format"
  128. @cp -f libr/bin/d/trx "${WINDIST}/share/radare2/${VERSION}/format"
  129. @cp -f libr/bin/d/dll/*.sdb "${WINDIST}/share/radare2/${VERSION}/format/dll"
  130. @mkdir -p "${WINDIST}/share/radare2/${VERSION}/cons"
  131. @cp -f libr/cons/d/* "${WINDIST}/share/radare2/${VERSION}/cons"
  132. @mkdir -p "${WINDIST}/share/radare2/${VERSION}/hud"
  133. @cp -f doc/hud "${WINDIST}/share/radare2/${VERSION}/hud/main"
  134. @mv "${WINDIST}" "radare2-${WINBITS}-${VERSION}"
  135. @rm -f "radare2-${WINBITS}-${VERSION}.zip"
  136. ifneq ($(USE_ZIP),NO)
  137. $(ZIP) -r "radare2-${WINBITS}-${VERSION}.zip" "radare2-${WINBITS}-${VERSION}"
  138. endif
  139. clean: rmd
  140. rm -f libr/libr.a
  141. for DIR in shlr libr binr ; do (cd "$$DIR" ; ${MAKE} clean) ; done
  142. distclean mrproper:
  143. -rm -f `find . -type f -name '*.d'`
  144. rm -f `find . -type f -name '*.o'`
  145. rm -f libr/libr.a
  146. for DIR in libr binr shlr ; do ( cd "$$DIR" ; ${MAKE} mrproper) ; done
  147. rm -f config-user.mk plugins.cfg libr/config.h
  148. rm -f libr/include/r_userconf.h libr/include/r_version.h libr/config.mk
  149. rm -f pkgcfg/*.pc
  150. pkgcfg:
  151. cd libr && ${MAKE} pkgcfg
  152. install-man:
  153. mkdir -p "${DESTDIR}${MANDIR}/man1"
  154. mkdir -p "${DESTDIR}${MANDIR}/man7"
  155. for FILE in man/*.1 ; do ${INSTALL_MAN} "$$FILE" "${DESTDIR}${MANDIR}/man1" ; done
  156. cd "${DESTDIR}${MANDIR}/man1" && ln -fs radare2.1 r2.1
  157. for FILE in man/*.7 ; do ${INSTALL_MAN} "$$FILE" "${DESTDIR}${MANDIR}/man7" ; done
  158. install-man-symlink:
  159. mkdir -p "${DESTDIR}${MANDIR}/man1"
  160. mkdir -p "${DESTDIR}${MANDIR}/man7"
  161. cd man && for FILE in *.1 ; do \
  162. ln -fs "${PWD}/man/$$FILE" "${DESTDIR}${MANDIR}/man1/$$FILE" ; done
  163. cd "${DESTDIR}${MANDIR}/man1" && ln -fs radare2.1 r2.1
  164. for FILE in *.7 ; do \
  165. ln -fs "${PWD}/man/$$FILE" "${DESTDIR}${MANDIR}/man7/$$FILE" ; done
  166. install-doc:
  167. ${INSTALL_DIR} "${DESTDIR}${DOCDIR}"
  168. for FILE in doc/* ; do ${INSTALL_DATA} $$FILE "${DESTDIR}${DOCDIR}" ; done
  169. install-doc-symlink:
  170. ${INSTALL_DIR} "${DESTDIR}${DOCDIR}"
  171. cd doc ; for FILE in * ; do \
  172. ln -fs "${PWD}/doc/$$FILE" "${DESTDIR}${DOCDIR}" ; done
  173. install love: install-doc install-man install-www
  174. cd libr && ${MAKE} install PARENT=1
  175. cd binr && ${MAKE} install
  176. cd shlr && ${MAKE} install
  177. for DIR in ${DATADIRS} ; do \
  178. (cd "$$DIR" ; ${MAKE} install ); \
  179. done
  180. cd "$(DESTDIR)$(LIBDIR)/radare2/" ;\
  181. rm -f last ; ln -fs $(VERSION) last
  182. cd "$(DESTDIR)$(DATADIR)/radare2/" ;\
  183. rm -f last ; ln -fs $(VERSION) last
  184. rm -rf "${DESTDIR}${DATADIR}/radare2/${VERSION}/hud"
  185. mkdir -p "${DESTDIR}${DATADIR}/radare2/${VERSION}/hud"
  186. mkdir -p "${DESTDIR}${BINDIR}"
  187. ln -fs "${PWD}/sys/indent.sh" "${DESTDIR}${BINDIR}/r2-indent"
  188. ln -fs "${PWD}/sys/r2-docker.sh" "${DESTDIR}${BINDIR}/r2-docker"
  189. cp -f doc/hud "${DESTDIR}${DATADIR}/radare2/${VERSION}/hud/main"
  190. mkdir -p "${DESTDIR}${DATADIR}/radare2/${VERSION}/"
  191. sys/ldconfig.sh
  192. ./configure-plugins --rm-static $(DESTDIR)/$(LIBDIR)/radare2/last/
  193. # Remove make .d files. fixes build when .c files are removed
  194. rmd:
  195. rm -f `find . -type f -iname '*.d'`
  196. install-www:
  197. rm -rf "${DESTDIR}${WWWROOT}"
  198. rm -rf "${DESTDIR}${LIBDIR}/radare2/${VERSION}/www" # old dir
  199. mkdir -p "${DESTDIR}${WWWROOT}"
  200. cp -rf shlr/www/* "${DESTDIR}${WWWROOT}"
  201. symstall-www:
  202. rm -rf "${DESTDIR}${WWWROOT}"
  203. rm -rf "${DESTDIR}${LIBDIR}/radare2/${VERSION}/www" # old dir
  204. mkdir -p "${DESTDIR}${WWWROOT}"
  205. cd "${DESTDIR}${WWWROOT}" ; \
  206. for FILE in "${PWD}/shlr/www/"* ; do \
  207. ln -fs "$$FILE" "$(DESTDIR)$(WWWROOT)" ; done
  208. install-pkgconfig-symlink:
  209. @${INSTALL_DIR} "${DESTDIR}${LIBDIR}/pkgconfig"
  210. cd pkgcfg ; for FILE in *.pc ; do \
  211. ln -fs "$${PWD}/$$FILE" "${DESTDIR}${LIBDIR}/pkgconfig/$$FILE" ; done
  212. symstall install-symlink: install-man-symlink install-doc-symlink install-pkgconfig-symlink symstall-www
  213. cd libr && ${MAKE} install-symlink
  214. cd binr && ${MAKE} install-symlink
  215. cd shlr && ${MAKE} install-symlink
  216. for DIR in ${DATADIRS} ; do (\
  217. cd "$$DIR" ; \
  218. echo "$$DIR" ; \
  219. ${MAKE} install-symlink ); \
  220. done
  221. mkdir -p "${DESTDIR}${BINDIR}"
  222. ln -fs "${PWD}/sys/indent.sh" "${DESTDIR}${BINDIR}/r2-indent"
  223. ln -fs "${PWD}/sys/r2-docker.sh" "${DESTDIR}${BINDIR}/r2-docker"
  224. mkdir -p "${DESTDIR}${DATADIR}/radare2/${VERSION}/hud"
  225. cd "$(DESTDIR)$(LIBDIR)/radare2/" ;\
  226. rm -f last ; ln -fs $(VERSION) last
  227. cd "$(DESTDIR)$(DATADIR)/radare2/" ;\
  228. rm -f last ; ln -fs $(VERSION) last
  229. ln -fs "${PWD}/doc/hud" "${DESTDIR}${DATADIR}/radare2/${VERSION}/hud/main"
  230. mkdir -p "${DESTDIR}${DATADIR}/radare2/${VERSION}/"
  231. sys/ldconfig.sh
  232. ./configure-plugins --rm-static $(DESTDIR)/$(LIBDIR)/radare2/last/
  233. deinstall uninstall:
  234. rm -f $(DESTDIR)$(BINDIR)/r2-indent
  235. rm -f $(DESTDIR)$(BINDIR)/r2-docker
  236. cd libr && ${MAKE} uninstall PARENT=1
  237. cd binr && ${MAKE} uninstall PARENT=1
  238. cd shlr && ${MAKE} uninstall PARENT=1
  239. cd libr/syscall/d && ${MAKE} uninstall PARENT=1
  240. cd libr/anal/d && ${MAKE} uninstall PARENT=1
  241. @echo
  242. @echo "Run 'make purge' to also remove installed files from previous versions of r2"
  243. @echo
  244. purge-doc:
  245. rm -rf "${DESTDIR}${DOCDIR}"
  246. cd man ; for FILE in *.1 ; do rm -f "${DESTDIR}${MANDIR}/man1/$$FILE" ; done
  247. rm -f "${DESTDIR}${MANDIR}/man1/r2.1"
  248. user-wrap=echo "\#!/bin/sh" > ~/bin/"$1" \
  249. ; echo "${PWD}/env.sh '${PREFIX}' '$1' \"\$$@\"" >> ~/bin/"$1" \
  250. ; chmod +x ~/bin/"$1" ;
  251. user-install:
  252. mkdir -p ~/bin
  253. $(foreach mod,$(R2BINS),$(call user-wrap,$(mod)))
  254. cd ~/bin ; ln -fs radare2 r2
  255. user-uninstall:
  256. $(foreach mod,$(R2BINS),rm -f ~/bin/"$(mod)")
  257. rm -f ~/bin/r2
  258. -rmdir ~/bin
  259. purge-dev:
  260. rm -f "${DESTDIR}${LIBDIR}/libr_"*".${EXT_AR}"
  261. rm -f "${DESTDIR}${LIBDIR}/pkgconfig/r_"*.pc
  262. rm -rf "${DESTDIR}${INCLUDEDIR}/libr"
  263. rm -f "${DESTDIR}${LIBDIR}/radare2/${VERSION}/-"*
  264. strip:
  265. -for FILE in ${R2BINS} ; do ${STRIP} -s "${DESTDIR}${BINDIR}/$$FILE" 2> /dev/null ; done
  266. -for FILE in "${DESTDIR}${LIBDIR}/libr_"*".${EXT_SO}" "${DESTDIR}${LIBDIR}/libr2.${EXT_SO}" ; do \
  267. ${STRIP} -s "$$FILE" ; done
  268. purge: purge-doc purge-dev user-uninstall
  269. for FILE in ${R2BINS} ; do rm -f "${DESTDIR}${BINDIR}/$$FILE" ; done
  270. rm -f "${DESTDIR}${BINDIR}/ragg2-cc"
  271. rm -f "${DESTDIR}${BINDIR}/r2"
  272. rm -f "${DESTDIR}${LIBDIR}/libr_"*
  273. rm -f "${DESTDIR}${LIBDIR}/libr2.${EXT_SO}"
  274. rm -rf "${DESTDIR}${LIBDIR}/radare2"
  275. rm -rf "${DESTDIR}${INCLUDEDIR}/libr"
  276. purge2:
  277. $(MAKE) purge
  278. ifneq ($(PREFIX),/usr)
  279. $(MAKE) purge PREFIX=/usr
  280. endif
  281. ifneq ($(PREFIX),/usr/local)
  282. $(MAKE) purge PREFIX=/usr/local
  283. endif
  284. R2V=radare2-${VERSION}
  285. dist:
  286. rm -rf $(R2V)
  287. git clone . $(R2V)
  288. -cd $(R2V) && [ ! -f config-user.mk -o configure -nt config-user.mk ] && ./configure "--prefix=${PREFIX}"
  289. cd $(R2V) ; git log $$(git show-ref | grep ${PREVIOUS_RELEASE} | awk '{print $$1}')..HEAD > ChangeLog
  290. $(MAKE) -C $(R2V)/shlr capstone-sync
  291. FILES=`cd $(R2V); git ls-files | sed -e "s,^,$(R2V)/,"` ; \
  292. CS_FILES=`cd $(R2V)/shlr/capstone ; git ls-files | grep -v pdf | grep -v xcode | grep -v msvc | grep -v suite | grep -v bindings | grep -v tests | sed -e "s,^,$(R2V)/shlr/capstone/,"` ; \
  293. ${TAR} "radare2-${VERSION}.tar" $${FILES} $${CS_FILES} "$(R2V)/ChangeLog" ; \
  294. ${CZ} "radare2-${VERSION}.tar"
  295. olddist:
  296. -[ configure -nt config-user.mk ] && ./configure "--prefix=${PREFIX}"
  297. #git log $$(git show-ref `git tag |tail -n1`)..HEAD > ChangeLog
  298. git log $$(git show-ref | grep ${PREVIOUS_RELEASE} | awk '{print $$1}')..HEAD > ChangeLog
  299. cd shlr && ${MAKE} capstone-sync
  300. DIR=`basename "$$PWD"` ; \
  301. FILES=`git ls-files | sed -e "s,^,radare2-${VERSION}/,"` ; \
  302. CS_FILES=`cd shlr/capstone ; git ls-files | grep -v pdf | grep -v xcode | grep -v msvc | grep -v suite | grep -v bindings | grep -v tests | sed -e "s,^,radare2-${VERSION}/shlr/capstone/,"` ; \
  303. cd .. && mv "$${DIR}" "radare2-${VERSION}" && \
  304. ${TAR} "radare2-${VERSION}.tar" $${FILES} $${CS_FILES} "radare2-${VERSION}/ChangeLog" ; \
  305. ${CZ} "radare2-${VERSION}.tar" ; \
  306. mv "radare2-${VERSION}" "$${DIR}"
  307. shot:
  308. DATE=`date '+%Y%m%d'` ; \
  309. FILES=`git ls-files | sed -e "s,^,radare2-${DATE}/,"` ; \
  310. cd .. && mv radare2 "radare2-$${DATE}" && \
  311. ${TAR} "radare2-$${DATE}.tar" $${FILES} ;\
  312. ${CZ} "radare2-$${DATE}.tar" ;\
  313. mv "radare2-$${DATE}" radare2 && \
  314. scp "radare2-$${DATE}.${TAREXT}" \
  315. radare.org:/srv/http/radareorg/get/shot
  316. tests:
  317. @if [ -d $(R2R) ]; then \
  318. cd $(R2R) ; git clean -xdf ; git pull ; \
  319. else \
  320. git clone --depth 1 "${R2R_URL}" "$(R2R)"; \
  321. fi
  322. cd $(R2R) ; ${MAKE}
  323. osx-sign:
  324. $(MAKE) -C binr/radare2 osx-sign
  325. osx-sign-libs:
  326. $(MAKE) -C binr/radare2 osx-sign-libs
  327. osx-pkg:
  328. sys/osx-pkg.sh $(VERSION)
  329. quality:
  330. ./sys/shellcheck.sh
  331. menu nconfig:
  332. ./sys/menu.sh || true
  333. pie:
  334. sys/pie.sh ${PREVIOUS_RELEASE}
  335. build:
  336. meson --prefix=${PREFIX} build
  337. meson-windows:
  338. cp -f libr/config.mk.meson libr/config.mk
  339. cp -f libr/config.h.meson libr/config.h
  340. meson-config:
  341. cp -f plugins.meson.cfg plugins.cfg
  342. ./configure-plugins
  343. # TODO: this is wrong for each platform different plugins must be compiled
  344. cp -f libr/config.mk libr/config.mk.meson
  345. cp -f libr/config.h libr/config.h.meson
  346. $(MAKE) meson
  347. meson: build
  348. ninja -C build
  349. meson-install:
  350. cd build && DESTDIR="$(DESTDIR)" ninja install
  351. MESON_FILES=$(shell find build/libr build/binr -type f| grep -v @)
  352. meson-symstall:
  353. for a in $(MESON_FILES) ; do echo cp -f $$a $$(echo $$a|sed -e s,build/,,) ; done
  354. $(MAKE) symstall
  355. .PHONY: meson meson-install
  356. include ${MKPLUGINS}
  357. .PHONY: all clean distclean mrproper install symstall uninstall deinstall strip
  358. .PHONY: libr binr install-man w32dist tests dist shot pkgcfg depgraph.png love