p7zip for arm交叉编译

142 views
Skip to first unread message

jack

unread,
May 14, 2011, 2:48:41 AM5/14/11
to sh...@googlegroups.com
下载了p7zip_9.20.1的源代码,想在amd64位linux下交叉编译arm格式的7z,解开源代码发现有一个makefile和n多的其它平台的makefile:makefile.aix_gcc、makefile.linux_s390x 、 makefile.linux_cross_arm 等等,修改了makefile.linux_cross_arm中的gcc和g++的位置指向本地实际的arm gcc编译器,查看了其中的readme,但是不知道怎样进行下一步了,两个文件内容如下:
makefile:

MKDIR = mkdir -p

DEST_HOME=/usr/local
DEST_BIN=$(DEST_HOME)/bin
DEST_SHARE=$(DEST_HOME)/lib/p7zip
DEST_SHARE_DOC=$(DEST_HOME)/share/doc/p7zip
DEST_MAN=$(DEST_HOME)/man

.PHONY: default all all2 7za 7zG 7zFM sfx 7z 7zr Client7z common common7z clean tar_bin depend test test_7z test_7zr test_7zG test_Client7z all_test app

default:7za

all:7za sfx

all2: 7za sfx 7z

all3: 7za sfx 7z 7zr

all4: 7za sfx 7z 7zr Client7z 7zG 7zFM

all_test : test test_7z test_7zr test_Client7z
$(MAKE) -C CPP/7zip/Compress/LZMA_Alone  test

common:
$(MKDIR) bin

7za: common
$(MAKE) -C CPP/7zip/Bundles/Alone all
$(MAKE) -C check/my_86_filter  all

7zr: common
$(MAKE) -C CPP/7zip/Bundles/Alone7z  all

Client7z: common
$(MKDIR) bin/Codecs
$(MAKE) -C CPP/7zip/Bundles/Format7zFree all
$(MAKE) -C CPP/7zip/UI/Client7z          all

app: common 7zFM 7zG 7z sfx
rm -fr               p7zip.app
$(MKDIR)             p7zip.app
cp -rp GUI/Contents  p7zip.app/
$(MKDIR)          p7zip.app/Contents/MacOS
cp bin/7zFM       p7zip.app/Contents/MacOS/
cp bin/7zG        p7zip.app/Contents/MacOS/
cp bin/7z.so      p7zip.app/Contents/MacOS/
cp bin/7zCon.sfx  p7zip.app/Contents/MacOS/
cp -rp bin/Codecs p7zip.app/Contents/MacOS/
cp -rp GUI/Lang   p7zip.app/Contents/MacOS/
cp -rp GUI/help   p7zip.app/Contents/MacOS/

depend:
$(MAKE) -C CPP/7zip/Bundles/Alone         depend
$(MAKE) -C CPP/7zip/Bundles/Alone7z       depend
$(MAKE) -C CPP/7zip/Bundles/SFXCon        depend
$(MAKE) -C CPP/7zip/UI/Client7z           depend
$(MAKE) -C CPP/7zip/UI/Console            depend
$(MAKE) -C CPP/7zip/Bundles/Format7zFree  depend
$(MAKE) -C CPP/7zip/Compress/Rar          depend
$(MAKE) -C CPP/7zip/UI/GUI                depend
$(MAKE) -C CPP/7zip/UI/FileManager        depend
$(MAKE) -C check/my_86_filter             depend

sfx: common
$(MKDIR) bin
$(MAKE) -C CPP/7zip/Bundles/SFXCon  all

common7z:common
$(MKDIR) bin/Codecs
$(MAKE) -C CPP/7zip/Bundles/Format7zFree all
$(MAKE) -C CPP/7zip/Compress/Rar         all

7z: common7z
$(MAKE) -C CPP/7zip/UI/Console           all

