ASPカーネルを1.7.0から1.8.0へアップグレードする

ASPカーネル1.7.0系だとperlのバージョンアップに伴って,make depend時に不要なワーニングがでたりするので1.8.0系に上げたいのだけど,簡易パッケージはまだまだ対応が少ない…。じゃあ個別パッケージを使ってカーネル本体(ターゲット非依存部)は1.8.0を使い,ターゲット依存部は1.7.0を使った場合の変更箇所をまとめました

変更箇所について

カーネルのdoc/version.txtに書かれていますが以下の変更がされているようです。

  1. char_t型の廃止
  2. SILのメモリ空間読出し関数に渡すポインタの属性の変更
  3. 非タスクコンテキスト用のスタック領域のサイズチェックの追加
  4. vasyslog.cをlibraryディレクトリに移動
  5. MISRA-C対応のためのコードの修正
  6. その他のバグフィックス
  7. サンプルのMakefileの修正
  8. その他の修正

これらありますが,ターゲット依存部に関連した作業をみていきます。
環境はapsh4_gccです。

char_t型の廃止

grepすれば一発ですが,prc_config.h,target_config.c,target_serial.c,target_serial.h,target_syssvc.hあとはPDICにあるsh_scif.c,sh_scif.hで使われていた char_t型をchar型へ変更しました。

サンプルのMakefileの修正

  • LDFLAGSは,cfg1_out.cのリンク時には適用されないように修正.

このためにcfg1_out.cをビルドするときに-nostdlibがつかなくて,止まってました。
sampleのMakefileで該当箇所を見てみます。
1.7.0では

