coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Raspberry Pi に LLVM + Clang 19.1.0 をインストールする。

2024-11-15 23:07:37 | コンピュータ言語
Python3 のインストールでも分かるように、clang と llvm もこれからは必要そうです。
そこで、今使っている Raspberry Pi に llvm と clang をインストールしてみます。
最新のものは 19.1.0 でした。

先に、関連ありそうなパッケージを入れておきます。

# apt install cmake
# apt install ninja-buil
# apt install llvm llvm-dev
# apt install clang

$ /usr/bin/cmake --version
cmake version 3.25.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$
$ /usr/bin/clang --version
Debian clang version 14.0.6
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$

ですね。

念のために、最初に cmake を最新にしておきます。
環境設定は例によって、python3.sh というファイル使います。

$ source ~/python3.sh

$ wget https://github.com/Kitware/CMake/releases/doload/v3.31.0/cmake-3.31.0.tar.gz
$ tar xvf cmake-3.31.0.tar.gz
$ cd cmake-3.31.0

$ ./configure --prefix=/usr/local/python
......
-- Configuring done (126.3s)
-- Generating done (2.9s)
-- Build files have been written to: /home/espiya/src/cmake/cmake-3.31.0
---------------------------------------------
CMake has bootstrapped. Now run gmake.
$


make でなくて gmake と言っていますが、

$ which gmake
/usr/bin/gmake
$ ls -l /usr/bin/gmake
lrwxrwxrwx 1 root root 4 Apr 10 2021 /usr/bin/gmake -> make
$

make コマンドです。 make して、インストールします。

$ gmake

# gmake install


確認します。

$ cmake --version
cmake version 3.31.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$


これで、cmake は最新になりました。

これを使って、llvm と clang をインストールしてみます。実は、Raspberry Pi でこれは非常に大変で、色々ためしてみたのですが、中々うまくいかないので苦労しました。最終的には、

https://clang.llvm.org/get_started.html

を参考にしました。

$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.0/llvm-project-19.1.0.src.tar.xz
$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.0/llvm-project-19.1.0.src.tar.xz.sig
$
$ gpg --verify llvm-project-19.1.0.src.tar.xz.sig
gpg: assuming signed data in 'llvm-project-19.1.0.src.tar.xz'
gpg: Signature made Tue 17 Sep 2024 12:42:39 BST
gpg:      using RSA key D574BD5D1D0E98895E3BF90044F2485E45D59042
gpg: Good signature from "Tobias Hieta '<tobias@hieta.se>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:      There is no indication that the signature belongs to the owner.
Primary key fingerprint: D574 BD5D 1D0E 9889 5E3B F900 44F2 485E 45D5 9042
$


$ tar xvf llvm-project-19.1.0.src.tar.xz
$
$ cd llvm-project-19.1.0.src
$ mkdir build-proj
$ cd build-proj


$ cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/python -G "Unix Makefiles" ../llvm
...........
-- Configuring done (52.2s)
-- Generating done (27.7s)
-- Build files have been written to: /home/espiya/src/llvm-project-19.1.0.src/build-proj
$


$ make
.............
[100%] Linking CXX static library ../../../lib/libbenchmark.a
[100%] Built target benchmark
[100%] Building CXX object third-party/benchmark/src/CMakeFiles/benchmark_main.ir/benchmark_main.cc.o
[100%] Linking CXX static library ../../../lib/libbenchmark_main.a
[100%] Built target benchmark_main
[100%] Copying llvm-locstats into /home/espiya/src/llvm-project-19.1.0.src/buil-proj/./bin
[100%] Built target llvm-locstats
$


このマシンでは、1日以上かかりました。 〇〇% と表示されるので一応目安になります。テストもできます。

$ make check-clang
...........
[100%] Running the Clang regression tests
llvm-lit: /home/espiya/src/llvm-project-19.1.0.src/llvm/utils/lit/lit/llvm/config.py:508: note: using clang: /home/espiya/src/llvm-project-19.1.0.src/build-proj/bin/clang

Testing Time: 3883.81s

Total Discovered Tests: 37989
Skipped : 10 (0.03%)
Unsupported : 150 (0.39%)
Passed : 37802 (99.51%)
Expectedly Failed: 27 (0.07%)
[100%] Built target check-clang
$

こちらも 1時間以上かかりました。

/usr/local/python へのインストール方法は書いていないのですが、普通に make で良さそうです。

# make install
......
-- Up-to-date: /usr/local/python/include/llvm/CodeGen
-- Installing: /usr/local/python/include/llvm/CodeGen/GenVT.inc
-- Up-to-date: /usr/local/python/include/llvm/TargetParser
-- Installing: /usr/local/python/include/llvm/TargetParser/ARMTargetParserDef.inc
-- Installing: /usr/local/python/include/llvm/TargetParser/AArch64TargetParserDef.inc
-- Installing: /usr/local/python/include/llvm/TargetParser/RISCVTargetParserDef.inc
-- Installing: /usr/local/python/lib/cmake/llvm/LLVMConfigExtensions.cmake
#

