#
# Copyright 2008, 2009 Free Software Foundation, Inc.
#
# This software is distributed under the terms of the GNU Public License.
# See the COPYING file in the main directory for details.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGB_CFLAGS) $(LIBOSMOGSM_CFLAGS)

if ENABLE_SYSMODSP
AM_CPPFLAGS += -DENABLE_SYSMODSP
endif

AM_CXXFLAGS = -Wall -ldl -pthread
AM_LDFLAGS = -lrt

noinst_LTLIBRARIES = libgprs.la

libgprs_la_SOURCES = \
	gprs_debug.cpp \
	csn1.cpp \
	gsm_rlcmac.cpp \
	gprs_bssgp_pcu.cpp \
	gprs_rlcmac.cpp \
	gprs_rlcmac_sched.cpp \
	gprs_rlcmac_meas.cpp \
	gprs_rlcmac_ts_alloc.cpp \
	gprs_ms.cpp \
	gprs_ms_storage.cpp \
	gsm_timer.cpp \
	bitvector.cpp \
	pcu_l1_if.cpp \
	pcu_vty.c \
	pcu_vty_functions.cpp \
	tbf.cpp \
	tbf_ul.cpp \
	tbf_dl.cpp \
	bts.cpp \
	poll_controller.cpp \
	encoding.cpp \
	sba.cpp \
	decoding.cpp \
	llc.cpp \
	rlc.cpp

if ENABLE_SYSMOBTS
libgprs_la_SOURCES += \
	sysmo_sock.cpp
else
libgprs_la_SOURCES += \
	openbts_sock.cpp
endif

bin_PROGRAMS = \
	osmo-pcu

noinst_PROGRAMS =

if ENABLE_SYSMODSP
noinst_PROGRAMS += \
	osmo-pcu-remote
endif

noinst_HEADERS = \
	gprs_debug.h \
	csn1.h \
	gsm_rlcmac.h \
	gprs_bssgp_pcu.h \
	gprs_rlcmac.h \
	gprs_ms.h \
	gprs_ms_storage.h \
	pcuif_proto.h \
	pcu_l1_if.h \
	gsm_timer.h \
	bitvector.h \
	pcu_vty.h \
	pcu_vty_functions.h \
	sysmo_l1_if.h \
	femtobts.h \
	tbf.h \
	bts.h \
	poll_controller.h \
	encoding.h \
	sba.h \
	rlc.h \
	decoding.h \
	llc.h \
	pcu_utils.h \
	cxx_linuxlist.h

osmo_pcu_SOURCES = pcu_main.cpp

if ENABLE_SYSMODSP
osmo_pcu_SOURCES += sysmo_l1_if.c \
	sysmo_l1_hw.c \
	femtobts.c

osmo_pcu_remote_SOURCES = pcu_main.cpp \
	sysmo_l1_if.c \
	sysmo_l1_fwd.c \
	femtobts.c
endif

osmo_pcu_LDADD = \
	libgprs.la \
	$(LIBOSMOGB_LIBS) \
	$(LIBOSMOCORE_LIBS) \
	$(LIBOSMOGSM_LIBS) \
	$(COMMON_LA)

if ENABLE_SYSMODSP
osmo_pcu_remote_LDADD = \
	libgprs.la \
	$(LIBOSMOGB_LIBS) \
	$(LIBOSMOCORE_LIBS) \
	$(LIBOSMOGSM_LIBS) \
	$(COMMON_LA)
endif

#MOSTLYCLEANFILES += testSource testDestination
