You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
4.9 KiB

# How to build sfntly C++ port
## Build Environment Requirements
* cmake 2.6 or above
* C++ compiler requirement
* Windows: Visual C++ 2008, Visual C++ 2010
* Linux: g++ 4.3 or above.
g++ must support built-in atomic ops and has companion libstd++.
* Mac: Apple XCode 3.2.5 or above.
## External Dependencies
sfntly is dependent on several external packages.
* [Google C++ Testing Framework](https://github.com/google/googletest)
You can download the package yourself or extract the one from `ext/redist`.
The package needs to be extracted to ext and rename/symbolic link to `gtest`.
sfntly C++ port had been tested with gTest 1.6.0.
* ICU
For Linux, default ICU headers in system will be used.
Linux users please make sure you have dev packages for ICU.
For example, you can run `sudo apt-get install libicu-dev` in Ubuntu and see if the required library is installed.
For Windows, download from http://site.icu-project.org/download or extract the one from `ext/redist`.
You can also provide your own ICU package.
However, you need to alter the include path, library path, and provide `icudt.dll`.
Tested with ICU 4.6.1 binary release.
For Mac users, please download ICU source tarball from http://site.icu-project.org/download
and install according to ICU documents.
## Getting the Source
Clone the Git repository from https://github.com/googlei18n/sfntly.
## Building on Windows
Let's assume your folder for sfntly is `d:\src\sfntly`.
1. If you don't have cmake installed, extract the cmake-XXX.zip
into `d:\src\sfntly\cpp\ext\cmake` removing the "-XXX" part.
The extracted binary should be in `d:\src\sfntly\cpp\ext\cmake\bin\cmake.exe`.
2. Extract gtest-XXX.zip into `d:\src\sfntly\cpp\ext\gtest`
removing the "-XXX" part.
3. Extract icu4c-XXX.zip into `d:\src\sfntly\cpp\ext\icu`
removing the "-XXX" part.
4. Run the following commands to create the Visual Studio solution files:
```
d:
cd d:\src\sfntly\cpp
md build
cd build
..\ext\cmake\bin\cmake ..
```
You should see `sfntly.sln` in `d:\src\sfntly\cpp\build`.
5. Until the test is modified to access the fonts in the `ext\data` directory:
copy the test fonts from `d:\src\sfntly\cpp\data\ext\` to `d:\src\sfntly\cpp\build\bin\Debug`.
6. Open sfntly.sln.
Since sfntly use STL extensively, please patch your Visual Studio for any STL-related hotfixes/service packs.
7. Build the solution (if the icuuc dll is not found,
you may need to add `d:\src\sfntly\cpp\ext\icu\bin` to the system path).
### Building on Windows via Command Line
Visual Studio 2008 and 2010 support command line building,
therefore you dont need the IDE to build the project.
For Visual Studio 2008 (assume its installed at `c:\vs08`)
cd d:\src\sfntly\cpp\build
..\ext\cmake\bin\cmake .. -G "Visual Studio 9 2008"
c:\vs08\common7\tools\vsvars32.bat
vcbuild sfntly.sln
We invoke the cmake with `-G` to make sure
Visual Studio 2008 solution/project files are generated.
You can also use `devenv sfntly.sln /build`
to build the solution instead of using `vcbuild`.
There are subtle differences between `devenv` and `vcbuild`.
Please refer to your Visual Studio manual for more details.
For Visual Studio 2010 (assume its installed at `c:\vs10`)
cd d:\src\sfntly\cpp\build
..\ext\cmake\bin\cmake .. -G "Visual Studio 10"
c:\vs10\common7\tools\vsvars32.bat
msbuild sfntly.sln
If you install both Visual Studio 2008 and 2010 on your system,
you cant run the scripts above in the same Command Prompt window.
`vsvars32.bat` assumes that it is run from a clean Command Prompt.
## Building on Linux/Mac
### Recommended Out-of-Source Building
1. `cd` *<sfntly dir>*
2. `mkdir build`
3. `cd build`
4. `cmake ..`
5. `make`
### Default In-Source Building
> This is not recommended.
> Please use out-of-source whenever possible.
1. `cd` *<sfntly dir>*
2. `cmake .`
3. `make`
### Using clang Instead
Change the `cmake` command line to
CC=clang CXX=clang++ cmake ..
The generated Makefile will use clang.
Please note that sfntly uses a lot of advanced C++ semantics that
might not be understood or compiled correctly by earlier versions
of clang (2.8 and before).
sfntly is tested to compile and run correctly on clang 3.0 (trunk 135314).
clang 2.9 might work but unfortunately we dont have the resource to test it.
### Debug and Release Builds
Currently Debug builds are set as default.
To build Release builds, you can either modify the `CMakeList.txt`,
or set environment variable `CMAKE_BUILD_TYPE` to `Release`
before invoking `cmake`.
Windows users can just switch the configuration in Visual Studio.
## Running Unit Test
A program named `unit_test` will be generated after a full compilation.
It expects fonts in `data/ext` to be in the same directory it resides to execute the unit tests.
Windows users also needs to copy `icudt.dll` and `icuuc.dll` to that directory.