$ clang --version
clang version 19.1.0
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/python/bin
$


これで、clang 19.1.0 が使えるようになりました。時間はかかりましたが、Raspberry Pi でもビルドできたのが良かったです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ChatGPTのAPIを使った、LINEの AIチャットくん を使ってみる。

2023-04-08 13:55:19 | コンピュータ言語
久しぶりの投稿です。

LINEでChatGPTが使える「AIチャットくん」が公開されたので使ってみました。
ChatGPTをそのまま使うのはちょっと気になってやめていましたが、APIが公開されて早速このような機能が出てきたので利用することにしたわけです。

試しに何か質問してみようと思い、「そういえば以前使っていた乱数生成のツールをまた使おうとしたら正確な名前を忘れていた」ということで、次のような質問にしました。

(Q1とかA1は便宜的に付加したもので、質問と回答を意味します。適当に改行してあります。)

--- ここから --------------------
Q1
乱数生成で、評価の高いツールはなんですか?

A1
有名な乱数生成ツールには、以下のものがあります。

1. Mersenne Twister - 非常に高品質で、多くのプログラミング言語に実装されています。
2. XORShift - 高速で、シンプルなアルゴリズムです。
3. PCG - 優れたランダム性と高速性を兼ね備えています。
4. AES-CTR-DRBG - 暗号化のために使用されるアルゴリズムで、高品質の乱数を生成できます。

これらのツールは、科学的なシミュレーション、ランダムなアート、セキュリティ用途など、多くの分野で使用されており、高い評価を受けています。
--- ここまで --------------------

探していたものは、1.のMersenne Twister がであることが分かりました。
以前使用してからだいぶたっているので、最近は各種言語からも使えるはずでは?と予想して次の質問をしました。

--- ここから --------------------
Q2.
Mersenne twister は、python からも使えますか?

A2.
はい、Mersenne Twisterは
Pythonで標準ライブラリ`random`モジュールで使用することができます。
`random`モジュールは、Pythonの様々なバージョンで利用可能であり、
Mersenne Twisterの実装も含まれています。
以下は、Mersenne Twisterを使用するための簡単な例です。

```python
import random

# 0から1までの浮動小数点数を生成
random_number = random.random()
print(random_number)

# 範囲を指定して整数を生成
random_integer = random.randint(1, 10)
print(random_integer)

# Mersenne Twisterを使用して乱数を生成
random.seed(10) # シード値を設定
for i in range(5):
print(random.random())
```

このように `random` モジュールで使用することができます。
--- ここまで -------------------------------

Python の randomモジュールが Merusenne Twister を使っていたとは、初めて知りました。個人的に、今回の質問の大きな収穫です。
そこで、確認も兼ねて次の質問をしました。

--- ここから -------------------------------
Q3.
c言語のような言語のrand()だと乱数生成が単純だったように思うのですが、python は違うのですね。

A3.
はい、C言語の`rand()`は線形合同法というアルゴリズムを使って単純に乱数を生成しますが、
Pythonの`random`モジュールは、メルセンヌ・ツイスターという高品質な擬似乱数生成器を使っています。
これは、よりランダム性が高く、より偏りのない乱数を生成することができます。
また、Pythonの`random`モジュールには、様々な便利な関数が用意されており、
乱数生成における様々な操作を簡単に行うことができます。
--- ここまで -------------------------------

Pythonの乱数生成の説明と共に、C言語の rand()の確認と、このツールの読み方「メルセンヌ・ツイスター」も分かりました。ネット上で読み方が記入されており、それをChatGPTが拾ってきたようです。

この例からも分かるように、プログラミングや何かツールを作ろうとしたとき役立ちそうです。メルセンヌ・ツイスターは最初に種となる数字を与えると記憶していたので、その辺はどうなっているのか気になりますが、それは別の検索等で確認すればよさそうです。

しかしながら、この問答を理解するためには、
C言語、Python、乱数生成 など
の前提となる知識が必要です。今回は、昔メルセンヌ・ツイスターを使っていたので問答の理解の役にたちました。
そうでなければ、その後単独でメルセンヌ・ツイスターを実際に使ってみて生成される高品質な乱数を実感し、Python の random モジュールもそうなっているかを調べる必要があるわけです。

今回、Twitter で、 ChatGPT は知識を増幅するもの、という話を見かけたので、
これを裏付ける事例として紹介してみました。例えば以下のツィートなどを参考にしました。

『すでに多くの人が言っているけど、ChatGPTは人間の能力の代替というより「増幅」装置の側面が強くて、未来の仕事では、英語やプログラミングはもちろん、自分が関わっている領域(業界、職種)に精通しているかが鍵になるなということがよく分かる。つまりは「ちゃんと勉強しろ」ってことで、私ももっ…』

