tarball: Building and installing EcereAudio
authorJerome St-Louis <jerome@ecere.com>
Sat, 12 Jul 2014 04:00:42 +0000 (00:00 -0400)
committerJerome St-Louis <jerome@ecere.com>
Sat, 12 Jul 2014 04:01:47 +0000 (00:01 -0400)
Makefile
extras/audio/EcereAudio.epj
extras/audio/Makefile [new file with mode: 0644]

index d905252..4da9f82 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard fixprecompile cleantarget pots installer regenbootstrap updatebootstrap update_ecere update_libec update_ecp update_ecc update_ecs
+.PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard fixprecompile cleantarget pots installer regenbootstrap updatebootstrap update_ecere update_libec update_ecp update_ecc update_ecs ecereaudio
 ifneq "$V" "1"
 .SILENT:
 endif
@@ -18,6 +18,16 @@ XBOOT := $(if $(CROSS_TARGET),GCC_PREFIX= TARGET_PLATFORM=$(HOST_PLATFORM) PLATF
 
 LIBVER := .0.44
 
+ifneq "$ECERE_AUDIO" "n"
+ifdef WINDOWS_TARGET
+ECERE_AUDIO := y
+endif
+
+ifdef LINUX_TARGET
+ECERE_AUDIO := y
+endif
+endif
+
 ifdef WINDOWS_HOST
 HOST_SOV := $(HOST_SO)
 else
@@ -153,7 +163,7 @@ XOBJDIR := obj$(OBJALT)/
 XOBJBINDIR := $(OBJDIR)$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/bin/
 XOBJLIBDIR := $(OBJDIR)$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/lib/
 
-all: prepbinaries ide epj2make documentor eda codeguard
+all: prepbinaries ide epj2make documentor eda codeguard ecereaudio
        @$(call echo,The Ecere SDK is fully built.)
 
 outputdirs:
@@ -289,6 +299,12 @@ epj2make: prepbinaries
        @$(call echo,Building epj2make...)
        cd epj2make && $(MAKE)
 
+ecereaudio: prepbinaries
+ifdef ECERE_AUDIO
+       @$(call echo,Building EcereAudio...)
+       cd extras/audio && $(MAKE)
+endif
+
 ide: prepbinaries
        @$(call echo,Building IDE...)
        cd ide && $(MAKE)
@@ -340,6 +356,9 @@ emptyoutput: outputdirs
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO))
 endif
+ifdef ECERE_AUDIO
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SO))
+endif
 ifdef LINUX_TARGET
        $(call rmq,$(SODESTDIR)$(LP)ecere$(SO).0)
        $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO).0)
@@ -349,6 +368,9 @@ ifdef LINUX_TARGET
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO).0)
 endif
+ifdef ECERE_AUDIO
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SO).0)
+endif
        $(call rmq,$(SODESTDIR)$(LP)ecere$(SOV))
        $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SOV))
        $(call rmq,$(SODESTDIR)$(LP)ec$(SOV))
@@ -357,6 +379,9 @@ endif
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SOV))
 endif
+ifdef ECERE_AUDIO
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SOV))
+endif
 endif  
        $(call rmq,$(OBJBINDIR)ear$(E))
        $(call rmq,$(OBJBINDIR)ecc$(E))
@@ -365,7 +390,7 @@ endif
        $(call rmq,$(OBJBINDIR)epj2make$(E))
        $(call rmq,$(OBJBINDIR)ide$(E))
        $(call rmq,$(OBJBINDIR)documentor$(E))
-ifdef EDASQLiteCipher
+ifdef CodeGuard
        $(call rmq,$(OBJBINDIR)CodeGuard$(E))
 endif
 
@@ -461,6 +486,10 @@ BINARIES = \
        eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SOV) \
        eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SOV)
 
+ifdef ECERE_AUDIO
+BINARIES += extras/audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SOV)
+endif
+
 ifdef CodeGuard
 BINARIES += codeGuard/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/CodeGuard$(E)
 endif
