2
# Extract OSS4.2 core & drivers modules.
3
# based on http://www.arklinux.org/~bero/oss2kconfig
8
echo "$0 PATH_TO_NEWDIR PATH_TO_OSS"
12
[ "$#" != 2 ] && usage
13
#[ ! -f "$1"/Kbuild ] && usage "$1 does not appear to be a kernel source tree"
14
[ ! -d "$2"/oss ] && usage "$2 does not appear to be a OSS source tree"
19
mkdir -p $NEWDIR/core $NEWDIR/drivers $NEWDIR/include
23
# Remove sparc/solaris stuff
24
rm -rf kernel/drv/osscore
25
rm -rf kernel/drv/oss_audiocs
26
rm -rf kernel/drv/oss_sadasupport
28
# Move bits into the kernel tree...
29
cp -L include/soundcard.h "$NEWDIR"/include
30
cp -L include/oss_userdev_exports.h "$NEWDIR"/include
32
cp -L kernel/OS/Linux/*.[ch] "$NEWDIR"/core/
33
cp -L kernel/OS/Linux/wrapper/*.[ch] "$NEWDIR"/core/
34
cp -L setup/Linux/oss/build/*.inc "$NEWDIR"/drivers/
35
cp -L setup/Linux/oss/build/* "$NEWDIR"/core/
36
rm "$NEWDIR"/core/*.inc
37
rm "$NEWDIR"/core/install.sh
38
cp -rL kernel/framework/include/* "$NEWDIR"/core/
39
mv "$NEWDIR"/core/osscore.c "$NEWDIR"/core/oss_core.c
43
for i in ac97 audio midi midi_stubs mixer osscore remux sndstat uart401 vmix_core; do
44
i="kernel/framework/$i"
45
[ -d "$i" ] || continue
50
SRCCOUNT=$((SRCCOUNT + 1))
53
rm -f "$i"/*.man "$i"/Makefile
54
cp -L "$i"/* "$NEWDIR"/core/
56
OBJS="os_linux.o `echo $SOURCES |sed -e 's,\.c,.o,g'`"
57
cat >"$NEWDIR"/core/Makefile <<EOF
58
EXTRA_CFLAGS = -I\$(KBUILD_EXTMOD) -mhard-float -isystem /usr/include
60
osscore-objs := oss_core.o $OBJS
63
# This is somewhat ugly, but unavoidable -- parts of OSS need those defines and
64
# access to system includes while osscore.c can't be compiled with them...
66
echo "CFLAGS_$i = -isystem /usr/include -D_KERNEL" >>"$NEWDIR"/core/Makefile
70
cat >"$NEWDIR"/drivers/Makefile <<EOF
72
echo "static const struct modversion_info ____versions[]" >> osscore_symbols.inc
73
echo " __attribute__((used))" >> osscore_symbols.inc
74
echo "__attribute__((section(\"__versions\"))) = {" >> osscore_symbols.inc
75
sed -e "s:^:{:" -e "s:\t:, \":" -e "s:\t\(.\)*:\"},:" < Module.symvers >> osscore_symbols.inc
76
echo "};" >> osscore_symbols.inc
78
EXTRA_CFLAGS=-D_KERNEL -I\$(KBUILD_EXTMOD)/../core -I\$(KBUILD_EXTMOD) -isystem /usr/include -mhard-float
81
# Merge the drivers...
82
for i in kernel/drv/*; do
83
[ -d "$i" ] || continue
85
DEV="`echo $NAME | tr a-z A-Z`"
90
if [ "$j" = "$NAME.c" ]; then
92
SOURCES="$SOURCES ${NAME}driver.c"
96
SRCCOUNT=$((SRCCOUNT + 1))
99
if [ -e target/build/"$NAME".c ]; then
100
cp target/build/"$NAME".c "$NEWDIR"/drivers/${NAME}module.c
101
SOURCES="$SOURCES ${NAME}module.c"
102
SRCCOUNT=$((SRCCOUNT + 1))
105
rm -f "$i"/*.man "$i"/Makefile
106
cp -L "$i"/* "$NEWDIR"/drivers/
107
if [ "$SRCCOUNT" = "1" ]; then
108
echo "obj-m += ${SOURCES/.c/.o}" >>"$NEWDIR"/drivers/Makefile
110
echo "obj-m += $NAME.o" >>"$NEWDIR"/drivers/Makefile
111
echo "$NAME-objs := `echo $SOURCES |sed -e 's,\.c,.o,g'`" >>"$NEWDIR"/drivers/Makefile
114
rm -rf "$NEWDIR"/drivers/*.o
118
#echo 'obj-m += core/ drivers/ ' > "$NEWDIR"/Makefile
120
# Adjust OSS files to some changed header file locations
121
find "$NEWDIR"/ -type f |xargs sed -i -e 's,"soundcard.h","../include/soundcard.h",g;s,../include/internals/,,g;s,"../include/sys/soundcard.h","../include/soundcard.h",g'
122
find "$NEWDIR"/ -type f |xargs sed -i -e 's,<oss_userdev_exports.h>,"../include/oss_userdev_exports.h",g'
123
find "$NEWDIR"/ -type f |xargs sed -i -e 's,"oss_exports.h",<ossddk/oss_exports.h>,g'
124
find "$NEWDIR"/ -type f |xargs sed -i -e 's,"ossddk.h",<ossddk/ossddk.h>,g'
125
sed -i -e 's,kernel/OS/Linux/wrapper/wrap.h,wrap.h,g' "$NEWDIR"/core/os.h
126
sed -i -e 's,#include "ubuntu_version_hack.inc",,g' "$NEWDIR"/core/oss_core.c
128
# Don't trust OSS_LITTLE_ENDIAN & OSS_BIG_ENDIAN
129
sed -i -e '/^#define AUDIO_CORE_H/a\#include <endian.h>' "$NEWDIR"/core/audio_core.h
130
find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifdef OSS_BIG_ENDIAN,#if __BYTE_ORDER == __BIG_ENDIAN,g'
131
find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifndef OSS_BIG_ENDIAN,#if __BYTE_ORDER != __BIG_ENDIAN,g'
132
find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifdef OSS_LITTLE_ENDIAN,#if __BYTE_ORDER == __LITTLE_ENDIAN,g'
133
find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifndef OSS_LITTLE_ENDIAN,#if __BYTE_ORDER != __LITTLE_ENDIAN,g'
135
# OSS4 drivers need to depend on OSS4 core and not OSS3 from the kernel
136
ln -sf ../core/Module.symvers "$NEWDIR"/drivers/Module.symvers