# Copyright (C) 2020 Arm Limited or its affiliates. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


# Description:
# Makefile to build mlw_codec

UNAME=$(shell uname -o)

CFLAGS=-Wall -Werror -Wno-unused-function -Wno-unused-variable

ifeq ($(DEBUG),1)
    CFLAGS+=-g -O0 -DDEBUG
else
    CFLAGS+=-O3
endif

LIBSRCS=mlw_encode.c mlw_decode.c
LIBHDRS=mlw_encode.h mlw_decode.h mlw_common.h

ifeq ($(UNAME),Cygwin)
    MLWEXE=mlw_codec.exe
else
    MLWEXE=mlw_codec
endif

all: mlwexe

.PHONY: mlwexe
mlwexe: $(MLWEXE)

clean:
	rm -f $(MLWEXE)

$(MLWEXE): mlw_main.c $(LIBSRCS) $(LIBHDRS) makefile
	gcc $(CFLAGS) mlw_main.c $(LIBSRCS) -o $(MLWEXE) -lm