kernel_cfg.timestamp: $(START_OBJS) cfg1_out.o $(END_OBJS) $(HIDDEN_OBJS)
kernel_cfg.timestamp $(CFG2_OUT): $(APPL_CFG)
	$(LINK) $(CFLAGS) $(LDFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \
						$(START_OBJS) cfg1_out.o $(END_OBJS)

になっていたのですが,1.8.0では

$(CFG2_OUT_SRCS): kernel_cfg.timestamp
kernel_cfg.timestamp: $(APPL_CFG) \
						$(START_OBJS) cfg1_out.o $(END_OBJS) $(HIDDEN_OBJS)
	$(LINK) $(CFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \
						$(START_OBJS) cfg1_out.o $(END_OBJS)

に変わっています。ポーティングガイドラインではCFG1_OUT_LDFLAGSについて以下のように記述されています。

(2-4-16) CFG1_OUT_LDFLAGS	cfg1_out.cに対するリンクオプション

ターゲットに依存して,cfg1_out.cをリンクする際に適用するオプションを追
加する場合には,上に示した変数に定義する.

なお,LDFLAGSは,cfg1_out.cをリンクする際には適用されないため,LDFLAGS
に定義したオプションで,cfg1_out.cをリンクする際にも必要なものは,
CFG1_OUT_LDFLAGSにも定義する必要がある.

というわけで,Makefile.targetに追加すればよさそうです…。が実際にはMakefile.prcが以下のように悪さをしていました。

#
#  FPUを使用する場合
#
ifeq ($(FPU_ENABLE),true)
CDEFS := $(CDEFS) -DFPU_ENABLE
CFG1_OUT_LDFLAGS := -lgcc
endif

なので,この部分変更します。

#
#  FPUを使用する場合
#
ifeq ($(FPU_ENABLE),true)
CDEFS := $(CDEFS) -DFPU_ENABLE
endif

それで,上に持っていきます。

#
#  コンパイルオプション
#
COPTS := $(COPTS)
LDFLAGS := -nostdlib $(LDFLAGS) 
CDEFS := $(CDEFS) -DTOPPERS_LABEL_ASM
LIBS := $(LIBS) -lgcc
CFG1_OUT_LDFLAGS := -nostdlib -lgcc $(CFG1_OUT_LDFLAGS) 

nostdlibの設定についてはポーティングガイドラインにはターゲットで…と書かれていますが,archで設定したほうがターゲット依存部で変更する箇所が少なくなるのでは…と思ったりもしています。この辺りはコントリビュータの好みかもしれませんが…。

Cygwinでのcfg(1.9.0)のビルドについて

Cygwinはパッケージをある程度ダウンロードできるのでcfgのビルドもそんなに難しくはないだろうということで一応まとめておくことにします。
CygwinLinuxディストリビューションと同じで、作成したcfgを他のバージョン(端末)のCygwinに持っていっても動作しない可能性がありますので、複数のCygwin環境の場合は個々につくるか、Cygwinの環境を合わせた方がよいです。

Cygwinのインストール

標準パッケージ+Develパッケージを全てインストールしました。
インストール後に以下の作業を行ってください
- boostで検索し、libboost-develを追加インストールしてください。
- xercesで検索し、xercesとxerces-develをアンインストールしてください。*1

Xerces-cのビルドとインストール(HAS_CFG_XML=1の時のみ)

XMLのパースにXerces-cを使っているので構築します。*2
Cygwinのパッケージに入っているXercesが3.0.0と古いのでソースからビルドすることにします。
Xerces-cの3.1.1をダウンロードして、やっぱりconfigureを一部修正して、xerces_cv_icu_presentの値を強制的にYESにする必要がありそうです。

$ ../configure --disable-pretty-make --disable-network --enable-transcoder-icu --disable-shared CFLAGS=-O3 CXXFLAGS=-O3

そうすると以下のような設定が表示されました。

configure: Report:
configure:   File Manager: POSIX
configure:   Mutex Manager: Windows
configure:   Transcoder: icu
configure:   NetAccessor: disabled
configure:   Message Loader: inmemory

あとは

$ make;make install

だけです。

cfgのビルド

ATK2をビルド(HAS_CFG_XML=1)するのであれば、

$ ./configure
LIBBOOST_SUFFIX=-mt
BOOST_VERSION=1_48
BOOST_DIR=/usr/include
XERCES_DIR=/usr/include
LIBBOOST_DIR=/usr/lib
LIBXERCES_DIR=/usr/lib
OPTIONS=
HAS_CFG_XML=1

しないのであれば、

$ ./configure --without-xml
LIBBOOST_SUFFIX=-mt
BOOST_VERSION=1_48
BOOST_DIR=/usr/include
XERCES_DIR=/usr/include
LIBBOOST_DIR=/usr/lib
LIBXERCES_DIR=/usr/lib
OPTIONS=

$ make

とすればcft.exeの出来上がりです。ちなみに出来上がったcfgのサイズは以下のとおりでした。

  • HAS_CFG_XML=0 4125317
  • HAS_CFG_XML=1 8190878

今回使った環境は

でした

*1:ソースからビルドするため

*2:C言語で動く汎用的なXMLパーサがこれしかなかった

Mountain Lionでgccのクロスコンパイル作成

Snow Leopardまではすんなりいったんですけど…とか言われてちょっと自分のマシンでもできるか試して見ました。

作成環境

MacPortsgccをインストールはしていません

$sudo port install libmpc

環境変数の設定

MacPortsでインストールしたmpcのライブラリを使うために。ソースからインストールした場合はそのインストール先を。

$ export CFLAGS="-I/opt/local/include -O2"
$ export LDFLAGS="-L/opt/local/lib"

ダウンロード

- gcc(4.6.3)
- binutils(2.22)*1

binutils

以下,sh-elfの例
インストール先は/usr/local/gnu以下です

$mkdir builld
$cd build
$../configure --prefix=/usr/local/gnu --target=sh-elf --disable-nls
$make -j4
$sudo make install

gcc

$mkdir build
$cd build
$../configure --prefix=/usr/local/gnu --target=sh-elf --disable-nls --enable-languages=c --disable-libssp --with-gnu-ld --with-gnu-ar --disable-shared --enable-languages=c
$make -j4
$sudo make install

*1:2.23を入れたらldでセグメンテーションエラーが出たので2.22を使っています

コンソーシアムによる公開資料

書籍以外のまとまった日本語情報がなかったのですが,DITAコンソーシアムにおいて,仕様書やライティングガイドの日本語翻訳が公開資料として提供されています。いまさら気が付きました。

言語リファレンスとかチマチマ英語を読んでいたのですが,こちらを参照できるとかなり作業効率があがりそうです。

oXygen 14のDITA-OT 1.5.4で日本語出力させる方法

前回のDITA-OT 1.5.3から1.5.4で日本語の出力方法が若干変わったので,再掲。

環境

素のDITA-OT 1.5.4でも問題ないと思います。

IPAフォントのフォントメトリックスの作成

以前に書いた方法でフォントメトリックスを作成します。

default.languageの変更

%DITA-OT/lib/configuration.propertiesのdefault.languagejaに変更。

#DITA-OT configuration properties
default.language = ja
# PDF2 defaults
org.dita.pdf2.index.frame-markup = false
org.dita.pdf2.i18n.enabled = true
org.dita.pdf2.use-out-temp = false

1.5.3から1.5.4への変更で一番変わったところがここです。まさかマイナーバージョンでここを変えてくるとは思わなかったです。

catalog.xmlの変更

%DITA-OT/demo/fo/Customization/catalog.xml.origを%DITA-OT/demo/fo/Customization/catalog.xmlにコピーします。
そして,font-mappings.xmlを有効にするようにコメントを外します。

<?xml version="1.0" ?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
    prefer="system">
...
    <!-- FontMapper configuration override entry.-->
    <uri name="cfg:fo/font-mappings.xml" uri="fo/font-mappings.xml"/>
...
</catalog>

font-mappings.xmlの変更

相変わらず,adobeのフォントをデフォルトにしているので変更します。
%DITA-OT/demo/fo/cfg/fo/font-mappings.xmlを%DITA-OT/demo/fo/Customization/foへコピーします。
そしてphysical-fontを修正します。

<font-mappings>
  <font-table>
    
    <!-- Backwards compatibility aliases -->
    <aliases>
      <alias name="serif">Serif</alias>
    </aliases>
    <aliases>
      <alias name="sans-serif">Sans</alias>
    </aliases>
    <aliases>
      <alias name="monospace">Monospaced</alias>
    </aliases>
    <aliases>
      <alias name="Helvetica">Normal</alias>
    </aliases>
    <aliases>
      <alias name="Courier">Monospaced</alias>
    </aliases>

    <logical-font name="Sans">
      <physical-font char-set="default">
        <font-face>Helvetica, Arial Unicode MS</font-face>
      </physical-font>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>IPAGothic</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium</font-face>
      </physical-font>
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SubmenuSymbol">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SymbolsSuperscript">
        <font-face>Helvetica, Arial Unicode MS</font-face>
        <baseline-shift>20%</baseline-shift>
        <override-size>smaller</override-size>
      </physical-font>
    </logical-font>

    <logical-font name="Serif">
      <physical-font char-set="default">
        <font-face>Times New Roman, Times</font-face>
      </physical-font>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>IPAMincho</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium</font-face>
      </physical-font>
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SubmenuSymbol">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SymbolsSuperscript">
        <font-face>Times New Roman, Times</font-face>
        <baseline-shift>20%</baseline-shift>
        <override-size>smaller</override-size>
      </physical-font>
    </logical-font>

    <logical-font name="Monospaced">
      <physical-font char-set="default">
        <font-face>Courier New, Courier</font-face>
      </physical-font>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>IPAGothic</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium</font-face>
      </physical-font>
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SymbolsSuperscript">
        <font-face>Courier New, Courier</font-face>
        <baseline-shift>20%</baseline-shift>
        <override-size>smaller</override-size>
      </physical-font>
    </logical-font>
  </font-table>

</font-mappings>

fop.xconfの変更

font-baseと埋め込みフォントの設定を行います。
IPAフォントとフォントメトリックスはC:\fop-1.0\fontsにあるとします。

<!-- NOTE: This is the version of the configuration -->
<fop version="1.0">

  <!-- Strict FO validation -->
  <strict-validation>false</strict-validation>

  <!-- Base URL for resolving relative URLs -->
  <base>.</base>
  <font-base>C:\fop-1.0\fonts</font-base>
...
  <!-- Information for specific renderers -->
  <!-- Uses renderer mime type for renderers -->
  <renderers>
    <renderer mime="application/pdf">
      <filterList>
        <!-- provides compression using zlib flate (default is on) -->
        <value>flate</value>
  
        <!-- encodes binary data into printable ascii characters (default off)
             This provides about a 4:5 expansion of data size -->
        <!-- <value>ascii-85</value> -->
  
        <!-- encodes binary data with hex representation (default off)
             This filter is not recommended as it doubles the data size -->
        <!-- <value>ascii-hex</value> -->
      </filterList>

      <fonts>
        <!-- embedded fonts -->
        <!--
        This information must exactly match the font specified
        in the fo file. Otherwise it will use a default font.

        For example,
        <fo:inline font-family="Arial" font-weight="bold" font-style="normal">
            Arial-normal-normal font
        </fo:inline>
        for the font triplet specified by:
        <font-triplet name="Arial" style="normal" weight="bold"/>

        If you do not want to embed the font in the pdf document
        then do not include the "embed-url" attribute.
        The font will be needed where the document is viewed
        for it to be displayed properly.

        possible styles: normal | italic | oblique | backslant
        possible weights: normal | bold | 100 | 200 | 300 | 400
                          | 500 | 600 | 700 | 800 | 900
        (normal = 400, bold = 700)
        -->

        <!--
        <font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
          <font-triplet name="Arial" style="normal" weight="normal"/>
          <font-triplet name="ArialMT" style="normal" weight="normal"/>
        </font>
        <font metrics-url="arialb.xml" kerning="yes" embed-url="arialb.ttf">
          <font-triplet name="Arial" style="normal" weight="bold"/>
          <font-triplet name="ArialMT" style="normal" weight="bold"/>
        </font>
        -->
        <font metrics-url="ipamincho.xml" embed-url="ipam.ttc" kerning="yes">
          <font-triplet name="IPAMincho" style="normal" weight="normal"/>
          <font-triplet name="IPAMincho" style="normal" weight="bold"/>
          <font-triplet name="IPAMincho" style="italic" weight="normal"/>
          <font-triplet name="IPAMincho" style="italic" weight="bold"/>
        </font>
        <font metrics-url="ipagothic.xml" embed-url="ipag.ttc" kerning="yes">
          <font-triplet name="IPAGothic" style="normal" weight="normal"/>
          <font-triplet name="IPAGothic" style="normal" weight="bold"/>
          <font-triplet name="IPAGothic" style="italic" weight="normal"/>
          <font-triplet name="IPAGothic" style="italic" weight="bold"/>
        </font>
    </fonts>

      <!-- This option lets you specify additional options on an XML handler -->
      <!--xml-handler namespace="http://www.w3.org/2000/svg">
        <stroke-text>false</stroke-text>
      </xml-handler-->

    </renderer>

...

How to Import XSD by EMF Project wizard

ウィザードでXSDファイルをインポートできるよ的なサイトが多かったのだけど,自分はいくらやってもウィザードに出て来ませんでした。
EMFのプラグインだけじゃダメで,XSDのSDKプラグインをインストールしないといけないようです。

[XSD - XML Schema Definition SDK]のプラグインをインストールするとウィザード時にXMLのモデルインポートが可能になります。

でPython環境(PyDev)を整える Windows編

同僚がPythonistaでして,こちらもそれなりに環境を整えないとレビューもできないわけです。
前提としてEclipseは導入済みです。今回はeclipse-SDK-4.2-win32を使っています。

Pythonのインストール

Python標準リリースを使用します。
Windowsインストーラpython-2.7.3.msiをダウンロードして,インストールを行いました。
インストール先は,C:\Python27にしました。

PyDevのインストール

残念ながらJunoでも,UpdateSiteにはPythonが無いようです。

今回はPyDevを使って見ることにしました。PyDevでは専用にAptana Studio 3というのがあるようですが,自前のEclipseへインストールします。

UpdateSiteの登録

[Help]-[Install New Software...]の[Work with]にある[Add]をクリックして,PyDevのリポジトリを追加します。

プラグインの追加

[Pydev]-[PyDev for Eclipse]をチェックし,[NEXT]をクリックしプラグインを追加します。

インストール途中で以下のようなダイアログが表示されたら,チェックをつけて,[OK]をクリックします。

プラグインの追加が終わったら,Eclipseを再起動するメッセージが表示されるので,再起動を行います。

Python設定の確認

[Windows]-[Preferences]で[PyDev]-[Interpreter - Python]を表示し,Python標準リリースが設定されているか確認します。
設定されていない場合は,[Auto Config]をクリックすると設定できるはずです。

Pythonの動作確認

[File]-[New]-[Project]でプロジェクトを作成します。[PyDev]-[PyDev Project]を選択し,[Next]をクリックします。

プロジェクト名を入れて[Finish]をクリックします

プロジェクトに作成してあるPythonのコードをコピーし,選択後,[Run]-[Debug As]-[Python Run]で実行され,Consolに出力されるようになります。