# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

ifeq ($(DEBUG),1)
RELEASE = dbg
else
RELEASE = rel
endif

TOPDIR = $(CURDIR)/..
OUTPUT ?= $(TOPDIR)/output
BUILD_NAME = pnacl
WORKDIR = $(OUTPUT)/build/$(BUILD_NAME)/$(RELEASE)
EXEDIR = $(WORKDIR)
D = $(OUTPUT)/plugin/$(BUILD_NAME)

$(shell mkdir -p $(WORKDIR) $(EXEDIR) $(D))
NACL_SDK_ROOT ?= $(OUTPUT)/naclsdk

PROJECT := ssh_client
CXX_SOURCES := \
	dev_null.cc \
	dev_random.cc \
	file_system.cc \
	js_file.cc \
	pepper_file.cc \
	syscalls.cc \
	ssh_plugin.cc \
	tcp_server_socket.cc \
	tcp_socket.cc \
	udp_socket.cc

# Project Build flags
ifeq ($(DEBUG),1)
CXXFLAGS ?= -g -O0 -DDEBUG
else
CXXFLAGS ?= -g -O2 -DNDEBUG
endif
override WARNINGS+=-Wno-long-long -Wall -Wswitch-enum -Werror
override CXXFLAGS+=-pthread -std=gnu++0x $(WARNINGS) -I$(TOPDIR)/include \
        -I$(NACL_SDK_ROOT)/include -I$(NACL_SDK_ROOT)/le32-nacl/include \
        -fno-rtti -fno-exceptions

OSNAME:=$(shell python $(NACL_SDK_ROOT)/tools/getos.py)
PNACL_TC_ROOT:=$(NACL_SDK_ROOT)/toolchain/$(OSNAME)_pnacl
PNACL_CXX:=$(PNACL_TC_ROOT)/bin/pnacl-clang++
PNACL_STRIP:=$(PNACL_TC_ROOT)/bin/pnacl-strip
PNACL_FINALIZE:=$(PNACL_TC_ROOT)/bin/pnacl-finalize
PNACL_TRANSLATE:=$(PNACL_TC_ROOT)/bin/pnacl-translate
# --pnacl-disable-abi-check/--allow-llvm-bitcode-input were added to workaround
# https://code.google.com/p/nativeclient/issues/detail?id=3714
PNACL_TRANSLATE_FLAGS=-fdata-sections -ffunction-sections --gc-sections \
        --allow-llvm-bitcode-input
PNACL_LDFLAGS:=-lppapi_cpp -lppapi -lcrypto -lppapi_cpp_private -lnacl_io -lz \
        -L$(OUTPUT) -L$(NACL_SDK_ROOT)/lib/pnacl/Release --pnacl-disable-abi-check

COMPAT_INC:=-I$(PNACL_TC_ROOT)/le32-nacl/usr/include/glibc-compat
PNACL_CXXFLAGS:=$(CXXFLAGS) $(COMPAT_INC)

# Declare the ALL target first, to make the 'all' target the default build
all: all_newlib

newlib_pexe = $(PROJECT)_nl.pexe
newlib_x86_32 = $(PROJECT)_nl_x86_32.nexe
newlib_x86_64 = $(PROJECT)_nl_x86_64.nexe
newlib_arm = $(PROJECT)_nl_arm.nexe
all_newlib: \
	$(D)/$(newlib_x86_32) \
	$(D)/$(newlib_x86_64) \
	$(D)/$(newlib_arm) \
	$(D)/ssh_client.nmf
$(D)/ssh_client.nmf: $(TOPDIR)/ssh_client.nmf
	cp $< $@
$(D)/%: $(EXEDIR)/%
	cp $< $@
newlib_pexe: $(EXEDIR)/$(newlib_pexe)
newlib_x86_32: $(EXEDIR)/$(newlib_x86_32)
newlib_x86_64: $(EXEDIR)/$(newlib_x86_64)
newlib_arm: $(EXEDIR)/$(newlib_arm)

# Define PNaCl compile and link rules for C++ sources
POBJS := $(patsubst %.cc,$(WORKDIR)/%_p.o,$(CXX_SOURCES))
$(POBJS): $(WORKDIR)/%_p.o : $(CURDIR)/%.cc
	$(PNACL_CXX) -o $@ -c $< $(PNACL_CXXFLAGS)

$(EXEDIR)/$(newlib_pexe): $(POBJS)
	$(PNACL_CXX) -o $@ $^ -lopenssh -lssh \
		-lopenbsd-compat -lldns \
		$(PNACL_LDFLAGS) $(PNACL_CXXFLAGS)

$(EXEDIR)/$(PROJECT)_nl_arm.dbg.nexe: $(EXEDIR)/$(newlib_pexe)
	$(PNACL_TRANSLATE) $(PNACL_TRANSLATE_FLAGS) -o $@ $< -arch arm

$(EXEDIR)/$(PROJECT)_nl_x86_32.dbg.nexe: $(EXEDIR)/$(newlib_pexe)
	$(PNACL_TRANSLATE) $(PNACL_TRANSLATE_FLAGS) -o $@ $< -arch i686

$(EXEDIR)/$(PROJECT)_nl_x86_64.dbg.nexe: $(EXEDIR)/$(newlib_pexe)
	$(PNACL_TRANSLATE) $(PNACL_TRANSLATE_FLAGS) -o $@ $< -arch x86-64

%.nexe: %.dbg.nexe
	$(PNACL_STRIP) $^ -o $@

%.pexe: %.dbg.pexe
	$(PNACL_FINALIZE) $^ -o $@

clean:
	rm -rf $(WORKDIR)