https://twitter.com/nori76/status/1643842667951034368?t=RDEZ_c5kXkE1WyKAPqgJHw&s=03

や、

『ChatGPT(GPT-4)はどうも自然言語やプログラミング言語を取り扱う能力に長けた人の能力を増幅させる力があるとみた。増幅する方向は処理速度、反復による質の向上などが上げられる。これをうまく仕事に応用すれば、生産性を桁外れに上げてくれるはずだ。可能性の検証はもちろん、実用性の検証もしたい。』

https://twitter.com/alfredplpl/status/1637790454237499397?t=i9-KAbFGRa-X9siqqJqJhA&s=03

です。

「知識を増幅できるが、そのためには予め前提となる知識が必要である。」ということで、
今後益々知識習得の重要性が分かりますね。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Maxima

2007-07-01 21:21:26 | コンピュータ言語
CLISP もインストールできましたので、それを利用してみたいと思います。

そこで、数式処理システムである
Maxima
をインストールします。

始めに sourceforge から、maxima-5.12.0.tar.gz をダウンロードします。

早速インストールしてみます。Lisp として CLISP の選択は自動的に行われます。
$ tar xzf maxima-5.12.0.tar.gz
$ cd maxima-5.12.0
$ ./configure
$ make
$ make check
...............
Running test suite with clisp...
Maxima 5.12.0 http://maxima.sourceforge.net
Using Lisp CLISP 2.41 (2006-10-13)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1)                           run_testsuite()
Running tests in rtestnset: 503/503 tests passed.
Running tests in rtest1: 27/27 tests passed.
Running tests in rtest1a: 24/24 tests passed.
Running tests in rtest2: 57/57 tests passed.
Running tests in rtest4: 82/82 tests passed.
Running tests in rtest5: 51/51 tests passed.
Running tests in rtest6: 4/4 tests passed.
Running tests in rtest6a: 56/56 tests passed.
Running tests in rtest6b: 16/16 tests passed.
Running tests in rtest7: 41/41 tests passed.
Running tests in rtest9: 77/77 tests passed.
Running tests in rtest9a: 21/21 tests passed.
Running tests in rtest10: 45/45 tests passed.
Running tests in rtest11: 94/94 tests passed.
Running tests in rtest13: 24/24 tests passed.
Running tests in rtest13s: 18/18 tests passed.
Running tests in rtest14: 158/158 tests passed.
Running tests in rtest15: 208/208 tests passed.
Running tests in rtest16: 55/55 tests passed.
Running tests in rtestode: 68/68 tests passed.
Running tests in rtestode_zp: 30/30 tests passed.
Running tests in rtest3: 108/108 tests passed.
Running tests in rtest8: 52/52 tests passed.
Running tests in rtest12: 78/78 tests passed.
Running tests in rexamples: 136/136 tests passed.
Running tests in rtesthyp: 257/257 tests passed.
Running tests in rtestmt19937: 15/15 tests passed.
Running tests in rtest_allnummod: Nonorderable argument(s) in 'max' or 'min.' Re
turning a noun form.
Nonorderable argument(s) in 'max' or 'min.' Returning a noun form.
Nonorderable argument(s) in 'max' or 'min.' Returning a noun form.
479/479 tests passed.
Running tests in rtestconjugate: 89/89 tests passed.
Running tests in rtestsum: 250/250 tests passed.
Running tests in rtest_trig: 75/75 tests passed.
Running tests in rtest_zeta: 13/13 tests passed.
Running tests in rtest_diff_invtrig: 22/22 tests passed.
Running tests in rtest_scalarp: 19/19 tests passed.
Running tests in rtest_everysome: 84/84 tests passed.
Running tests in rtestint: 112/112 tests passed.
Running tests in rtestifactor: 24/24 tests passed.
Running tests in rtest_equal: 143/143 tests passed.
Running tests in rtest_abs: 70/70 tests passed.
Running tests in rtest_taylor: 126/126 tests passed.
Running tests in rtest_dot: 55/55 tests passed.
Running tests in rtest_mset: 59/59 tests passed.
Running tests in rtest_boolean: 108/108 tests passed.


No unexpected errors found.
Real time: 146.61073f0 sec.
Run time: 146.48f0 sec.
Space: 1357371968 Bytes
GC: 926, GC time: 13.65f0 sec.
(%o0)                                done
...............
$

# make install
...............
 /usr/bin/install -c 'maxima' '/usr/local/bin/maxima'
...............
#

簡単にインストールできました。ためしに使ってみます。終了は ctrl-D で大丈夫です。
$ maxima
Maxima 5.12.0 http://maxima.sourceforge.net
Using Lisp CLISP 2.41 (2006-10-13)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) expand((a+b)^4);
                       4        3      2  2      3      4
