秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
近日在龙芯公司李工的帮助下,已在UOS 1070专业版成功编译fpc和lazarus最新源码。
注意:
因验证这个方法,做了2次,所以截图有fpcupdeluxe4和fpcupdeluxe499,操作时按你的实际设置就可以。
一、前期准备工作:
1、下载fpc源码:
https://gitlab.com/freepascal.org/fpc/source
2、下载lazarus源码
https://gitlab.com/freepascal.org/lazarus/lazarus
下载后按以下截图建相关目录(我这是:/home/lbz/fpcupdeluxe4):



3、下载ppcloongarch64/fpcmake及fpcsrc的loongarch64码
链接: https://pan.baidu.com/s/14DeCj06V89Wo8dePyqOy9A?pwd=hqhr 提取码: hqhr
1、解压后放fpcbootstrap目录


2、解压fpcsrc.zip替换fpcsrc相应的文件

二、编译fpcsrc源码

将ppcloongarch64拷贝到fpcbootstrap目录

打开/home/lbz/fpcupdeluxe4/fpcsrc/compiler/loongarch64/agcpugas.pas
将'lp64d'改为'lp64',然后保存

  const
    as_loongarch64_gas_info : tasminfo =
       (
         id     : as_gas;
         idtxt  : 'AS';
         asmbin : 'as';
         asmcmd : '-o $OBJ $EXTRAOPT -mabi=lp64d $ASM';
         supported_targets : [system_loongarch64_linux];
         flags : [af_needar,af_smartlink_sections];
         labelprefix : '.L';
         labelmaxlen : -1;
         comment : '# ';
         dollarsign: '$';
       );

关键的文件是ppcloongarch64,这个文件使用了'lp64'指定。

uos等系统的binutils使用'lp64',但fpc官方的龙芯源码是使用'lp64d',使用官方源码编译的ppcloongarch64在UOS 1070编译时会出现:
/home/lbz/fpcupdeluxe4/fpcsrc/rtl/units/loongarch64-linux -Fl/usr/lib/gcc/loongarch64-linux-gnu/8 -dloongarch64 -dRELEASE  -Us -Sg system.pp
Assembler messages:
错误:unrecognized option -#lp64d

编译fpcsrc:
1、设置路径:

export PATH=/data/home/lbz/fpcupdeluxe4/fpc/bin/loongarch64-linux:$PATH

2、编译:

make install CPU_TARGET=loongarch64 OS_TARGET=linux CPU_SOURCE=loongarch64 OS_SOURCE=linux  OPT='-gl -O2' FPC=/home/lbz/fpcupdeluxe499/fpcbootstrap/ppcloongarch64 OVERRIDEVERSIONCHECK=1  PREFIX=/home/lbz/fpcupdeluxe499/fpc -j16

重复编译时要先清理:

make --jobs=8 FPMAKEOPT=--threads=8 --directory=/home/lbz/fpcupdeluxe4/fpcsrc FPC=/home/lbz/fpcupdeluxe4/fpcbootstrap/ppcloongarch64 FPCMAKE=/home/lbz/fpcupdeluxe4/fpc/bin/loongarch64-linux/fpcmake PPUMOVE=/home/lbz/fpcupdeluxe4/fpc/bin/loongarch64-linux/ppumove FPCDIR=/home/lbz/fpcupdeluxe4/fpcsrc PREFIX=/home/lbz/fpcupdeluxe4/fpc INSTALL_PREFIX=/home/lbz/fpcupdeluxe4/fpc CPU_SOURCE=loongarch64 OS_SOURCE=linux CPU_TARGET=loongarch64 OS_TARGET=linux distclean

如果编译过程出现以下错误:
*** The Makefile doesn't support target loongarch64-linux, please run fpcmake first。 

make[2]: 进入目录“/data/home/lbz/fpcupdeluxe499/fpcsrc/packages”
Makefile:215: *** The Makefile doesn't support target loongarch64-linux, please run fpcmake first。 停止。
make[2]: 离开目录“/data/home/lbz/fpcupdeluxe499/fpcsrc/packages”
make[1]: *** [Makefile:3201:packages_clean] 错误 2
make[1]: 离开目录“/data/home/lbz/fpcupdeluxe499/fpcsrc”
make: *** [Makefile:3326:build-stamp.loongarch64-linux] 错误 2

按以下命令执行,执行后Makefile就支持龙芯了。

设置fpcmake所在路径,然后执行:regenmakefiles.sh

export PATH=/home/lbz/fpcupdeluxe4/fpcbootstrap/:$PATH

cd fpcsrc/packages
./regenmakefiles.sh

cd fpcsrc/rtl
./regenmakefiles.sh

重新生成Makefile后再次从第1步开始执行。

3、编译完成后,生成fpc.cfg

cd /fpc/bin
./fpcmkcfg -o fpc.cfg

4、修改fpc.cfg,将units路径用绝对目录指定(将红色部分改为你的实际目录)

# Search for $fpctarget/$fpcsubarch-$fpcmemorymodel/ subdirectory first
# for i8086 CPU
#ifdef cpui8086
-Fu/units/$fpctarget/$fpcsubarch-$fpcmemorymodel
-Fu/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/*
-Fu/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/rtl
#endif

# searchpath for units and other system dependent things
-Fu/units/$fpctarget
-Fu/units/$fpctarget/*
-Fu/units/$fpctarget/rtl

#IFDEF FPCAPACHE_1_3
-Fu/units/$fpctarget/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu/units/$fpctarget/httpd20
#ELSE
-Fu/units/$fpctarget/httpd22
#ENDIF
#ENDIF

改为:

# Search for $fpctarget/$fpcsubarch-$fpcmemorymodel/ subdirectory first
# for i8086 CPU
#ifdef cpui8086
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/$fpcsubarch-$fpcmemorymodel
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/*
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/rtl
#endif

# searchpath for units and other system dependent things
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/*
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/rtl

#IFDEF FPCAPACHE_1_3
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/httpd20
#ELSE
-Fu/home/lbz/fpcupdeluxe4/fpc/lib/fpc/3.3.1/units/$fpctarget/httpd22
#ENDIF
#ENDIF

将修改后的fpc.cfg拷贝到~/.fpc.cfg

cp fpc.cfg ~/.fpc.cfg

5、拷贝/home/lbz/fpcupdeluxe499/fpc/lib/fpc/3.3.1目录的ppcloongarch64到/home/lbz/fpcupdeluxe499/fpc/bin目录

cd fpc/bin
cp /home/lbz/fpcupdeluxe499/fpc/lib/fpc/3.3.1/ppcloongarch64 //home/lbz/fpcupdeluxe499/fpc/bin

到此,fpc源码已编译完成

三、编译lazarus
编译lazarus相对就很简单了

1、设置路径:

export PATH=/data/home/lbz/fpcupdeluxe4/fpc/bin/loongarch64-linux:$PATH

2、编译

cd lazarus
make

3、lazarus编译完成后,在lazarus目录新建lazarus.cfg文件,这个文件的配置目录指向config_lazarus
添加完成后保存退出

--primary-config-path=/data/home/lbz/fpcupdeluxe4/config_lazarus

 4、运行编译好的lazarus。

第一次运行先配置lazarus/fpc 编译器/fpc源码及调试器:

 

posted on 2025-03-19 11:19  秋·风  阅读(408)  评论(2)    收藏  举报