diff options
Diffstat (limited to 'templates/vsprojects/Grpc.mak.template')
-rw-r--r-- | templates/vsprojects/Grpc.mak.template | 414 |
1 files changed, 208 insertions, 206 deletions
diff --git a/templates/vsprojects/Grpc.mak.template b/templates/vsprojects/Grpc.mak.template index 9d2f676d38..12a1dbf2d6 100644 --- a/templates/vsprojects/Grpc.mak.template +++ b/templates/vsprojects/Grpc.mak.template @@ -1,206 +1,208 @@ -# Copyright 2015, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -<%! - import re -%>\ -<%namespace file="packages.include" import="get_openssl,get_zlib"/>\ -<%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\ -<% - build_from_project_file = set(['gpr', - 'gpr_test_util', - 'grpc', - 'grpc_test_util', - 'grpc_test_util_unsecure', - 'grpc_unsecure', - 'grpc++', - 'grpc++_unsecure' - ]) - buildable_targets = [ target for target in targets + libs - if target.build in ['all', 'test', 'private', 'tool', 'benchmark'] and - target.language in ['c', 'c++'] and - all([(src.endswith('.c') or src.endswith('.cc') or src.endswith('.proto')) for src in target.src]) and - 'windows' in target.get('platforms', ['windows']) ] - c_test_targets = [ target for target in buildable_targets if target.build == 'test' and not target.language == 'c++' ] - cxx_test_targets = [ target for target in buildable_targets if target.build == 'test' and target.language == 'c++' ] -%>\ -# NMake file to build secondary gRPC targets on Windows. -# Use grpc.sln to solution to build the gRPC libraries. - -OUT_DIR=test_bin - -CC=cl.exe /nologo -LINK=link.exe /nologo -LIBTOOL=lib.exe /nologo /nodefaultlib - -REPO_ROOT=.. -OPENSSL_INCLUDES = .\packages\${get_openssl()}\build\native\include -ZLIB_INCLUDES = .\packages\${get_zlib()}\build\native\include -INCLUDES=/I$(REPO_ROOT) /I$(REPO_ROOT)\include /I$(OPENSSL_INCLUDES) /I$(ZLIB_INCLUDES) - -GFLAGS_INCLUDES = .\..\third_party\gflags\include -GTEST_INCLUDES = .\..\third_party\gtest\include -PROTOBUF_INCLUDES = .\..\third_party\protobuf\src -CXX_INCLUDES=/I$(GFLAGS_INCLUDES) /I$(GTEST_INCLUDES) /I$(PROTOBUF_INCLUDES) - -#_SCL_SECURE_NO_WARNINGS supresses a ton of "potentially unsafe use of std lib" warnings -DEFINES=/D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /D _CRT_SECURE_NO_WARNINGS /D _SCL_SECURE_NO_WARNINGS - -#important options: /TC vs. /TP: compile as C vs. compile as C++ -CFLAGS=/c $(INCLUDES) /Z7 /W3 /WX- /sdl $(DEFINES) /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- -CXXFLAGS=/c $(INCLUDES) $(CXX_INCLUDES) /Z7 /W3 /WX- /sdl $(DEFINES) /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP /analyze- - -LFLAGS=/DEBUG /INCREMENTAL /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 - -OPENSSL_LIBS=.\packages\${get_openssl()}\build\native\lib\v120\Win32\Debug\static\ssleay32.lib .\packages\${get_openssl()}\build\native\lib\v120\Win32\Debug\static\libeay32.lib -WINSOCK_LIBS=ws2_32.lib -GENERAL_LIBS=advapi32.lib comdlg32.lib gdi32.lib kernel32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib shell32.lib user32.lib uuid.lib winspool.lib -ZLIB_LIBS=.\packages\${get_zlib()}\build\native\lib\v120\Win32\Debug\static\cdecl\zlib.lib -LIBS=$(OPENSSL_LIBS) $(ZLIB_LIBS) $(GENERAL_LIBS) $(WINSOCK_LIBS) - -#shlwapi.lib provides PathMatchSpec() for gflags in windows -GFLAGS_LIBS=.\..\third_party\gflags\lib\Debug\gflags.lib shlwapi.lib -GTEST_LIBS=.\..\third_party\gtest\msvc\gtest\Debug\gtestd.lib -PROTOBUF_LIBS=.\..\third_party\protobuf\vsprojects\Debug\libprotobuf.lib -CXX_LIBS=$(GFLAGS_LIBS) $(GTEST_LIBS) $(PROTOBUF_LIBS) - -all: buildtests - -tools: - -tools_c: - -tools_cxx: - -$(OUT_DIR): - mkdir $(OUT_DIR) - -build_libs: \ -% for target in buildable_targets: -% if target.build == 'private' or target.build == 'all': -% if target.name in build_from_project_file: -build_${target.name} \ -% else: -Debug\${target.name}.lib \ -% endif -% endif -% endfor - -buildtests: buildtests_c buildtests_cxx - -buildtests_c: \ -% for target in c_test_targets: -${target.name}.exe \ -% endfor - - echo All C tests built. - -buildtests_cxx: \ -% for target in cxx_test_targets: -${target.name}.exe \ -% endfor - - echo All C++ tests built. - -% for target in buildable_targets: - -## replace all .proto includes with .pb.cc / .grpc.pb.cc -%if target.src: -%for source in target.src: -%if source.endswith(".proto"): -<% - src_name_parts = source.split(".") - target.src.append(src_name_parts[0] + ".pb.cc") - target.src.append(src_name_parts[0] + ".grpc.pb.cc") -%>\ -%endif -%endfor -%endif -## remove all .proto includes -<% - target.src = [item for item in target.src if not re.search('([^/]+)\.proto$', item)] -%>\ -%if target.name in build_from_project_file: -build_${target.name}: - msbuild grpc.sln /t:${target.name} /p:Configuration=Debug /p:Linkage-grpc_dependencies_zlib=static -%else: -%if target.build == 'private': -Debug\${target.name}.lib: \ -%else: -${target.name}.exe: \ -%for dep in target.get('deps', []): -%if dep in build_from_project_file: -build_${dep} \ -%else: -Debug\${dep}.lib \ -%endif -%endfor -%endif -$(OUT_DIR) - echo Building ${target.name} -%if target.language == 'c++': - $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ \ -%else: - $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ \ -%endif -%for source in target.src: -$(REPO_ROOT)\${to_windows_path(source)} \ -%endfor -%if not target.src: -$(REPO_ROOT)\${to_windows_path('vsprojects/dummy.c')} \ -%endif - -%if target.build == 'private': - $(LIBTOOL) /OUT:"Debug\${target.name}.lib" \ -%else: - $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\${target.name}.exe" \ -%for dep in target.get('deps', []): -Debug\${dep}.lib \ -%endfor -%if target.language == 'c++': -$(CXX_LIBS) \ -%endif -$(LIBS) \ -%endif -%if not target.src: -$(OUT_DIR)\dummy.obj \ -%else: -%for source in target.src: -%if re.search('([^/]+)\.c{1,2}$', source): -$(OUT_DIR)\${re.search('([^/]+)\.c{1,2}$', source).group(1)}.obj \ -%endif -%endfor -%endif - -%if target.build != 'private': -${target.name}: ${target.name}.exe - echo Running ${target.name} - $(OUT_DIR)\${target.name}.exe -%endif -%endif -% endfor +%YAML 1.2 +--- | + # Copyright 2015, Google Inc. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # * Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following disclaimer + # in the documentation and/or other materials provided with the + # distribution. + # * Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + <%! + import re + %>\ + <%namespace file="packages.include" import="get_name"/>\ + <%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\ + <% + build_from_project_file = set(['gpr', + 'gpr_test_util', + 'grpc', + 'grpc_test_util', + 'grpc_test_util_unsecure', + 'grpc_unsecure', + 'grpc++', + 'grpc++_unsecure' + ]) + buildable_targets = [ target for target in targets + libs + if target.build in ['all', 'test', 'private', 'tool', 'benchmark'] and + target.language in ['c', 'c++'] and + all([(src.endswith('.c') or src.endswith('.cc') or src.endswith('.proto')) for src in target.src]) and + 'windows' in target.get('platforms', ['windows']) ] + c_test_targets = [ target for target in buildable_targets if target.build == 'test' and not target.language == 'c++' ] + cxx_test_targets = [ target for target in buildable_targets if target.build == 'test' and target.language == 'c++' ] + %>\ + # NMake file to build secondary gRPC targets on Windows. + # Use grpc.sln to solution to build the gRPC libraries. + + OUT_DIR=test_bin + + CC=cl.exe /nologo + LINK=link.exe /nologo + LIBTOOL=lib.exe /nologo /nodefaultlib + + REPO_ROOT=.. + OPENSSL_INCLUDES = .\packages\${get_name(vsprojects, 'openssl')}\build\native\include + ZLIB_INCLUDES = .\packages\${get_name(vsprojects, 'zlib')}\build\native\include + INCLUDES=/I$(REPO_ROOT) /I$(REPO_ROOT)\include /I$(OPENSSL_INCLUDES) /I$(ZLIB_INCLUDES) + + GFLAGS_INCLUDES = .\..\third_party\gflags\include + GTEST_INCLUDES = .\..\third_party\gtest\include + PROTOBUF_INCLUDES = .\..\third_party\protobuf\src + CXX_INCLUDES=/I$(GFLAGS_INCLUDES) /I$(GTEST_INCLUDES) /I$(PROTOBUF_INCLUDES) + + #_SCL_SECURE_NO_WARNINGS supresses a ton of "potentially unsafe use of std lib" warnings + DEFINES=/D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /D _CRT_SECURE_NO_WARNINGS /D _SCL_SECURE_NO_WARNINGS + + #important options: /TC vs. /TP: compile as C vs. compile as C++ + CFLAGS=/c $(INCLUDES) /Z7 /W3 /WX- /sdl $(DEFINES) /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- + CXXFLAGS=/c $(INCLUDES) $(CXX_INCLUDES) /Z7 /W3 /WX- /sdl $(DEFINES) /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP /analyze- + + LFLAGS=/DEBUG /INCREMENTAL /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 + + OPENSSL_LIBS=.\packages\${get_name(vsprojects, 'openssl')}\build\native\lib\v120\Win32\Debug\static\ssleay32.lib .\packages\${get_name(vsprojects, 'openssl')}\build\native\lib\v120\Win32\Debug\static\libeay32.lib + WINSOCK_LIBS=ws2_32.lib + GENERAL_LIBS=advapi32.lib comdlg32.lib gdi32.lib kernel32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib shell32.lib user32.lib uuid.lib winspool.lib + ZLIB_LIBS=.\packages\${get_name(vsprojects, 'zlib')}\build\native\lib\v120\Win32\Debug\static\cdecl\zlib.lib + LIBS=$(OPENSSL_LIBS) $(ZLIB_LIBS) $(GENERAL_LIBS) $(WINSOCK_LIBS) + + #shlwapi.lib provides PathMatchSpec() for gflags in windows + GFLAGS_LIBS=.\..\third_party\gflags\lib\Debug\gflags.lib shlwapi.lib + GTEST_LIBS=.\..\third_party\gtest\msvc\gtest\Debug\gtestd.lib + PROTOBUF_LIBS=.\..\third_party\protobuf\vsprojects\Debug\libprotobuf.lib + CXX_LIBS=$(GFLAGS_LIBS) $(GTEST_LIBS) $(PROTOBUF_LIBS) + + all: buildtests + + tools: + + tools_c: + + tools_cxx: + + $(OUT_DIR): + mkdir $(OUT_DIR) + + build_libs: \ + % for target in buildable_targets: + % if target.build == 'private' or target.build == 'all': + % if target.name in build_from_project_file: + build_${target.name} \ + % else: + Debug\${target.name}.lib \ + % endif + % endif + % endfor + + buildtests: buildtests_c buildtests_cxx + + buildtests_c: \ + % for target in c_test_targets: + ${target.name}.exe \ + % endfor + + echo All C tests built. + + buildtests_cxx: \ + % for target in cxx_test_targets: + ${target.name}.exe \ + % endfor + + echo All C++ tests built. + + % for target in buildable_targets: + + ## replace all .proto includes with .pb.cc / .grpc.pb.cc + %if target.src: + %for source in target.src: + %if source.endswith(".proto"): + <% + src_name_parts = source.split(".") + target.src.append(src_name_parts[0] + ".pb.cc") + target.src.append(src_name_parts[0] + ".grpc.pb.cc") + %>\ + %endif + %endfor + %endif + ## remove all .proto includes + <% + target.src = [item for item in target.src if not re.search('([^/]+)\.proto$', item)] + %>\ + %if target.name in build_from_project_file: + build_${target.name}: + msbuild grpc.sln /t:${target.name} /p:Configuration=Debug /p:Linkage-grpc_dependencies_zlib=static + %else: + %if target.build == 'private': + Debug\${target.name}.lib: \ + %else: + ${target.name}.exe: \ + %for dep in target.get('deps', []): + %if dep in build_from_project_file: + build_${dep} \ + %else: + Debug\${dep}.lib \ + %endif + %endfor + %endif + $(OUT_DIR) + echo Building ${target.name} + %if target.language == 'c++': + $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ \ + %else: + $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ \ + %endif + %for source in target.src: + $(REPO_ROOT)\${to_windows_path(source)} \ + %endfor + %if not target.src: + $(REPO_ROOT)\${to_windows_path('vsprojects/dummy.c')} \ + %endif + + %if target.build == 'private': + $(LIBTOOL) /OUT:"Debug\${target.name}.lib" \ + %else: + $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\${target.name}.exe" \ + %for dep in target.get('deps', []): + Debug\${dep}.lib \ + %endfor + %if target.language == 'c++': + $(CXX_LIBS) \ + %endif + $(LIBS) \ + %endif + %if not target.src: + $(OUT_DIR)\dummy.obj \ + %else: + %for source in target.src: + %if re.search('([^/]+)\.c{1,2}$', source): + $(OUT_DIR)\${re.search('([^/]+)\.c{1,2}$', source).group(1)}.obj \ + %endif + %endfor + %endif + + %if target.build != 'private': + ${target.name}: ${target.name}.exe + echo Running ${target.name} + $(OUT_DIR)\${target.name}.exe + %endif + %endif + % endfor |