7zG: common7z
cd bin ; rm -f Lang ; ln -s ../GUI/Lang .
cd bin ; rm -f help ; ln -s ../GUI/help .
$(MAKE) -C CPP/7zip/UI/GUI               all

7zFM: common7z
cd bin ; rm -f Lang ; ln -s ../GUI/Lang .
cd bin ; rm -f help ; ln -s ../GUI/help .
$(MAKE) -C CPP/7zip/UI/FileManager       all

clean:
$(MAKE) -C CPP/myWindows                 clean
$(MAKE) -C CPP/7zip/Bundles/Alone        clean
$(MAKE) -C CPP/7zip/Bundles/Alone7z      clean
$(MAKE) -C CPP/7zip/Bundles/SFXCon       clean
$(MAKE) -C CPP/7zip/UI/Client7z          clean
$(MAKE) -C CPP/7zip/UI/Console           clean
$(MAKE) -C CPP/7zip/UI/FileManager       clean
$(MAKE) -C CPP/7zip/UI/GUI               clean
$(MAKE) -C CPP/7zip/Bundles/Format7zFree clean
$(MAKE) -C CPP/7zip/Compress/Rar         clean
$(MAKE) -C CPP/7zip/Compress/LZMA_Alone  clean
$(MAKE) -C CPP/7zip/Bundles/AloneGCOV    clean
$(MAKE) -C CPP/7zip/TEST/TestUI          clean
$(MAKE) -C check/my_86_filter            clean
rm -fr bin
rm -fr p7zip.app
rm -fr CPP/7zip/P7ZIP.*
rm -fr CPP/7zip/CMAKE/P7ZIP.*
rm -fr CPP/7zip/PREMAKE/P7ZIP.*
rm -f  CPP/7zip/QMAKE/*/*.o
rm -f  CPP/7zip/QMAKE/*/Makefile
rm -f  CPP/7zip/QMAKE/*/*.pro.user
rm -f  CPP/7zip/QMAKE/*/*.x
rm -f make.log 1 2
rm -f check/7z.so
find . -name "*~"        -exec rm -f {} \;
find . -name "*.orig"    -exec rm -fr {} \;
find . -name ".*.swp"    -exec rm -f {} \;
find . -name "*.[ch]"    -exec chmod -x {} \;
find . -name "*.cpp"     -exec chmod -x {} \;
find . -name "*.asm"     -exec chmod -x {} \;
find . -name "makefile*" -exec chmod -x {} \;
find . -name ".DS_Store" -exec rm -f {} \;
find . -name "._*"       -exec rm -f {} \;
chmod -x ChangeLog README TODO man1/* DOCS/*.txt
chmod +x contrib/VirtualFileSystemForMidnightCommander/u7z
chmod +x contrib/gzip-like_CLI_wrapper_for_7z/p7zip
chmod +x install.sh check/check.sh check/clean_all.sh check/check_7zr.sh 
cd check                  ; ./clean_all.sh

test: 7za sfx
cd check ; ./check.sh ../bin/7za

test_7z: 7z sfx
cd check ; ./check.sh ../bin/7z

test_7zr: 7zr sfx
cd check ; ./check_7zr.sh ../bin/7zr

test_7zG: 7zG sfx
cd check ; ./check.sh ../bin/7zG

test_Client7z: Client7z
cd check ; ./check_Client7z.sh ../bin/Client7z

install:
./install.sh $(DEST_BIN) $(DEST_SHARE) $(DEST_MAN) $(DEST_SHARE_DOC) $(DEST_DIR)

REP=$(shell pwd)
ARCHIVE=$(shell basename $(REP))

.PHONY: tar_all tar_all2 src_7z tar_bin tar_bin2

tar_all : clean
rm -f  ../$(ARCHIVE)_src_all.tar.bz2
cp makefile.linux_any_cpu makefile.machine
cd .. ; (tar cf - $(ARCHIVE) | bzip2 -9 > $(ARCHIVE)_src_all.tar.bz2)

tar_all2 : clean
rm -f  ../$(ARCHIVE)_src_all.tar.bz2
cp makefile.linux_any_cpu makefile.machine
cd .. ; (tar cf - $(ARCHIVE) | 7za a -mx=9 -tbzip2 -si $(ARCHIVE)_src_all.tar.bz2 )

src_7z : clean
rm -f  ../$(ARCHIVE)_src.7z
cd .. ; 7za a -mx=9 -m0=ppmd:mem=128m:o=32 $(ARCHIVE)_src.7z $(ARCHIVE)

tar_bin:
rm -f  ../$(ARCHIVE)_x86_linux_bin.tar.bz2
chmod +x install.sh contrib/VirtualFileSystemForMidnightCommander/u7z contrib/gzip-like_CLI_wrapper_for_7z/p7zip
cd .. ; (tar cf - $(ARCHIVE)/bin $(ARCHIVE)/contrib $(ARCHIVE)/man1 $(ARCHIVE)/install.sh $(ARCHIVE)/ChangeLog $(ARCHIVE)/DOCS $(ARCHIVE)/README $(ARCHIVE)/TODO | bzip2 -9 > $(ARCHIVE)_x86_linux_bin.tar.bz2)

tar_bin2:
rm -f  ../$(ARCHIVE)_x86_linux_bin.tar.bz2
chmod +x install.sh contrib/VirtualFileSystemForMidnightCommander/u7z contrib/gzip-like_CLI_wrapper_for_7z/p7zip
cd .. ; (tar cf - $(ARCHIVE)/bin $(ARCHIVE)/contrib $(ARCHIVE)/man1 $(ARCHIVE)/install.sh $(ARCHIVE)/ChangeLog $(ARCHIVE)/DOCS $(ARCHIVE)/README $(ARCHIVE)/TODO | 7za a -mx=9 -tbzip2 -si $(ARCHIVE)_x86_linux_bin.tar.bz2)


makefile.linux_cross_arm:
#
# makefile for Linux (CROSS ARM)
#

OPTFLAGS=-O

ALLFLAGS=${OPTFLAGS} -pipe -s \
    -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
-DNDEBUG -D_REENTRANT -DENV_UNIX \
-D_7ZIP_LARGE_PAGES \
$(LOCAL_FLAGS)

CXX=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-g++ $(ALLFLAGS)
CC=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc $(ALLFLAGS)
CC_SHARED=-fPIC -DPIC
LINK_SHARED=-fPIC -DPIC -shared

LOCAL_LIBS=-lpthread
LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl

OBJ_CRC32=$(OBJ_CRC32_C)

Wick

unread,
May 15, 2011, 11:28:53 PM5/15/11
to sh...@googlegroups.com
Hello Jack:

2011/5/14 jack <black...@gmail.com>:


> 下载了p7zip_9.20.1的源代码,想在amd64位linux下交叉编译arm格式的7z,解开源代码发现有一个makefile和n多的其它平台的makefile:makefile.aix_gcc、makefile.linux_s390x
> 、 makefile.linux_cross_arm
> 等等,修改了makefile.linux_cross_arm中的gcc和g++的位置指向本地实际的arm
> gcc编译器,查看了其中的readme,但是不知道怎样进行下一步了,两个文件内容如下:

p7zip 的代码很不好看,而且没有给出configure工具,但是README还是列出了规则 ----
According to your OS, copy makefile.linux,
makefile.freebsd, makefile.cygwin, ...
over makefile.machine

其中的 makefile.machine 就是平台相关性选项。你可以这样做
$ mv makefile.machine makefile.machine.bak
$ ln -s makefile.linux_cross_arm makefile.machine
$ make

PS: 可以追踪 makefile 的 TARGET all 来 makefile 是如何调用的。

--
Shenzhen, CN
twitter: @izhangxc

Reply all
Reply to author
Forward
0 new messages