@@ -481,6 +510,9 @@ ifdef WINDOWS_TARGET
        $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SO),$(OBJBINDIR))
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SO),$(OBJBINDIR))
        $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SO),$(OBJBINDIR))
+ifdef ECERE_AUDIO
+       $(call cpq,extras/audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SO),$(OBJBINDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJBINDIR))
 endif
@@ -492,6 +524,9 @@ ifdef LINUX_TARGET
        $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SOV),$(OBJLIBDIR))
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SOV),$(OBJLIBDIR))
        $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SOV),$(OBJLIBDIR))
+ifdef ECERE_AUDIO
+       $(call cpq,extras/audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SOV),$(OBJLIBDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SOV),$(OBJLIBDIR))
 endif
@@ -520,6 +555,9 @@ ifndef LINUX_TARGET
        $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SO),$(OBJLIBDIR))
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SO),$(OBJLIBDIR))
        $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SO),$(OBJLIBDIR))
+ifdef ECERE_AUDIO
+       $(call cpq,extras/audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SO),$(OBJLIBDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJLIBDIR))
 endif
@@ -558,6 +596,9 @@ ifdef WINDOWS_TARGET
 ifdef EDASQLiteCipher
        $(call cpq,$(OBJBINDIR)$(LP)EDASQLiteCipher$(SO),"$(DESTLIBDIR)/")
 endif
+ifdef ECERE_AUDIO
+       $(call cpq,$(OBJBINDIR)$(LP)EcereAudio$(SO),"$(DESTLIBDIR)/")
+endif
        $(call cpq,$(OBJBINDIR)ide$(E),"$(BINDIR)/")
        $(call cpq,$(OBJBINDIR)ear$(E),"$(BINDIR)/")
        $(call cpq,$(OBJBINDIR)ecc$(E),"$(BINDIR)/")
@@ -584,6 +625,9 @@ ifdef OSX_TARGET
 ifdef EDASQLiteCipher
        install $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/
 endif
+ifdef ECERE_AUDIO
+       install $(OBJBINDIR)$(LP)EcereAudio$(SO) $(DESTLIBDIR)/
+endif
        install $(OBJBINDIR)ide$(E) $(BINDIR)/
        install $(OBJBINDIR)ear$(E) $(BINDIR)/
        install $(OBJBINDIR)ecc$(E) $(BINDIR)/
@@ -622,6 +666,9 @@ ifdef LINUX_TARGET
 ifdef EDASQLiteCipher
        install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SOV)
 endif
+ifdef ECERE_AUDIO
+       install $(INSTALL_FLAGS) $(OBJBINDIR)$(LP)EcereAudio$(SO) $(DESTLIBDIR)/ec/$(LP)EcereAudio$(SOV)
+endif
        ln -sf $(LP)ecere$(SOV) $(DESTLIBDIR)/$(LP)ecere$(SO).0
        ln -sf $(LP)ecereCOM$(SOV) $(DESTLIBDIR)/$(LP)ecereCOM$(SO).0
        ln -sf $(LP)ec$(SOV) $(DESTLIBDIR)/ec/$(LP)ec$(SO).0
@@ -630,6 +677,9 @@ endif
 ifdef EDASQLiteCipher
        ln -sf $(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO).0
 endif
+ifdef ECERE_AUDIO
+       ln -sf $(LP)EcereAudio$(SOV) $(DESTLIBDIR)/ec/$(LP)EcereAudio$(SO).0
+endif
        ln -sf $(LP)ecere$(SOV) $(DESTLIBDIR)/$(LP)ecere$(SO)
        ln -sf $(LP)ecereCOM$(SOV) $(DESTLIBDIR)/$(LP)ecereCOM$(SO)
        ln -sf $(LP)ec$(SOV) $(DESTLIBDIR)/ec/$(LP)ec$(SO)
@@ -654,6 +704,9 @@ ifdef EDASQLiteCipher
        install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)
 endif
 endif
