mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-01 00:51:19 +00:00
434 lines
11 KiB
Makefile
434 lines
11 KiB
Makefile
include ../config-user.mk
|
|
include ../global.mk
|
|
# for EXT_EXE
|
|
include ../libr/config.mk
|
|
include ../mk/platform.mk
|
|
_INCLUDE_MK_GCC_=
|
|
include ../mk/${COMPILER}.mk
|
|
include ../mk/darwin.mk
|
|
|
|
# Build against last capstone release or next
|
|
ifeq ($(shell test -d ../.git && echo 1),1)
|
|
CS_RELEASE=0
|
|
else
|
|
CS_RELEASE=1
|
|
endif
|
|
|
|
CS_NEXT=${CSNEXT}
|
|
|
|
CAPSTONE_CFLAGS?=-g
|
|
# CAPSTONE_MAKEFLAGS?=CAPSTONE_ARCHS="arm aarch64"
|
|
|
|
GIT?=git
|
|
ifeq ($(shell type wget 2> /dev/null && echo 1),1)
|
|
WGET?=wget -c --no-check-certificate -O
|
|
else
|
|
WGET?=curl -o
|
|
endif
|
|
|
|
# NOTE: when you update TS_TIP or TS_BRA, also update them in shlr/meson.build
|
|
TS_URL=https://github.com/tree-sitter/tree-sitter.git
|
|
TS_BRA=master
|
|
TS_TIP=f049ba350f3f6019ce9a1cbb0975ebd154ef7ad3
|
|
|
|
# NOTE: when you update SHELLPARSER_TIP or SHELLPARSER_BRA, also update them in shlr/meson.build
|
|
SHELLPARSER_URL=https://github.com/ret2libc/radare2-shell-parser.git
|
|
SHELLPARSER_BRA=master
|
|
SHELLPARSER_TIP=36130421da6a698cc65b7f4dd939a803310bbe24
|
|
|
|
ifeq ($(CS_RELEASE),1)
|
|
CS_VER=4.0.1
|
|
CS_TAR=https://codeload.github.com/aquynh/capstone/tar.gz/$(CS_VER)
|
|
#CS_TAR=http://capstone-engine.org/download/$(CS_VER)/capstone-$(CS_VER).tgz
|
|
CS_PATCHES=0
|
|
else
|
|
CS_TAR=
|
|
CS_URL_BASE=github.com/aquynh/capstone
|
|
CS_URL=$(GIT_PREFIX)$(CS_URL_BASE).git
|
|
CS_ARCHIVE=https://$(CS_URL_BASE)/archive
|
|
CS_UPD=20190515
|
|
# NOTE: when you update CS_TIP or CS_BRA, also update them in shlr/meson.build
|
|
ifeq ($(CS_NEXT),1)
|
|
CS_TIP=0de88ed3fdc0ab1f1e2a6eada3cdd93e18057a0f
|
|
CS_BRA=next
|
|
else
|
|
CS_TIP=c80b6aaf973c822d82565f25e9b2e2c0102626fa
|
|
CS_BRA=v4
|
|
endif
|
|
ifeq ($(CS_COMMIT_ARCHIVE),1)
|
|
CS_ARCHIVE_URL=$(CS_ARCHIVE)/$(CS_TIP).zip
|
|
else
|
|
CS_ARCHIVE_URL=
|
|
endif
|
|
# REVERT THIS COMMIT BECAUSE ITS WRONG
|
|
CS_REV=
|
|
CS_PATCHES=1
|
|
endif
|
|
|
|
.PHONY: capstone-sync capstone-build all clean mrproper libgdbr libwindbg bochs tree-sitter-sync radare2-shell-parser-sync
|
|
|
|
HOST_CC?=gcc
|
|
SHLR?=$(shell pwd)
|
|
AR?=ar
|
|
RANLIB?=ranlib
|
|
MODS=sdb zip java tcc mpc
|
|
MODS+=gdb qnx ar
|
|
# lz4
|
|
ifneq ($(CC),cccl)
|
|
ifeq (1,$(WITH_GPL))
|
|
MODS+=grub
|
|
endif
|
|
endif
|
|
ifeq (1,$(USE_PTRACE_WRAP))
|
|
MODS+=ptrace-wrap
|
|
endif
|
|
SDB_URL=git://github.com/radareorg/sdb
|
|
#SDB_URL=/Users/pancake/prg/sdb
|
|
SPP_URL=git://github.com/radare/spp
|
|
PTRACE_WRAP_URL=git://github.com/thestr4ng3r/ptrace-wrap
|
|
PWD=$(shell pwd)
|
|
SDB_CONFIG=${PWD}/sdb-config.mk
|
|
|
|
CFLAGS_SHARED=${PIC_CFLAGS}
|
|
|
|
ifeq (${EXT_SO},)
|
|
all:
|
|
echo EXT_SO not defined
|
|
exit 1
|
|
endif
|
|
|
|
preall: targets libwindbg capstone-build tree-sitter-build radare2-shell-parser-build bochs
|
|
@for MOD in ${MODS} ; do \
|
|
echo $(MAKE) -C $$MOD ; \
|
|
$(MAKE) -C $$MOD HAVE_VALA= ROOT="${PWD}/../" CC="${CC}" ; \
|
|
done
|
|
|
|
SDBFILES=sdb/src/.sdb${EXT_EXE} sdb/sdb${EXT_EXE} sdb/src/.sdb sdb/sdb
|
|
PREMODS=capstone gdb windbg sdb bochs ar
|
|
|
|
clean mrproper:
|
|
rm -f ${SDBFILES}
|
|
@for MOD in ${PREMODS} ${MODS} ; do $(MAKE) -C $$MOD clean ; done
|
|
|
|
ifeq ($(BUILD_OS),windows)
|
|
BUILD_EXT_EXE=.exe
|
|
else
|
|
BUILD_EXT_EXE=
|
|
endif
|
|
|
|
SDB_TARGETS=$(SDBLIB)
|
|
ifneq (${EXT_EXE},)
|
|
SDB_TARGETS+=sdb/sdb${EXT_EXE}
|
|
else
|
|
SDB_TARGETS+=sdb/sdb
|
|
endif
|
|
|
|
PIC=
|
|
ifneq ($(CC),cccl)
|
|
PIC=-fPIC
|
|
ifeq ($(filter sdb/sdb${BUILD_EXT_EXE},$(SDB_TARGETS)),)
|
|
SDB_TARGETS+=sdb/sdb${BUILD_EXT_EXE}
|
|
endif
|
|
endif
|
|
|
|
targets:
|
|
for TARGET in ${SDB_TARGETS} ; do ${MAKE} $$TARGET ; done
|
|
|
|
${SDB_TARGETS}:
|
|
@echo
|
|
@echo BUILD SUMARY
|
|
@echo ============
|
|
@echo COMPILER ${COMPILER}
|
|
@echo CC ${CC}
|
|
@echo HOST_CC ${HOST_CC}
|
|
@echo HOST_OS ${HOST_OS}
|
|
@echo BUILD_OS ${BUILD_OS}
|
|
@echo ============
|
|
@echo
|
|
@echo ">>>>>>>>>>>>>>>>"
|
|
@echo "NATIVE BUILD SDB"
|
|
@echo ">>>>>>>>>>>>>>>>"
|
|
@echo
|
|
$(MAKE) -C sdb clean
|
|
$(MAKE) -C sdb src/sdb_version.h
|
|
$(MAKE) -C sdb/src CC=${HOST_CC} LDFLAGS='${HOST_LDFLAGS}' CPPFLAGS='' CFLAGS='${HOST_CFLAGS} ${PIC}' bin
|
|
cp -f sdb/src/sdb${BUILD_EXT_EXE} sdb/src/.sdb${BUILD_EXT_EXE}
|
|
@echo
|
|
@echo ">>>>>>>>>>>>>>>>"
|
|
@echo "TARGET BUILD SDB"
|
|
@echo ">>>>>>>>>>>>>>>>"
|
|
@echo
|
|
$(MAKE) -C sdb clean
|
|
cd sdb ; $(MAKE) src/sdb_version.h
|
|
cd sdb/src ; $(MAKE) ARCH=xxx RANLIB="${RANLIB}" CFLAGS_SHARED="${CFLAGS_SHARED}" \
|
|
CC="${CC}" AR="${AR}" CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}' libsdb.a
|
|
${RANLIB} sdb/src/libsdb.a
|
|
ifneq (${EXT_AR},a)
|
|
-cp -f sdb/src/libsdb.a sdb/src/libsdb.${EXT_AR}
|
|
endif
|
|
rm -f $@
|
|
cp -f sdb/src/.sdb${BUILD_EXT_EXE} $@
|
|
|
|
.PHONY: sdb-sync sync-sdb sdbclean
|
|
SDB_F=README.md config.mk src Makefile meson.build
|
|
SDB_SYNCFILES=$(addprefix sdb.vc/,${SDB_F})
|
|
I=../libr/include
|
|
|
|
libgdbr:
|
|
$(MAKE) -C gdb all
|
|
|
|
libwindbg:
|
|
$(MAKE) -C windbg all
|
|
|
|
bochs:
|
|
$(MAKE) -C bochs all
|
|
|
|
sdb-clean clean-sdb:
|
|
$(MAKE) -C sdb clean
|
|
rm -f sdb/sdb.exe
|
|
rm -f sdb/src/libsdb.${EXT_AR}
|
|
|
|
sdb-sync sync-sdb:
|
|
rm -rf sdb sdb.vc
|
|
git clone --depth 1 ${SDB_URL} sdb.vc
|
|
mkdir -p sdb
|
|
cp -rf ${SDB_SYNCFILES} sdb
|
|
rm -rf sdb.vc $I/sdb
|
|
mkdir -p $I/sdb
|
|
rm -f src/sdb_version.h
|
|
cd sdb ; $(MAKE) src/sdb_version.h
|
|
cp -f sdb/src/*.h $I/sdb
|
|
echo '#include <sdb/sdb.h>' > $I/sdb.h
|
|
mkdir -p sdb/test sdb/memcache
|
|
sed -e 's,HAVE_VALA=,HAVE_VALA=#,' sdb/config.mk > .t
|
|
mv .t sdb/config.mk
|
|
echo all clean mrproper: | tee sdb/test/Makefile > sdb/memcache/Makefile
|
|
git add $I/sdb*
|
|
git add sdb
|
|
|
|
.PHONY: ptrace-wrap ptrace-wrap-sync sync-ptrace-wrap ptrace-wrap-clean clean-ptrace-wrap
|
|
PTRACE_WRAP_F=include src README.md COPYING
|
|
PTRACE_WRAP_SYNCFILES=$(addprefix ptrace-wrap.vc/,${PTRACE_WRAP_F})
|
|
|
|
ptrace-wrap-sync sync-ptrace-wrap:
|
|
rm -rf ptrace-wrap ptrace-wrap.vc
|
|
git clone --depth 1 ${PTRACE_WRAP_URL} ptrace-wrap.vc
|
|
mkdir -p ptrace-wrap
|
|
cp -rf ${PTRACE_WRAP_SYNCFILES} ptrace-wrap
|
|
sed -e "s, library(, static_library(," -e "s,project(,# project(," -e "s,subdir(,# subdir(," ptrace-wrap.vc/meson.build > ptrace-wrap/meson.build
|
|
printf "include ../../libr/config.mk\ninclude ../../mk/platform.mk\ninclude ../../mk/${COMPILER}.mk\n\n" | cat - ptrace-wrap.vc/Makefile > ptrace-wrap/Makefile
|
|
rm -rf ptrace-wrap.vc
|
|
printf "CFLAGS+=-I\$$(STOP)/ptrace-wrap/include\nLINK+=\$$(STOP)/ptrace-wrap/libptrace_wrap.\$$(EXT_AR)\nPTRACEWRAP_OBJS=\$$(STOP)/ptrace-wrap/src/ptrace_wrap.o\n" > ptrace-wrap/deps.mk
|
|
|
|
ptrace-wrap:
|
|
$(MAKE) -C ptrace-wrap all
|
|
|
|
ptrace-wrap-clean clean-ptrace-wrap:
|
|
$(MAKE) -C ptrace-wrap clean
|
|
|
|
$(TCCLIB) libr_tcc/libr_tcc.${EXT_AR}:
|
|
cd libr_tcc ; $(MAKE)
|
|
|
|
tcc-clean tccclean:
|
|
cd libr_tcc ; $(MAKE) clean
|
|
|
|
CFILES=i386-asm.c i386-gen.c libtcc.c tccasm.c tccelf.c tccgen.c tccpp.c
|
|
HFILES=tcc.h i386-asm.h tcclib.h tcctok.h stab.h
|
|
HFILES+=elf.h config.h i386-tok.h
|
|
|
|
# TODO: use mob branch?
|
|
|
|
.PHONY: sdb-sync sync-sdb sdbclean
|
|
tcc-sync sync-tcc:
|
|
rm -rf _
|
|
$(GIT) clone --depth 1 git://repo.or.cz/tinycc.git _
|
|
cd _ ; ./configure --prefix=${PREFIX}
|
|
mkdir -p tcc
|
|
for FILE in ${CFILES} ${HFILES} ; do cp -f _/$$FILE tcc ; done
|
|
cp -f _/VERSION _/COPYING _/stab.def tcc
|
|
$(GIT) add tcc
|
|
rm -rf _
|
|
|
|
install: libr_shlr.${EXT_AR}
|
|
mkdir -p ${DESTDIR}/${LIBDIR}
|
|
cp -f libr_shlr.${EXT_AR} ${DESTDIR}/${LIBDIR}
|
|
|
|
install-symlink symstall:
|
|
mkdir -p "${DESTDIR}${LIBDIR}"
|
|
#cd tcc ; for FILE in libr_tcc* ; do \
|
|
# ln -fs `pwd`/$$FILE ${DESTDIR}${LIBDIR}/$$FILE ; done
|
|
|
|
uninstall deinstall:
|
|
rm -f ${DESTDIR}${LIBDIR}/libr_shlr.${EXT_AR}
|
|
|
|
ifeq ($(USE_CAPSTONE),1)
|
|
# Do nothing here
|
|
capstone:
|
|
|
|
capstone-sync:
|
|
|
|
capstone-build:
|
|
|
|
else
|
|
|
|
ifeq ($(CS_RELEASE),1)
|
|
capstone-sync: capstone
|
|
|
|
capstone-clean:
|
|
cd capstone ; $(MAKE) clean
|
|
|
|
capstone: capstone-$(CS_VER).tar.gz
|
|
tar xzvf capstone-$(CS_VER).tar.gz
|
|
rm -rf capstone
|
|
mv capstone-$(CS_VER) capstone
|
|
ifeq ($(CS_PATCHES),1)
|
|
if [ -d capstone/.git ]; then \
|
|
cd capstone ; for PATCH in ../capstone-patches/* ; do patch -p1 < $$PATCH ; done ; \
|
|
fi
|
|
endif
|
|
mkdir -p capstone/include/capstone
|
|
cp -rf capstone/include/*.h capstone/include/capstone
|
|
|
|
capstone-$(CS_VER).tar.gz:
|
|
$(WGET) capstone-$(CS_VER).tar.gz $(CS_TAR)
|
|
else
|
|
|
|
capstone: capstone-sync
|
|
|
|
capstone-sync:
|
|
ifeq ($(WITHOUT_PULL),1)
|
|
@echo "Nothing to sync because of --without-pull"
|
|
else
|
|
"$(SHELL)" capstone.sh "${CS_URL}" "${CS_BRA}" "${CS_TIP}" "${CS_REV}" "${CS_ARCHIVE_URL}"
|
|
endif
|
|
|
|
.PHONY: capstone capstone-sync
|
|
endif
|
|
|
|
ifeq (${EXT_AR},)
|
|
all:
|
|
echo EXT_AR is not defined
|
|
exit 1
|
|
endif
|
|
|
|
capstone-build: capstone
|
|
cd capstone && CFLAGS="-Dmips=mips ${CAPSTONE_CFLAGS} $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
|
|
$(MAKE) $(CAPSTONE_MAKEFLAGS) CC="$(CC)" AR_EXT=a IS_CYGWIN=0 CAPSTONE_STATIC=yes CAPSTONE_SHARED=no \
|
|
RANLIB="$(RANLIB)" LIBARCHS="" AR="$(AR)" IS_MINGW=0 libcapstone.a
|
|
ifneq (${EXT_AR},a)
|
|
-cp -f capstone/libcapstone.a capstone/libcapstone.${EXT_AR}
|
|
endif
|
|
endif
|
|
../../radare2-webui:
|
|
cd ../.. ; git clone --depth 1 https://github.com/radare/radare2-webui
|
|
|
|
../../radare2-webui/dist/m: ../../radare2-webui
|
|
ifeq ($(WITHOUT_PULL),1)
|
|
cd ../../radare2-webui/www/m && npm i ; $(MAKE) release
|
|
else
|
|
cd ../../radare2-webui/www/m && git pull ; npm i ; $(MAKE) release
|
|
endif
|
|
|
|
ifeq ($(USE_TREESITTER),1)
|
|
tree-sitter-build: tree-sitter/libtree-sitter.$(EXT_AR)
|
|
|
|
tree-sitter/libtree-sitter.$(EXT_AR): tree-sitter/lib/src/lib.o
|
|
$(AR) rvs $@ $<
|
|
$(RANLIB) $@
|
|
|
|
tree-sitter/lib/src/lib.o: tree-sitter-sync
|
|
$(CC) -std=c99 -c tree-sitter/lib/src/lib.c -o $@ -Itree-sitter/lib/include -Itree-sitter/lib/src $(CFLAGS)
|
|
|
|
tree-sitter-sync:
|
|
"$(SHELL)" clone_3rd_repo.sh tree-sitter "${TS_URL}" "${TS_BRA}" "${TS_TIP}"
|
|
|
|
radare2-shell-parser-build: radare2-shell-parser/libshell-parser.$(EXT_AR)
|
|
|
|
radare2-shell-parser/libshell-parser.$(EXT_AR): radare2-shell-parser/src/parser.o
|
|
$(AR) rvs $@ $<
|
|
$(RANLIB) $@
|
|
|
|
radare2-shell-parser/src/parser.o: radare2-shell-parser-sync
|
|
$(CC) -c radare2-shell-parser/src/parser.c -o $@ -Iradare2-shell-parser/src/tree_sitter -Itree-sitter/lib/include $(CFLAGS)
|
|
|
|
radare2-shell-parser-sync: tree-sitter-sync
|
|
"$(SHELL)" clone_3rd_repo.sh radare2-shell-parser "${SHELLPARSER_URL}" "${SHELLPARSER_BRA}" "${SHELLPARSER_TIP}"
|
|
|
|
SHLRS+=tree-sitter/libtree-sitter.a
|
|
SHLRS+=radare2-shell-parser/libshell-parser.a
|
|
else
|
|
tree-sitter-build:
|
|
radare2-shell-parser-build:
|
|
endif
|
|
|
|
www-sync-m sync-www-m: ../../radare2-webui/dist/m
|
|
cp -rf ../../radare2-webui/dist/m www/m.tmp
|
|
rm -rf www/m
|
|
mv www/m.tmp www/m
|
|
git add www/m
|
|
|
|
www-sync-p sync-www-p:
|
|
cp -rf ../../radare2-webui/dist/p www/p.tmp
|
|
rm -rf www/p
|
|
mv www/p.tmp www/p
|
|
git add www/p
|
|
|
|
www-sync-t sync-www-t:
|
|
cp -rf ../../radare2-webui/dist/t www/t.tmp
|
|
rm -rf www/t
|
|
mv www/t.tmp www/t
|
|
git add www/p
|
|
|
|
sync-www www-sync: www-sync-m www-sync-p www-sync-t
|
|
@echo webui sync done
|
|
|
|
spp-sync sync-spp:
|
|
-git rm -r spp
|
|
rm -rf spp
|
|
git clone --depth 1 ${SPP_URL} spp
|
|
rm -rf spp/.git*
|
|
rm -rf spp/t
|
|
git add spp
|
|
|
|
spp: spp-sync
|
|
CFLAGS="-DUSE_R2=1 -I../../libr/include -DHAVE_FORK=${HAVE_FORK} -fPIC" $(MAKE) -C spp r2lib
|
|
|
|
SHLRS+=ar/libr_ar.a
|
|
SHLRS+=bochs/lib/libbochs.a
|
|
SHLRS+=capstone/libcapstone.a
|
|
SHLRS+=gdb/lib/libgdbr.a
|
|
SHLRS+=grub/libgrubfs.a
|
|
SHLRS+=java/libr_java.a
|
|
SHLRS+=lz4/liblz4.a
|
|
SHLRS+=qnx/lib/libqnxr.a
|
|
#SHLRS+=sdb/src/libsdb.a
|
|
#SHLRS+=tcc/libr_tcc.a
|
|
SHLRS+=windbg/libr_windbg.a
|
|
SHLRS+=zip/librz.a
|
|
|
|
libr_shlr.${EXT_AR}:
|
|
rm -rf .libr
|
|
mkdir .libr
|
|
ifeq ($(CC),emcc)
|
|
for LIB in ${SHLRS} ; do \
|
|
if [ -f "$${LIB}" ]; then emcc -emit-llvm -nostdlib -Wl,--whole-archive -o .libr/$$(basename $${LIB}.a).o $${LIB} ; fi ; \
|
|
done
|
|
${AR} crs $@ .libr/*.o
|
|
$(RANLIB) $@
|
|
else
|
|
for LIB in ${SHLRS} ; do \
|
|
if [ -f "$${LIB}" ]; then ${PARTIALLD} -o .libr/$$(basename $${LIB}.a).o $${LIB} ; fi ; \
|
|
done
|
|
${AR} crs $@ .libr/*.o
|
|
$(RANLIB) $@
|
|
endif
|
|
|
|
.PHONY: spp
|
|
|
|
.PHONY: mpc mpc-clean clean-mpc
|
|
mpc:
|
|
$(MAKE) -C mpc all
|
|
|
|
mpc-clean clean-mpc:
|
|
$(MAKE) -C mpc clean
|