esketch
Version:
Node.js addon template
436 lines (316 loc) • 10.6 kB
Plain Text
# Copyright (C) 2017 Claude SIMON (http://q37.info/contact/).
#
# This file is part of eSketch.
#
# eSketch is free software: you can redistribute it and/or
# modify it under the terms of the GNU Affero General Public License
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# eSketch 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
# Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with eSketch. If not, see <http://www.gnu.org/licenses/>.
name = esketchnjs
# Epeios general debugging features
copt += -DE_DEBUG
# Required for multitasking
#copt += -DE_MT
# For using <setjmp.h> instead of C++ exceptions.
#copt += -DERR_JMPUSE
mods += ags aem bch bitbch bomhdl
mods += bso cdgb64 cio cpe crptgr
mods += cslio crt ctn dir dte
mods += dtfbsc dtfptb epsmsc err fdr
mods += fil flf flsq flw flx
mods += fnm ias idsq iof iop
mods += lcl lck lst lstbch lstcrt
mods += lstctn mns mtk mtx ntvstr
mods += que rgstry sdr stkbse stkbch
mods += stkcrt stkctn str strng stsfsm
mods += tagsbs tht thtsub tol txf
mods += tys uys utf xml xpp
mods += xtf llio dlbrry n4all n4njs
mods += plgn plgncore uvqdcl
mods += sclargmnt sclmisc sclerror scllocale sclrgstry
mods += scln4a sclnjs
mods += registry
pmods += pllio
wmods += wllio
##############################
# Common to all environment. #
##############################
# Generates debugging data.
#CXXFLAGS += -g
# General optimization.
CXXFLAGS += -O
# To use with gprof
#CXXFLAGS += -pg
###############################
copt += -DE_ST
win=win
win32=win32
win64=win64
IA_32=x86
AMD64=x64
Cygwin=Cygwin
MinGW=Msys
GNULinux=GNU/Linux
Linux=Linux
MacOS=Darwin
Android=Android
os=$(shell uname -o 2>/dev/null || uname -s)
mach=$(shell uname -m)
ifdef EPEIOS_SRC
endif
##########################
# For Cygwin environment #
##########################
ifeq ("$(os)","$(Cygwin)")
# By default, vanilla Cygwin compiler ('g++') is used.
# Resulting application uses the Cygwin POSIX Layer.
# directly the MS CRT, see below.
# Use of the MinGW compiler under Cygwin.
# To build native binary, i.e. with the MS CRT,
# without using the Cygwin/POSIX layer,
# Uncomment follwing line :
#target=$(win)
endif
##########################
#########################
# For MinGW environment #
#########################
ifeq ("$(os)", "$(MinGW)")
co += -fpermissive
endif
#########################
#############################
# For GNU/Linux environment #
#############################
ifeq ("$(os)","$(GNULinux)")
endif
#############################
#########################
# For Linux environment #
#########################
ifeq ("$(os)","$(Linux)")
endif
#############################
##########################
# For MacOS environment #
##########################
ifeq ("$(os)","$(MacOS)")
endif
##########################
####################################
# For Android (Termux) environment #
####################################
ifeq ("$(os)","$(Android)")
endif
#############################
###################################
###################################
##### DON'T MODIFY BELOW !!! ######
###################################
###################################
##########################
# For Cygwin environment #
##########################
ifeq ("$(os)","$(Cygwin)")
co += -std=gnu++11 -DUNICODE -D_FILE_OFFSET_BITS=64
ifneq ("$(target)","$(Android)")
libs += -lws2_32
LDFLAGS += -static
endif
ifeq ("$(target)","$(win)")
ifeq ("$(mach)","i686")
override target=$(win32)
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900)
ifeq ("$(mach)","x86_64")
override target=$(win64)
endif
endif
endif
ifeq ("$(target)","$(IA_32)")
override target=$(win32)
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900)
ifeq ("$(target)","$(AMD64)")
override target=$(win64)
endif
endif
ifeq ("$(target)","$(win32)")
CXX = i686-w64-mingw32-g++
mods += $(wmods)
lo += -municode -m32
co += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900)
ifeq ("$(target)","$(win64)")
CXX = x86_64-w64-mingw32-g++
mods += $(wmods)
lo += -municode -m64
co += -m64
else
ifeq ("$(target)","$(Android)")
CXX = C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
mods += $(pmods)
binary=lib$(name).so
lo += -target i686-none-linux-android -gcc-toolchain C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/platforms/android-14/arch-x86 -fPIC -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti -fexceptions -std=c++11 -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared
co += -target i686-none-linux-android -gcc-toolchain C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/platforms/android-14/arch-x86 -DXXX_DEBUG -Ih:/hg/epeios/stable -isystem C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include -isystem C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-rtti -fexceptions -std=c++11 -O0 -fno-limit-debug-info -fPIC -MD
libs += -ldl -landroid -llog -lm "C:/Users/csimon/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/libgnustl_static.a"
else
mods += $(pmods)
endif
endif
endif
ifneq ("$(target)","$(Android)")
binary=$(name).dll
lo += -Wl,--kill-at -shared
endif
dest=/cygdrive/h/bin/
endif
##########################
#########################
# For MinGW environment #
#########################
ifeq ("$(os)", "$(MinGW)")
co += -DMSYS -std=gnu++11 -DUNICODE
lo += -municode
mods += $(wmods)
LDFLAGS += -static
ifeq ("$(target)","$(IA_32)")
co += -m32
lo += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900).
ifeq ("$(arch)","$(AMD64)")
co += -m64
lo += -m64
endif
endif
binary=$(name).dll
lo += -Wl,--kill-at -shared
dest=/h/bin/
endif
#########################
#############################
# For GNU/Linux environment #
#############################
ifeq ("$(os)","$(GNULinux)")
co += -std=gnu++11 -DUNICODE -D_FILE_OFFSET_BITS=64
mods += $(pmods)
libs += -lpthread -ldl -lrt
ifeq ("$(target)","$(IA_32)")
co += -m32
lo += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900).
ifeq ("$(target)","$(AMD64)")
co += -m64
lo += -m64
endif
endif
binary=lib$(name).so
lo += -shared
co += -fPIC
dest=/home/csimon/bin/
endif
#############################
#########################
# For Linux environment #
#########################
ifeq ("$(os)","$(Linux)")
co += -std=gnu++11 -DUNICODE -D_FILE_OFFSET_BITS=64
mods += $(pmods)
libs += -lpthread -ldl -lrt
ifeq ("$(target)","$(IA_32)")
co += -m32
lo += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900).
ifeq ("$(target)","$(AMD64)")
co += -m64
lo += -m64
endif
endif
binary=lib$(name).so
lo += -shared
co += -fPIC
endif
#############################
##########################
# For MacOS environment #
##########################
ifeq ("$(os)","$(MacOS)")
co += -std=gnu++11 -DUNICODE -D_FILE_OFFSET_BITS=64
mods += $(pmods)
ifeq ("$(target)","$(IA_32)")
co += -m32
lo += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900).
ifeq ("$(target)","$(AMD64)")
co += -m64
lo += -m64
endif
endif
binary=lib$(name).dylib
lo += -dynamiclib
dest=/Users/csimon/bin/
endif
##########################
####################################
# For Android (Termux) environment #
####################################
ifeq ("$(os)","$(Android)")
co += -std=gnu++11 -DUNICODE -D_FILE_OFFSET_BITS=64
mods += $(pmods)
libs += -lpthread -ldl -lrt
ifeq ("$(target)","$(IA_32)")
co += -m32
lo += -m32
else # 'ifeq' on other line due to GNU 3.80 (Maemo on N900).
ifeq ("$(target)","$(AMD64)")
co += -m64
lo += -m64
endif
endif
binary=lib$(name).so
lo += -shared
co += -fPIC
endif
#############################
all: $(binary)
rm -rf *.o
ifeq ("$(target)","$(Android)")
rm -rf *.d
endif
copt += -DVERSION=\""20171225"\"
copt += -DCOPYRIGHT_YEARS=\""2017"\"
copt += -DIDENTIFIER=\""d6a723cb-e88f-4f2f-b429-3adc207f1d62"\"
ifndef EPEIOS_SRC
src += :src:src/epeios
out = ./
else
src += :$(EPEIOS_SRC)
out = $(dest)
endif
ox = o
ds = :
vpath %.cpp $(subst $(ds),:,$(src))
vpath %.mm $(subst $(ds),:,$(src))
srcd = $(subst $(ds), ,$(src))
co := -c $(co) $(copt) $(subst :, -I,$(src))
lo += -o $(binary) $(objs)
objs = $(name).$(ox) $(mods:=.$(ox))
$(binary): $(objs)
$(CXX) $(lo) $(libs) $(LDFLAGS)
ifdef EPEIOS_SRC
mkdir -p $(out)
cp $(binary) $(out)
endif
%.$(ox): %.cpp
$(CXX) $(CPPFLAGS) $(co) $(CXXFLAGS) $<
clean:
rm -rf *.o
ifeq ("$(target)","$(Android)")
rm -rf *.d
endif