(%o1)                 b  + 4 a b  + 6 a  b  + 4 a  b + a
(%i2) factor(%o1);
                                          4
(%o2)                              (b + a)
(%i3)
$

現在は、Windows 版とかあり、グラフィックで表示できますが、ここはテキストベースだけで使っている coLinux ですから、上のようになります。coLinux でmaxima を実行するとよそのもっと速くメモリも豊富なマシンが使えるので何か役立つと思います。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

clisp インストール その2

2007-06-16 22:58:01 | コンピュータ言語
前回、clisp のコンパイルで必要なライブラリが不足していたものを解消しました。
configure から再挑戦です。

こういう場合は、一度すべて消去してからやり直したほうが楽です。
$ rm -rf clisp-2.41
$ tar xzf clisp-2.41a.tar.gz
$ cd clisp-2.41
$ ./configure 
..........................
Configure findings:
  FFI:        yes (user requested: default)
  readline:   yes (user requested: default)
  libsigsegv: yes

To continue building CLISP, the following commands are recommended
  (cf. unix/INSTALL step 4):
    cd src
    ./makemake --with-dynamic-ffi     > Makefile
    make config.lisp
    vi config.lisp
    make
    make check
$

指示に従って、コンパイルしてみます。途中、config.lisp はデフォルトのままとします。
$ cd src
$ ./makemake --with-dynamic-ffi >Makefile
$ make config.lisp
cp -p cfgunix.lisp config.lisp
chmod +w config.lisp
echo '(setq *clhs-root-default* "http://www.lisp.org/HyperSpec/")' 
        >> config.lisp
$ make
..................
$ make check
...............
RUN-TEST: finished "excepsit" (0 errors out of 374 tests)
finished  50 files:               0 errors out of  10,652 tests
  1                   alltest:    0 errors out of    631 tests
  2                     array:    0 errors out of    290 tests
  3                  backquot:    0 errors out of     89 tests
  4                    bin-io:    0 errors out of     15 tests
  5                characters:    0 errors out of    221 tests
  6                      clos:    0 errors out of    485 tests
  7                   defhash:    0 errors out of      6 tests
  8                  encoding:    0 errors out of     31 tests
  9                    eval20:    0 errors out of     21 tests
 10                       ffi:    0 errors out of    228 tests
 11                    floeps:    0 errors out of     20 tests
 12                    format:    0 errors out of    259 tests
 13                 genstream:    0 errors out of     14 tests
 14                  hashlong:    0 errors out of     10 tests
 15                 hashtable:    0 errors out of      7 tests
 16                    iofkts:    0 errors out of    220 tests
 17                    lambda:    0 errors out of     89 tests
 18                  lists151:    0 errors out of    201 tests
 19                  lists152:    0 errors out of    255 tests
 20                  lists153:    0 errors out of      1 test
 21                  lists154:    0 errors out of     46 tests
 22                  lists155:    0 errors out of     25 tests
 23                  lists156:    0 errors out of     20 tests
 24                  list-set:    0 errors out of      2 tests
 25                      loop:    0 errors out of    134 tests
 26                    macro8:    0 errors out of    195 tests
 27                       map:    0 errors out of     64 tests
 28                       mop:    0 errors out of    219 tests
 29                    number:    0 errors out of  3,655 tests
 30                   number2:    0 errors out of    252 tests
 31                    pack11:    0 errors out of    202 tests
 32                      path:    0 errors out of    143 tests
 33                      setf:    0 errors out of    168 tests
 34                    socket:    0 errors out of     85 tests
 35                   steele7:    0 errors out of     85 tests
 36                   streams:    0 errors out of    363 tests
 37               streamslong:    0 errors out of     14 tests
 38                   strings:    0 errors out of    408 tests
 39                  symbol10:    0 errors out of    147 tests
 40                   symbols:    0 errors out of      5 tests
 41                      time:    0 errors out of     23 tests
 42                      type:    0 errors out of    274 tests
 43                      weak:    0 errors out of    120 tests
 44                  weakhash:    0 errors out of     25 tests
 45                 weakhash2:    0 errors out of     46 tests
 46                      bind:    0 errors out of     67 tests
 47                   weakptr:    0 errors out of    240 tests
 48                conditions:    0 errors out of     90 tests
 49                  restarts:    0 errors out of     68 tests
 50                  excepsit:    0 errors out of    374 tests
Real time: 192.01062 sec.
Run time: 133.28 sec.
Space: 810789584 Bytes
GC: 1051, GC time: 32.56 sec.
0
Bye.
(echo *.erg | grep '*' >/dev/null) || 
  (echo "Test failed:" ; ls -l *erg; 
     echo "To see which tests failed, type" ; 
     echo "    cat "`pwd`"/*.erg" ; exit 1)
