Building OSSv4 from source
Contents
- 1 Building the OSS sound system from source
- 1.1 Requirements to build the source code
- 1.2 Building the source
- 1.3 Testing the Open Sound System
- 2 Errors during build
- 2.1 Error: Cannot open: No such file or directory
- 2.2 Error: Too many levels of symbolic links
- 2.3 Error: No such file or directory
- 2.4 Error: undefined reference to `oss_strcmp'
- 2.5 Error related to "warnings being treated as errors"
- 2.6 Error: /bin/sh: scripts/mod/modpost: No such file or directory
- 2.7 Error: cp: cannot stat `lib/libsalsa/.libs/libsalsa.so.2.0.0': No such file or directory
- 2.8 Error: No rule to make target `/usr/lib/oss/build/osscore_mainline.c', needed by `/usr/lib/oss/build/osscore_mainline.o'. Stop.
- 3 Notes
Building the OSS sound system from source
Requirements to build the source code
- OS: Linux 2.6+, Solaris v10+, FreeBSD 6+, UnixWare7
- OS system headers, development libraries
- Compiler: GCC, Sun Studio 10+, UnixWare C Compiler
- Tools: GNU gawk - (Solaris versions at: http://www.sun.com/software/solaris/freeware/s10pkgs_download.xml) (used for creating man pages)
- Graphics Libraries: Runtime libraries and header files for GTK1 or for GTK2 (used by ossxmix)
Building the source
Basic use of the build system is close to autoconf-based build system ("configure && make && make install"), with one very important difference: The OSS build system must use separate build and source directories (unlike GNU autoconf where both are mixed), so a command like "./configure" will NOT work. These instructions will show how it's used.
Obtain the OSS source
Mercurial repository - requires mercurial to get the source, e.g.
hg clone http://mercurial.opensound.com /usr/src/oss
Change to the source directory
cd /usr/src
Extract the source tarball
This step is only needed if you didn't use mercurial earlier.
tar -xvjf ~/oss-v*.tar.bz2
Create a build directory, and make it current
rm -rf ~/oss mkdir ~/oss cd ~/oss
Do not use a directory which is a subdirectory of the extracted source - the configure script will fail. Also, the build directory must be empty.
Run the configure script
Note that the configure script must be invoked using a full pathname. OSSv4.0's configure script will fail if a relative pathname is used.
/usr/src/oss*/configure
Notable configure switches
- GTK1 environment variable: Force use of GTK1 for ossxmix rather than GTK2.
- NO_WARNING_CHECKS env var: don't use -Werror and -Wall flags.
- --only-drv=[list]: Compile only the drivers listed in the comma delimited list. Note: don't forget oss_ prefix e.g. oss_audigyls
- --config-vmix=NO|FLOAT|FIXEDPOINT: Don't compile vmix (NO)/Use only integer arithmetic for vmix (FIXEDPOINT)/Use floating arithmatic (FLOAT). Compiling on Linux defaults to FLOAT, all else defaults to FIXEDPOINT.
- --enable-libsalsa=NO: Don't build libsalsa (Linux only - other OSs don't build libsalsa).
Run make build
make build
Packing Open Sound System (optional)
make package
The package target creates a native package for the currently compiled-for OS. On Linux an RPM package will be generated.
There are two alternative targets when compiling for the Linux OS:
- make deb
- make tarball
The first creates a OSS package in debian's DEB format. The second creates a tarball of OSS.
Installing the OSS kernel modules
The kernel modules are built during a separate phase of the installation. It is necessary to become root to build the kernel modules:
su root make install
This will create the appropriate kernel modules, and the Open Sound System tools.
- Alternately, you can install the package created by the package targets above to the same effect as the "make install" command.
Installation is now complete.
Testing the Open Sound System
To test the Open Sound System:
soundon osstest
Errors during build
Error: Cannot open: No such file or directory
This error can occur when tar tries to extract to /usr/src but doesn't have write permissions.
bunzip2 -c /tmp/oss-v4.1-build*-src-gpl.tar.bz2 | tar xvf - oss-v4.1-build080509-src-gpl/RELNOTES.txt tar: oss-v4.1-build080509-src-gpl/RELNOTES.txt: Cannot open: No such file or directory tar: Error exit delayed from previous errors
Resolution
Use a directory which you have write permissions to, or change to root (su/sudo), or change /usr/src permissions to allow writing.
Error: Too many levels of symbolic links
This error may occur when the configure script is being run within a subdirectory of the source directory. The problem does not occur in OSS v4.2 and above.
# This may produce an error cd ~/oss-v* mkdir build cd build ../configure
This produces an error:
../build/cmd/.config: Too many levels of symbolic links
Resolution
Use a build directory outside of the current project directory:
cd mkdir oss cd oss /usr/src/oss/oss-v*/configure
Error: No such file or directory
The configure script must be invoked using a full pathname. This error occurs, if a relative pathname is used. This restriction does not apply to version 4.1 and above.
Scanning . Scanning ./cmd Scanning ./cmd/ossdevlinks ./cmd/ossdevlinks/ossdevlinks.c: No such file or directory
Resolution
Invoke the configure script with a full pathname.
Error: undefined reference to `oss_strcmp'
ossdevlinks.c:(.text+0x21c): undefined reference to `oss_strcmp'
Resolution
You probably have had CFLAGS, OSFLAGS or LIBRARIES set in the environment before running configure. The best option is to unset them all and not to try to pass manual flags via configure - it's unlikely any flags will provide any performance gain at all, and far more likely they'll make the compilation fail somewhere.
cc1: warnings being treated as errors
Resolution
OSS compile uses -Wall and -Werror. A few compilers/headers may be more strict than the usual, causing the compile to fail. Set the NO_WARNING_CHECKS environment variable when calling configure to avoid this.
Error: /bin/sh: scripts/mod/modpost: No such file or directory
This error may occur during "make install". The error occurs because the kernel headers scripts have not been built.
Resolution
Build the kernel header scripts as follows:
cd /usr/src/linux make scripts
Error: cp: cannot stat `lib/libsalsa/.libs/libsalsa.so.2.0.0': No such file or directory
This error occurs during compilation.
Resolution
This error can be safely ignored.
Error: No rule to make target `/usr/lib/oss/build/osscore_mainline.c', needed by `/usr/lib/oss/build/osscore_mainline.o'. Stop.
This error occurs during installation.
Resolution
"--only-drv" switch requires to keep "oss_" prefix ("--only-drv=oss_sblive,oss_hdaudio").
Notes
Speeding up compiling
- --only-drv switch can be used to only compile the drivers the system uses. "ossinfo", "ossdetect -v" or devices.list file can be used to get the names of the drivers.
- --config-midi=NO and --enable-libsalsa=NO (Linux only) can be used to disable compiling of MIDI support and of libsalsa.
The Open Sound System on Linux/geode
geode processors don't have the necessary floating point support for floating point arithmetic used by vmix FLOAT mode. The parameter --config-vmix=FIXEDPOINT should be used to make vmix use integer fixed point arithmetic.