+ifdef ECERE_AUDIO
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EcereAudio$(SO) $(DESTLIBDIR)/$(LP)EcereAudio$(SO)
+endif
        install $(INSTALL_FLAGS) $(OBJBINDIR)ide$(E) $(BINDIR)/ide$(E)
        install $(INSTALL_FLAGS) $(OBJBINDIR)ear$(E) $(BINDIR)/ear$(E)
        install $(INSTALL_FLAGS) $(OBJBINDIR)ecc$(E) $(BINDIR)/ecc$(E)
@@ -701,6 +754,8 @@ ifdef DEBIAN_PACKAGE
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libeda0/
        mkdir -p $(DESTDIR)$(prefix)/share/doc/libedasqlite0
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libedasqlite0/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libecereaudio0
+       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecereaudio/
 endif
 endif
 endif
@@ -714,6 +769,9 @@ uninstall:
 ifdef EDASQLiteCipher
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)")
 endif
+ifdef ECERE_AUDIO
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EcereAudio$(SO)")
+endif
        $(call rmq,"$(BINDIR)/ide$(E)")
        $(call rmq,"$(BINDIR)/ear$(E)")
        $(call rmq,"$(BINDIR)/ecc$(E)")
@@ -738,6 +796,7 @@ ifdef LINUX_TARGET
 ifdef EDASQLiteCipher
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO).0")
 endif
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EcereaAudio$(SO).0")
        $(call rmq,"$(DESTLIBDIR)/$(LP)ecere$(SOV)")
        $(call rmq,"$(DESTLIBDIR)/$(LP)ecereCOM$(SOV)")
        $(call rmq,"$(DESTLIBDIR)/$(LP)ec$(SOV)")
@@ -746,6 +805,9 @@ endif
 ifdef EDASQLiteCipher
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SOV)")
 endif
+ifdef ECERE_AUDIO
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EcereAudio$(SOV)")
+endif
        $(call rmq,"$(DESTDIR)$(prefix)/share/pixmaps/ecere.png")
        $(call rmq,"$(DESTDIR)$(prefix)/share/applications/ecere.desktop")
 endif