echo "Test passed."
Test passed.
gmake[1]: Leaving directory `/home/espiya/src/clisp-2.41/src/tests'
$

うまくいきました。/usr/local へインストールします。
# make install
.................
#

$ clisp
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2006

[1]> (quit)
Bye.
$

これで完了です。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

clisp インストール

2007-06-15 01:04:41 | コンピュータ言語
久々にコンピュータ言語ネタに戻ります。

だいぶ前に Lisp を入れた結果を投稿するのをすっかり忘れていましたので Lisp にします。

Lisp は、言語マニアとしては必ずインストールしたい言語です。やはり、GNU からたどって、CLISP ( http://clisp.cons.org/ ) をダウンロードします。Fedora Core 5 は、パッケージ化されていますが、ここではコンパイルを試みましょう。

$ gpg --verify clisp-2.41a.tar.gz.sig.gz clisp-2.41a.tar.gz
gpg: 2006年11月14日 11時46分02秒 JSTにDSA鍵ID A8F990AFで施された署名
gpg: “Sam Steingold <sds@gnu.org>”からの正しい署名
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg: この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: 676A 992C CFBC 3714 EFE8 EAA1 86BD EA55 A8F9 90AF
$

$ tar xzf clisp-2.41a.tar.gz
$ cd clisp-2.41
$ ./configure
..............
Configure findings:
FFI: yes (user requested: default)
readline: no (user requested: default)
libsigsegv: no, consider installing GNU libsigsegv
./configure: libsigsegv was not detected, thus some features, such as
generational garbage collection and
stack overflow detection in interpreted Lisp code
cannot be provided.
Please do this:
mkdir tools; cd tools; prefix=`pwd`/i686-pc-linux-gnu
wget http://ftp.gnu.org/pub/gnu/libsigsegv/libsigsegv-2.4.tar.gz
tar xfz libsigsegv-2.4.tar.gz
cd libsigsegv-2.4
./configure --prefix=${prefix} && make && make check && make install
cd ../..
./configure --with-libsigsegv-prefix=${prefix}
If you insist on building without libsigsegv, please pass
--ignore-absence-of-libsigsegv
to this script:
./configure --ignore-absence-of-libsigsegv
$

libsigsegv が必要です。readline もあったほうがいいと思います。 2006-12-08で求めた、prog.list から探してみます。

# yum install readline-devel.i386
..................
Running Transaction
Installing: libtermcap-devel ######################### [1/2]
Installing: readline-devel ######################### [2/2]

Installed: readline-devel.i386 0:5.0-3.2.1
Dependency Installed: libtermcap-devel.i386 0:2.0.8-45
Complete!
#

libtermcap も必要でしたね。次に libsigsegv ですが、

# grep libsigsegv /root/prog.list
libsigsegv.i386 2.4-1.fc5 extras
libsigsegv-devel.i386 2.4-1.fc5 extras
# rpm -qa |grep libsigsegv
#

ということで、ここではコンパイルしないで、yum に頼ります。

# yum install libsigsegv.i386 libsigsegv-devel.i386
Running Transaction
Installing: libsigsegv ######################### [1/2]
Installing: libsigsegv-devel ######################### [2/2]

Installed: libsigsegv.i386 0:2.4-1.fc5 libsigsegv-devel.i386 0:2.4-1.fc5
Complete!
#

これで準備ができました。続きは次回にしたいと思います。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Gaucheインストール

2007-03-06 22:02:22 | コンピュータ言語
Scheme 処理系として Gauche(ゴーシュ)をインストールします。2007.1.17 に 0.8.9 にバージョンアップしました。

Gauche A Scheme Interpreter (http://www.shiro.dreamhost.com/scheme/gauche/index-j.html) からダウンロードします。

Gauche-0.8.9.tgz

その前に、libiconv をインストールします。http://www.gnu.org/software/libiconv/ から、

libiconv-1.11.tar.gz

をダウンロードして、インストールします。
$ tar xzf libiconv-1.11.tar.gz
$ cd libiconv-1.11
$ ./configure
.................
$ make
.................

# make install
#

libiconv を読み込めるように、LD_PATH_LIBRARY を設定してもいいのですが、ここでは、ldconfig を使います。
# echo /usr/local/lib >/etc/ld.so.conf.d/use-local.conf
# ldconfig
# ldconfig -p |grep iconv
        libiconv.so.2 (libc6) => /usr/local/lib/libiconv.so.2
        libiconv.so (libc6) => /usr/local/lib/libiconv.so
#

これで、Gauche をコンパイルします。
$ tar xzf Gauche-0.8.9.tgz
$ cd Gauche-0.8.9
$ ./configure --enable-multibyte=utf-8 --with-iconv=/usr/local
.......................
$ make
.......................
$ make check
.......................
$

# make install
.......................
#

$ gosh -V
Gauche scheme interpreter, version 0.8.9 [utf-8]
$ gosh
gosh> (exit)
$

うまくインストールできました。テストもすべてパスしました。
gouche のページにあったサンプルCGIを作ってみます。
$ cat /home/data/cgi-bin/goshtest
#!/usr/local/bin/gosh
(display "Content-type: text/plain\r\n\r\nHello, world.\r\n")
$ ls -l /home/data/cgi-bin/goshtest
-rwxr-xr-x 1 root root 84 .....................
$ lynx -dump http://www.example.co.jp/cgi-bin/goshtest
Hello, world.

$

うまくいきました。

さて、今後何をするか考えています。sendmail も試したいのですが、相対するサーバがないので実験が難しい点が難点です。sendmail.mc から sendmail.cf 生成まわりで m4 も見てみれば、それはコンピュータ言語といえますが。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Free Pascal Compiler

2007-01-26 00:17:44 | コンピュータ言語
前回、Fortran をインストールしたので、もうひとつのコンパイラである、Pascal をインストールします。GNUプロジェクトから、Free software directory をたどって探すと、Free Pascal Compiler ( http://www.freepascal.org/ ) にたどり着きました。コマンド名は fpc ( Version 2.0.4 )です。通常のようにコンパイルしたいところですが、おそらく Pascal は、Pascal 自身で書かれている可能性が高いので何もない状態でのコンパイルによるインストールは敷居が高いと予想されます。そこであっさりあきらめて、この間作った prog.list の中を探すと、fpc.i386 , fpc-doc.i386 , fpc-src.i386 があります。そのうち、fpc.i386 と fpc-doc.i386 をインストールしました。
# yum install fpc.i386
...............
# yum install fpc-doc.i386
...............
# which fpc
/usr/bin/fpc
# fpc -iV -iTO -iTP
2.0.4 linux i386
#

ためしに、Free Pascal 自身をコンパイルしてみます。
$ tar xzf fpcbuild-2.0.4.tar.gz
$ cd fpcbuild_2.0.4_exp
$ cp install/makepack .
$ chmod +x makepack
$ ./makepack
FPC Source: i386-linux
FPC Target: i386-linux
Libgdb (fpcsrc/libgdb/linux/i386/libgdb.a) not found, aborting
$

libgdb.a がないのでコンパイルできません。そこで、makepack の中の
CHECKLIBGDB=no

とします。documentation archive に関するエラーがでるので、makepack の中のそのあたりをすべてコメントにします。
$ ./makepack
.....................
/usr/bin/ppc386 -XX -CX -Ur -Xs -OG2p3 -n -Fui386 -Fusystems
 -Fu/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc/rtl/units/i386-linux 
 -Fii386 -FE. -FUi386/units/i386-linux -dRELEASE  -di386 -dGDB 
 -dBROWSERLOG -Fux86 pp.pas
pp.pas(209,1) Error: Can't call the linker, switching to external linking
make[6]: *** [ppc386] エラー 1
make[6]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc/compiler'
make[5]: *** [next] エラー 2
make[5]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc/compiler'
make[4]: *** [ppc1] エラー 2
make[4]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc/compiler'
make[3]: *** [cycle] エラー 2
make[3]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc/compiler'
make[2]: *** [compiler_cycle] エラー 2
make[2]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc'
make[1]: *** [build-stamp.i386-linux] エラー 2
make[1]: Leaving directory `/home/espiya/src/fpcbuild_2.0.4_exp/fpcsrc'
make: *** [fpcsrc/build-stamp.i386-linux] エラー 2
$

