blob: c19fa4954c5d4e175c5a8c502fa7e2774acf380b [file] [log] [blame]
# Copyright (c) 2012 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# GNU Make based build file.  For details on GNU Make see:
#   http://www.gnu.org/software/make/manual/make.html
#
#
# Project information
#
# These variables store project specific settings for the project name
# build flags, files to copy or install.  In the examples it is typically
# only the list of sources and project name that will actually change and
# the rest of the makefile is boilerplate for defining build rules.
#
PROJECT:=dlopen
WARNINGS:=-Wno-long-long -Wall
CXXFLAGS:=-g -O0 -pthread -std=gnu++98 $(WARNINGS)
LDFLAGS:=-g -ldl -lppapi_cpp -lppapi
#
# Get pepper directory for toolchain and includes.
#
# If PEPPER_ROOT is not set, then assume it can be found a two directories up,
# from the default example directory location.
#
THIS_MAKEFILE:=$(abspath $(lastword $(MAKEFILE_LIST)))
NACL_SDK_ROOT?=$(abspath $(dir $(THIS_MAKEFILE))../..)
#
# Compute tool paths
#
#
OSNAME:=$(shell python $(NACL_SDK_ROOT)/tools/getos.py)
TC_PATH:=$(abspath $(NACL_SDK_ROOT)/toolchain/$(OSNAME)_x86_glibc)
CXX:=$(TC_PATH)/bin/i686-nacl-g++
NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py
#
# Create shell aliases
#
# Create Python based aliases for common shell commands like copy or move.
#
COPY:= python $(NACL_SDK_ROOT)/tools/oshelpers.py cp
MKDIR:= python $(NACL_SDK_ROOT)/tools/oshelpers.py mkdir
RM:= python $(NACL_SDK_ROOT)/tools/oshelpers.py rm
MV:= python $(NACL_SDK_ROOT)/tools/oshelpers.py mv
#
# Disable DOS PATH warning when using Cygwin based tools Windows
#
CYGWIN ?= nodosfilewarning
export CYGWIN
#
# NMF Manifiest generation
#
NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py
NMF+=-D $(TC_PATH)/x86_64-nacl/bin/objdump
NMF_PATHS:=-L $(TC_PATH)/x86_64-nacl/lib32 -L $(TC_PATH)/x86_64-nacl/lib
NMF_PATHS+=-L lib32 -L lib64
#
# Disable DOS PATH warning when using Cygwin based tools Windows
#
CYGWIN ?= nodosfilewarning
export CYGWIN
# Declare the ALL target first, to make the 'all' target the default build.
# Since the NMF file requires all the binaires for generation we use that as
# the dependency.
all : $(PROJECT).nmf
# Rules to create subdirectories for libraries
lib32:
$(MKDIR) -p $@
lib64:
$(MKDIR) -p $@
# Copy all files to that config
$(foreach src,$(COPY_FILES),$(eval $(call FILE_COPY,$(src),DBG)))
# Build debug version dlopen nexe and eightball.so for 32 and 64 bit.
dlopen_x86_32.o: dlopen.cc $(THIS_MAKE)
$(CXX) -o $@ -c $< -m32 $(CXXFLAGS)
dlopen_x86_32.nexe: dlopen_x86_32.o
$(CXX) -o $@ $< -m32 $(LDFLAGS)
dlopen_x86_64.o: dlopen.cc $(THIS_MAKE)
$(CXX) -o $@ -c $< -m64 $(CXXFLAGS)
dlopen_x86_64.nexe: dlopen_x86_64.o
$(CXX) -o $@ $< -m64 $(LDFLAGS)
eightball_x86_32.o: eightball.cc $(THIS_MAKE)
$(CXX) -o $@ -c $< -m32 $(CXXFLAGS) -fPIC
lib32/libeightball.so: eightball_x86_32.o | lib32
$(CXX) -o $@ $< -m32 $(LDFLAGS) -shared
eightball_x86_64.o: eightball.cc $(THIS_MAKE)
$(CXX) -o $@ -c $< -m64 $(CXXFLAGS) -fPIC
lib64/libeightball.so: eightball_x86_64.o | lib64
$(CXX) -o $@ $< -m64 $(LDFLAGS) -shared
#
# NMF Manifiest generation
#
# Use the python script create_nmf to scan the binaries for dependencies using
# objdump. Pass in the (-L) paths to the default library toolchains so that we
# can find those libraries and have it automatically copy the files (-s) to
# the target directory for us.
NEXES:=dlopen_x86_32.nexe dlopen_x86_64.nexe
NEXES+=lib32/libeightball.so lib64/libeightball.so
NMF_ARGS:=-D $(TC_PATH)/x86_64-nacl/bin/objdump
NMF_PATHS:=-L $(TC_PATH)/x86_64-nacl/lib32 -L $(TC_PATH)/x86_64-nacl/lib64
$(PROJECT).nmf : $(NEXES)
$(NMF) -o $@ -s . $^ $(NMF_PATHS)
# Define a phony rule so it always runs, to build nexe and start up server.
.PHONY: RUN
RUN: all
python ../httpd.py