blob: c7861024ce6becc64dae32352099e5e69ef91450 [file] [log] [blame]
# 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)
SSH_VERSION = 8.4
DEFAULT_VERSION = true
ifeq ($(DEFAULT_VERSION),)
D := $(D)-openssh-$(SSH_VERSION)
EXEDIR := $(EXEDIR)/$(SSH_VERSION)
endif
$(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$(NACL_SDK_ROOT)/lib/pnacl/Release --pnacl-disable-abi-check
COMPAT_INC:=-I$(PNACL_TC_ROOT)/le32-nacl/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 $@ $^ \
-Wl,--whole-archive -lopenssh-$(SSH_VERSION) -Wl,--no-whole-archive \
-lssh-$(SSH_VERSION) \
-lopenbsd-compat-$(SSH_VERSION) -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)