残念、途中まではコンパイルできたのですがだめでした。とりあえずあきらめて、何かサンプルを動かして終わりにします。「自作コンパイラの部屋のサンプルプログラム」( http://www.tokumaru.org/plang/cabezon/samples.htm ) の「8クイーン」プログラムを queen.pas ファイルにしてテストします。
$ fpc queen.pas
Free Pascal Compiler version 2.0.4 [2006/09/20] for i386
Copyright (c) 1993-2006 by Florian Klaempfl
Target OS: Linux for i386
Compiling queen.pas
Linking queen
60 Lines compiled, 0.1 sec
$ ls
queen  queen.o  queen.pas
$ ./queen
1 : 1 5 8 6 3 7 2 4
......................
92 : 8 4 1 3 6 2 7 5
解の個数= 92
$

うまくいきました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Intel Fortran Compiler テスト

2007-01-19 22:49:18 | コンピュータ言語
前回非商用Linux版 Intel Fortran Compiler 9.1 で -fast オプションを指定したら動きませんでした。ifort --help を実行して見ます。
$ ifort --help 
...................
-fast  enable -xP -O3 -ipo -no-prec-div -static
...................
-ax<codes> generate code specialized for processors specified by <codes>
           while also generating generic IA-32 code.  <codes> includes
           one or more of the following characters:
    K  Intel Pentium III and compatible Intel processors
    W  Intel Pentium 4 and compatible Intel processors
    N  Intel Pentium 4 and compatible Intel processors.  Enables new
       optimizations in addition to Intel processor-specific optimizations
    P  Intel Core(TM) Duo processors, Intel Core(TM) Solo processors, Intel
       Pentium 4 and compatible Intel processors with Streaming SIMD
       Extensions 3 (SSE3) instruction support
    B  Intel Pentium M and compatible Intel processors
-x<codes>  generate specialized code to run exclusively on processors
           indicated by <codes> as described above.
....................
$

-xP オプションのせいみたいです。そこで、姫野ベンチ を改めて、-O3 でコンパイルします。
$ ifort -O3 himenoBMTxp.f90
............
$ ./a.out
 Select Grid-size:
 Grid-size=
            XS (64x32x32)
            S  (128x64x64)
            M  (256x128x128)
            L  (512x256x256)
            XL (1024x512x512)
XS
  mimax=          65  mjmax=          33  mkmax=          33
  imax=          64  jmax=          32  kmax=          32
  Time measurement accuracy : .10000E-03
  Start rehearsal measurement process.
  Measure the performance in 3 times.
   MFLOPS:   431.1818       time(s):  1.320000000000000E-002  6.2296884E-03
 Now, start the actual measurement process.
 The loop will be excuted in       13636  times.
 This will take about one minute.
 Wait for a while.
  Loop executed for        13636  times
  Gosa :  1.0093708E-11
  MFLOPS:   425.1774       time(s):   60.8457000000000
  Score based on Pentium III 600MHz :   5.132514
FORTRAN PAUSE
PAUSE prompt>
$

動きました。S も実行します。
$ ./a.out
 Select Grid-size:
 Grid-size=
            XS (64x32x32)
            S  (128x64x64)
            M  (256x128x128)
            L  (512x256x256)
            XL (1024x512x512)
S
  mimax=         129  mjmax=          65  mkmax=          65
  imax=         128  jmax=          64  kmax=          64
  Time measurement accuracy : .10000E-03
  Start rehearsal measurement process.
  Measure the performance in 3 times.
   MFLOPS:   431.0915       time(s):  0.114600000000000  3.2962142E-03
 Now, start the actual measurement process.
 The loop will be excuted in        1570  times.
 This will take about one minute.
 Wait for a while.
  Loop executed for         1570  times
  Gosa :  1.8456948E-04
  MFLOPS:   452.6762       time(s):   57.1143000000000
  Score based on Pentium III 600MHz :   5.464464
FORTRAN PAUSE
PAUSE prompt>
$

これはすごい。coLinux は、Fortran 開発環境としても十分に機能します。
私のような古い PC を使っている場合は、-fast を使わずに -x オプションを指定すればいいはずです。実際に、
$ ifort -xN -O3 -ipo -no-prec-div -static himenoBMTxp.f90 

のように指定すれば正しく動作しました。利用の際はオプションを確認しましょう。

coLinux 上の Intel Fortran Compiler でコンパイルしたプログラムは、Windows XP が安定して動いている限り、何日でも実行できます。Intel Fortran Compiler を購入する計画のあるところで、まだ Linux マシンを用意できない場合に、先行してプログラム開発を行いたいようなときは、coLinux がお勧めです。ただし、メモリはふんだんに用意しておく必要があります。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Intel Fortran Compiler

2007-01-18 22:46:45 | コンピュータ言語
今回は、Fortran に挑戦してみます。

早速、Intel Fortran compiler (http://www.intel.com/) を試してみます。というのも、商用コンパイラでありながら、非商用の Linux 用コンパイラを提供してくれる大変ありがたいものだからです。Intel Chip ベースの共有のスーパーコンピュータを使っている場合など、coLinux でこのコンパイラが使えれば非常に役立つと思います。

非商用版の Linux 用コンパイラ Intel Fortran Compiler for Linux
l_fc_c_9.1.036_ia32.tar.gz

をインストールします。ダウンロード時に表示されたシリアルナンバーを用意します。普通にインストールすると、/opt/intel にインストールされてしまうので、あらかじめ /home の方にリンクしておきます。install.sh を実行して、質問にどんどん答えていけば簡単にインストールできるはずです。
$ cd ~/src
$ tar xvzf l_fc_c_9.1.036_ia32.tar.gz
$

# mkdir /home/intel
# cd /opt
# ln -s /home/intel intel
# cd ~espiya/src/l_fc_c_9.1.036
# ./install.sh
................
#

$ source /opt/intel/fc/9.1.036/bin/ifortvars.sh
$ ifort -help
                     Intel(R) Fortran Compiler Help
                     ==============================
.............................
Copyright (C) 1985-2006, Intel Corporation.  All rights reserved.

* Other brands and names are the property of their respective owners.
$

無事に fortran がインストールできました。
試しに、姫野ベンチ( http://accc.riken.jp/HPC/HimenoBMT/index.html)を実行してみます。
f90_xp.lzh

を実行することにします。
$ cd bench/f90_xp
$ ifort -fast himeno_BMTxp.f90
IPO: performing single-file optimizations
IPO: generating object file /tmp/ipo_ifort1KKy9n.o
himenoBMTxp.f90(315) : (col. 5) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(235) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(236) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(237) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(238) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(239) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(240) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(241) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(243) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(244) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(245) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(246) : (col. 2) remark: LOOP WAS VECTORIZED.
himenoBMTxp.f90(248) : (col. 5) remark: LOOP WAS VECTORIZED.
$ ls
a.out  bound.mod  himenoBMTxp.f90  mtrx.mod  others.mod  pres.mod  work.mod
$

うまくコンパイルできました。早速実行してみます。
$ ./a.out

Fatal Error : This program was not built to run on the processor in your 
                system.
$

うまく動きません。-fast オプションは使えないようです。

続きは次回に書きます。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ruby mod_rubyとeruby

2007-01-10 22:44:34 | コンピュータ言語
ruby もインストールできましたので、Webで使いやすいように mod_ruby (http://www.modruby.net/ja/)関連もインストールします。
mod_ruby-1.2.6.tar.gz
eruby-1.0.5.tar.gz

をダウンロードします。展開してインストールを試みましょう。
$ tar xvzf mod_ruby-1.2.6.tar.gz
$ cd mod_ruby-1.2.6
$ ./configure.rb --with-apxs=/usr/local/httpd/bin/apxs
................
$ make
................
$

# make install
................
#
# cp examples/httpd.conf /usr/local/httpd/conf/extra/httpd-ruby.conf
#

続いて、eruby です。
$ tar xvzf eruby-1.0.5.tar.gz
$ cd eruby-1.0.5
$ ./configure --with-charset=utf-8
................
$ make
................
# make install
................
#

設定してみます。先ほどインストールした、httpd-ruby.conf を修正します。
# vi /usr/local/httpd/conf/extra/httpd-ruby.conf
(次の行を修正します。)

LoadModule ruby_module /usr/local/httpd/modules/mod_ruby.so
<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  <Location /ruby>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
    Options +ExecCGI
  </Location>
  <Files *.rbx>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>
  RubyRequire apache/eruby-run
  <Location /eruby>
    SetHandler ruby-object
    RubyHandler Apache::ERubyRun.instance
  </Location>
  <Files *.rhtml>
    SetHandler ruby-object
    RubyHandler Apache::ERubyRun.instance
  </Files>
  RubyRequire apache/erb-run
  <Location /erb>
    SetHandler ruby-object
    RubyHandler Apache::ERbRun.instance
  </Location>
</IfModule>

# vi /usr/local/httpd/conf/httpd.conf
(次の行を追加します。)

Include conf/extra/httpd-ruby.conf

#

こういうとき、extra ディレクトリ下に設定ファイルが分散できるようになったのは便利ですね。
httpd を再起動してテストします。
# /etc/rc.d/init.d/httpd restart
.............
#

example/test.rhtml を DocumentRoot の下において、ブラウザで見ると、正しく実行されました。eruby は OK です。
次に、次のような ruby プログラムを
print("Hello, World. \n" );

hello.rbx ファイルにして、ブラウザで見ると、hello.rbx は、Forbidden になります。
/usr/local/httpd/logs/error_log に
[error] access to /home/data/www/espiya/ruby/hello.rbx failed 
        for (null), reason: Options ExecCGI is off in this directory

と記録されているように、ExecCGI が禁止されているからです。ScriptAlias で指定されている /home/data/cgi-bin に ExecCGI が指定されていることを確認して、そこに移動してみます。
 
# mv hello.rbx /home/data/cgi-bin
#

として、参照すると、
[error] access to /home/data/cgi-bin/hello.rbx failed for (null), 
        reason: file permissions deny server execution

このようなエラーがでます。実行可能にしておく必要があります。
# chmod +x /home/data/cgi-bin/hello.rbx
# cd /home/data/cgi-bin/
# ./hello.rbx 
./hello.rbx: line 1: syntax error near unexpected token `"Hello, World.\n"'
./hello.rbx: line 1: `print("Hello, World.\n");'
# ruby hello.rbx
Hello, World.
#

このように、そのファイルは実行できないが、ruby に渡せば実行できる状態でも、.rbx をつけておけばブラウザで参照すると、mod_ruby によって、ruby に渡されて実行できるようになるわけです。これでブラウザから参照すると以下のようになります。
$ lynx -dump http://www.example.co.jp/cgi-bin/hello.rbx
Hello, World.

$

うまく動いています。次回は、mod_ruby テストで分かった、httpd のことについて述べたいと思います。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする