OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/ninja_target_writer.h" | 5 #include "tools/gn/ninja_target_writer.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
353 out_ << std::endl; | 353 out_ << std::endl; |
354 | 354 |
355 // Includes. | 355 // Includes. |
356 out_ << "includes ="; | 356 out_ << "includes ="; |
357 RecursiveTargetConfigToStream(target_, &ConfigValues::includes, | 357 RecursiveTargetConfigToStream(target_, &ConfigValues::includes, |
358 IncludeWriter(path_output_, helper_), out_); | 358 IncludeWriter(path_output_, helper_), out_); |
359 | 359 |
360 out_ << std::endl; | 360 out_ << std::endl; |
361 | 361 |
362 // C flags and friends. | 362 // C flags and friends. |
363 out_ << "cflags ="; | 363 #define WRITE_FLAGS(name) \ |
364 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::cflags, out_); | 364 out_ << #name " ="; \ |
365 out_ << std::endl; | 365 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::name, out_); \ |
366 out_ << "cflags_c ="; | 366 out_ << std::endl; |
367 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::cflags_c, out_); | 367 |
368 out_ << std::endl; | 368 WRITE_FLAGS(cflags) |
369 out_ << "cflags_cc ="; | 369 WRITE_FLAGS(cflags_c) |
370 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::cflags_cc, out_); | 370 WRITE_FLAGS(cflags_cc) |
371 out_ << std::endl; | 371 WRITE_FLAGS(cflags_objc) |
372 WRITE_FLAGS(cflags_objcc) | |
373 | |
374 #undef WRITE_FLAGS | |
372 | 375 |
373 out_ << std::endl; | 376 out_ << std::endl; |
374 } | 377 } |
375 | 378 |
376 void NinjaTargetWriter::WriteSources( | 379 void NinjaTargetWriter::WriteSources( |
377 std::vector<OutputFile>* object_files) { | 380 std::vector<OutputFile>* object_files) { |
378 const Target::FileList& sources = target_->sources(); | 381 const Target::FileList& sources = target_->sources(); |
379 object_files->reserve(sources.size()); | 382 object_files->reserve(sources.size()); |
380 | 383 |
381 for (size_t i = 0; i < sources.size(); i++) { | 384 for (size_t i = 0; i < sources.size(); i++) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
422 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::ldflags, out_); | 425 RecursiveTargetConfigStringsToStream(target_, &ConfigValues::ldflags, out_); |
423 // HACK ERASEME BRETTW FIXME | 426 // HACK ERASEME BRETTW FIXME |
424 if (settings_->IsWin()) { | 427 if (settings_->IsWin()) { |
425 out_ << " /MANIFEST /ManifestFile:"; | 428 out_ << " /MANIFEST /ManifestFile:"; |
426 path_output_.WriteFile(out_, windows_manifest); | 429 path_output_.WriteFile(out_, windows_manifest); |
427 out_ << " /DEBUG /MACHINE:X86 /LIBPATH:\"C:\\Program Files (x86)\\Windows Ki ts\\8.0\\Lib\\win8\\um\\x86\" /DELAYLOAD:dbghelp.dll /DELAYLOAD:dwmapi.dll /DELA YLOAD:shell32.dll /DELAYLOAD:uxtheme.dll /safeseh /dynamicbase /ignore:4199 /ign ore:4221 /nxcompat /SUBSYSTEM:CONSOLE /INCREMENTAL /FIXED:NO /DYNAMICBASE:NO win inet.lib dnsapi.lib version.lib msimg32.lib ws2_32.lib usp10.lib psapi.lib dbghe lp.lib winmm.lib shlwapi.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib ad vapi32.lib shell32.lib ole32.lib oleaut32.lib user32.lib uuid.lib odbc32.lib odb ccp32.lib delayimp.lib /NXCOMPAT"; | 430 out_ << " /DEBUG /MACHINE:X86 /LIBPATH:\"C:\\Program Files (x86)\\Windows Ki ts\\8.0\\Lib\\win8\\um\\x86\" /DELAYLOAD:dbghelp.dll /DELAYLOAD:dwmapi.dll /DELA YLOAD:shell32.dll /DELAYLOAD:uxtheme.dll /safeseh /dynamicbase /ignore:4199 /ign ore:4221 /nxcompat /SUBSYSTEM:CONSOLE /INCREMENTAL /FIXED:NO /DYNAMICBASE:NO win inet.lib dnsapi.lib version.lib msimg32.lib ws2_32.lib usp10.lib psapi.lib dbghe lp.lib winmm.lib shlwapi.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib ad vapi32.lib shell32.lib ole32.lib oleaut32.lib user32.lib uuid.lib odbc32.lib odb ccp32.lib delayimp.lib /NXCOMPAT"; |
428 } | 431 } |
429 out_ << std::endl; | 432 out_ << std::endl; |
430 | 433 |
431 // Libraries to link. | 434 // Libraries to link. |
432 out_ << "libs =" << std::endl; | 435 out_ << "libs ="; |
436 if (settings_->IsMac()) { | |
437 // TODO(brettw) fix this. | |
438 out_ << " -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework Foundation -framework IOKit -framework Sec urity"; | |
439 } | |
440 out_ << std::endl; | |
433 | 441 |
434 // The external output file is the one that other libs depend on. | 442 // The external output file is the one that other libs depend on. |
435 OutputFile external_output_file = helper_.GetTargetOutputFile(target_); | 443 OutputFile external_output_file = helper_.GetTargetOutputFile(target_); |
436 | 444 |
437 // The internal output file is the "main thing" we think we're making. In | 445 // The internal output file is the "main thing" we think we're making. In |
438 // the case of shared libraries, this is the shared library and the external | 446 // the case of shared libraries, this is the shared library and the external |
439 // output file is the import library. In other cases, the internal one and | 447 // output file is the import library. In other cases, the internal one and |
440 // the external one are the same. | 448 // the external one are the same. |
441 OutputFile internal_output_file; | 449 OutputFile internal_output_file; |
442 if (target_->output_type() == Target::SHARED_LIBRARY) { | 450 if (target_->output_type() == Target::SHARED_LIBRARY) { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
498 | 506 |
499 out_ << " dll = "; | 507 out_ << " dll = "; |
500 path_output_.WriteFile(out_, internal_output_file); | 508 path_output_.WriteFile(out_, internal_output_file); |
501 out_ << std::endl; | 509 out_ << std::endl; |
502 | 510 |
503 if (settings_->IsWin()) { | 511 if (settings_->IsWin()) { |
504 out_ << " implibflag = /IMPLIB:"; | 512 out_ << " implibflag = /IMPLIB:"; |
505 path_output_.WriteFile(out_, external_output_file); | 513 path_output_.WriteFile(out_, external_output_file); |
506 out_ << std::endl; | 514 out_ << std::endl; |
507 } | 515 } |
516 | |
517 // TODO(brettw) postbuild steps. | |
518 if (settings_->IsMac()) | |
519 out_ << " postbuilds = $ && (export BUILT_PRODUCTS_DIR=/Users/brettw/prj/ src/out/gn; export CONFIGURATION=Debug; export DYLIB_INSTALL_NAME_BASE=@rpath; e xport EXECUTABLE_NAME=libbase.dylib; export EXECUTABLE_PATH=libbase.dylib; expor t FULL_PRODUCT_NAME=libbase.dylib; export LD_DYLIB_INSTALL_NAME=@rpath/libbase.d ylib; export MACH_O_TYPE=mh_dylib; export PRODUCT_NAME=base; export PRODUCT_TYPE =com.apple.product-type.library.dynamic; export SDKROOT=/Applications/Xcode.app/ Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk; expo rt SRCROOT=/Users/brettw/prj/src/out/gn/../../base; export SOURCE_ROOT=\"$${SRCR OOT}\"; export TARGET_BUILD_DIR=/Users/brettw/prj/src/out/gn; export TEMP_DIR=\" $${TMPDIR}\"; (cd ../../base && ../build/mac/strip_from_xcode); G=$$?; ((exit $$ G) || rm -rf libbase.dylib) && exit $$G)"; | |
scottmg
2013/08/05 12:24:48
¯\_(ツ)_/¯
| |
508 } | 520 } |
509 | 521 |
510 // TODO(brettw) postbuild steps here. | |
511 | 522 |
512 out_ << std::endl; | 523 out_ << std::endl; |
513 } | 524 } |
514 | 525 |
515 const char* NinjaTargetWriter::GetCommandForSourceType( | 526 const char* NinjaTargetWriter::GetCommandForSourceType( |
516 SourceFileType type) const { | 527 SourceFileType type) const { |
517 if (type == SOURCE_C) | 528 if (type == SOURCE_C) |
518 return "cc"; | 529 return "cc"; |
519 if (type == SOURCE_CC) | 530 if (type == SOURCE_CC) |
520 return "cxx"; | 531 return "cxx"; |
(...skipping 26 matching lines...) Expand all Loading... | |
547 // TODO(brettw) stuff about standalong static libraryes on Unix in | 558 // TODO(brettw) stuff about standalong static libraryes on Unix in |
548 // WriteTarget in the Python one, and lots of postbuild steps. | 559 // WriteTarget in the Python one, and lots of postbuild steps. |
549 return "alink"; | 560 return "alink"; |
550 } | 561 } |
551 | 562 |
552 if (target_->output_type() == Target::SHARED_LIBRARY) | 563 if (target_->output_type() == Target::SHARED_LIBRARY) |
553 return "solink"; | 564 return "solink"; |
554 | 565 |
555 return "link"; | 566 return "link"; |
556 } | 567 } |
OLD | NEW |