index 52dcfe4..47d0f0e 100644 (file)
@@ -1,6 +1,7 @@
 {
    "Version" : 0.2,
    "ModuleName" : "EcereAudio",
+   "ModuleVersion" : "0.44",
    "Options" : {
       "Warnings" : "All",
       "TargetType" : "SharedLibrary",
diff --git a/extras/audio/Makefile b/extras/audio/Makefile
new file mode 100644 (file)
index 0000000..9e2b91e
--- /dev/null
@@ -0,0 +1,241 @@
+.PHONY: all objdir cleantarget clean realclean distclean
+
+# CORE VARIABLES
+
+MODULE := EcereAudio
+VERSION := 0.44
+CONFIG := release
+ifndef COMPILER
+COMPILER := default
+endif
+
+TARGET_TYPE = sharedlib
+
+# FLAGS
+
+ECFLAGS =
+ifndef DEBIAN_PACKAGE
+CFLAGS =
+LDFLAGS =
+endif
+PRJ_CFLAGS =
+CECFLAGS =
+OFLAGS =
+LIBS =
+
+ifdef DEBUG
+NOSTRIP := y
+endif
+
+CONSOLE = -mwindows
+
+# INCLUDES
+
+_CF_DIR = ../../
+
+include $(_CF_DIR)crossplatform.mk
+include $(_CF_DIR)default.cf
+
+# POST-INCLUDES VARIABLES
+
+OBJ = obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/
+
+RES = 
+
+TARGET = obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SO)$(VER)
+
+_ECSOURCES = \
+       alsa.ec \
+       audio.ec \
+       dsound.ec \
+       mixer.ec
+
+ECSOURCES = $(call shwspace,$(_ECSOURCES))
+
+_COBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(C),$(notdir $(_ECSOURCES))))
+
+_SYMBOLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(S),$(notdir $(_ECSOURCES))))
+
+_IMPORTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(I),$(notdir $(_ECSOURCES))))
+
+_ECOBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(O),$(notdir $(_ECSOURCES))))
+
+_BOWLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(B),$(notdir $(_ECSOURCES))))
+
+COBJECTS = $(call shwspace,$(_COBJECTS))
+
+SYMBOLS = $(call shwspace,$(_SYMBOLS))
+
+IMPORTS = $(call shwspace,$(_IMPORTS))
+
+ECOBJECTS = $(call shwspace,$(_ECOBJECTS))
+
+BOWLS = $(call shwspace,$(_BOWLS))
+
+OBJECTS = $(ECOBJECTS) $(OBJ)$(MODULE).main$(O)
+
+SOURCES = $(ECSOURCES)
+
+RESOURCES =
+
+LIBS += $(SHAREDLIB) $(EXECUTABLE) $(LINKOPT)
+
+ifndef STATIC_LIBRARY_TARGET
+LIBS += \
+       $(call _L,ecere)
+endif
+
+PRJ_CFLAGS += \
+        $(if $(WINDOWS_TARGET), \
+                        -I../../deps/DirectX-9.0/include,) \
+        $(if $(DEBUG), -g, -O2 -ffast-math) $(FPIC) -Wall -DREPOSITORY_VERSION="\"$(REPOSITORY_VER)\"" \
+                        -I../../deps/DirectX-9.0/include
+
+ECFLAGS += -module $(MODULE)
+# PLATFORM-SPECIFIC OPTIONS
+
+ifdef WINDOWS_TARGET
+
+ifndef STATIC_LIBRARY_TARGET
+LIBS += \
+       $(call _L,winmm) \
+       $(call _L,dsound) \
+       $(call _L,dxguid) \
+       $(call _L,uuid)
+endif
+
+else
+ifdef LINUX_TARGET
+
+ifndef STATIC_LIBRARY_TARGET
+LIBS += \
+       $(call _L,asound)
+endif
+
+endif
+endif
+
+CECFLAGS += -cpp $(_CPP)
+
+ifndef STATIC_LIBRARY_TARGET
+OFLAGS += \
+        -L../../obj/$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/bin \
+        -L../../obj/$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/lib
+endif
+
+# TARGETS
+
+all: objdir $(TARGET)
+
+objdir:
+       $(if $(wildcard $(OBJ)),,$(call mkdirq,$(OBJ)))
+       $(if $(ECERE_SDK_SRC),$(if $(wildcard $(call escspace,$(ECERE_SDK_SRC)/crossplatform.mk)),,@$(call echo,Ecere SDK Source Warning: The value of ECERE_SDK_SRC is pointing to an incorrect ($(ECERE_SDK_SRC)) location.)),)
+       $(if $(ECERE_SDK_SRC),,$(if $(ECP_DEBUG)$(ECC_DEBUG)$(ECS_DEBUG),@$(call echo,ECC Debug Warning: Please define ECERE_SDK_SRC before using ECP_DEBUG, ECC_DEBUG or ECS_DEBUG),))
+
+$(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
+       @$(call rmq,$(OBJ)symbols.lst)
+       @$(call touch,$(OBJ)symbols.lst)
+       @$(call echo,$(SYMBOLS)) >> $(OBJ)symbols.lst
+       @$(call echo,$(IMPORTS)) >> $(OBJ)symbols.lst
+       $(ECS) $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(call quote_path,$@)
+
+$(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
+       $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
+       $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(call quote_path,$@) -symbols $(OBJ)
+
+$(SYMBOLS): | objdir
+$(OBJECTS): | objdir
+$(TARGET): $(SOURCES) $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir
+       @$(call rmq,$(OBJ)objects.lst)
+       @$(call touch,$(OBJ)objects.lst)
+       @$(call echo,$(OBJ)$(MODULE).main$(O)) >> $(OBJ)objects.lst
+       @$(call echo,$(ECOBJECTS)) >> $(OBJ)objects.lst
+ifndef STATIC_LIBRARY_TARGET
+       $(CC) $(OFLAGS) @$(OBJ)objects.lst $(LIBS) -o $(TARGET) $(INSTALLNAME)
+ifndef NOSTRIP
+       $(STRIP) $(STRIPOPT) $(TARGET)
+endif
+else
+       $(AR) rcs $(TARGET) @$(OBJ)objects.lst $(LIBS)
+endif
+ifdef SHARED_LIBRARY_TARGET
+ifdef LINUX_TARGET
+ifdef LINUX_HOST
+       $(if $(basename $(VER)),ln -sf $(LP)$(MODULE)$(SO)$(VER) $(OBJ)$(LP)$(MODULE)$(SO)$(basename $(VER)),)
+       $(if $(VER),ln -sf $(LP)$(MODULE)$(SO)$(VER) $(OBJ)$(LP)$(MODULE)$(SO),)
+endif
+endif
+endif
+
+# SYMBOL RULES
+
+$(OBJ)alsa.sym: alsa.ec
+       $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(call quote_path,alsa.ec) -o $(call quote_path,$@)
+
+$(OBJ)audio.sym: audio.ec
+       $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(call quote_path,audio.ec) -o $(call quote_path,$@)
+
+$(OBJ)dsound.sym: dsound.ec
+       $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(call quote_path,dsound.ec) -o $(call quote_path,$@)
+
+$(OBJ)mixer.sym: mixer.ec
+       $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(call quote_path,mixer.ec) -o $(call quote_path,$@)
+
+# C OBJECT RULES
+
+$(OBJ)alsa.c: alsa.ec $(OBJ)alsa.sym | $(SYMBOLS)
+       $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,alsa.ec) -o $(call quote_path,$@) -symbols $(OBJ)
+
+$(OBJ)audio.c: audio.ec $(OBJ)audio.sym | $(SYMBOLS)
+       $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,audio.ec) -o $(call quote_path,$@) -symbols $(OBJ)
+
+$(OBJ)dsound.c: dsound.ec $(OBJ)dsound.sym | $(SYMBOLS)
+       $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,dsound.ec) -o $(call quote_path,$@) -symbols $(OBJ)
+
+$(OBJ)mixer.c: mixer.ec $(OBJ)mixer.sym | $(SYMBOLS)
+       $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,mixer.ec) -o $(call quote_path,$@) -symbols $(OBJ)
+
+# OBJECT RULES
+
+$(OBJ)alsa.o: $(OBJ)alsa.c
+       $(CC) $(CFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,$(OBJ)alsa.c) -o $(call quote_path,$@)
+
+$(OBJ)audio.o: $(OBJ)audio.c
+       $(CC) $(CFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,$(OBJ)audio.c) -o $(call quote_path,$@)
+
+$(OBJ)dsound.o: $(OBJ)dsound.c
+       $(CC) $(CFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,$(OBJ)dsound.c) -o $(call quote_path,$@)
+
+$(OBJ)mixer.o: $(OBJ)mixer.c
+       $(CC) $(CFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,$(OBJ)mixer.c) -o $(call quote_path,$@)
+
+$(OBJ)$(MODULE).main$(O): $(OBJ)$(MODULE).main.c
+       $(CC) $(CFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.c -o $(call quote_path,$@)
+
+cleantarget: objdir
+       $(call rmq,$(OBJ)$(MODULE).main.o $(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
+       $(call rmq,$(OBJ)symbols.lst)
+       $(call rmq,$(OBJ)objects.lst)
+       $(call rmq,$(TARGET))
+ifdef SHARED_LIBRARY_TARGET
+ifdef LINUX_TARGET
+ifdef LINUX_HOST
+       $(call rmq,$(OBJ)$(LP)$(MODULE)$(SO)$(basename $(VER)))
+       $(call rmq,$(OBJ)$(LP)$(MODULE)$(SO))
+endif
+endif
+endif
+
+clean: cleantarget
+       $(call rmq,$(_OBJECTS))
+       $(call rmq,$(_ECOBJECTS))
+       $(call rmq,$(_COBJECTS))
+       $(call rmq,$(_BOWLS))
+       $(call rmq,$(_IMPORTS))
+       $(call rmq,$(_SYMBOLS))
+
+realclean: cleantarget
+       $(call rmrq,$(OBJ))
+
+distclean: cleantarget
+       $(call rmrq,obj/)