Skip to content

Instantly share code, notes, and snippets.

@TooTallNate
Created January 10, 2012 19:31
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save TooTallNate/1590684 to your computer and use it in GitHub Desktop.
Save TooTallNate/1590684 to your computer and use it in GitHub Desktop.
'cflags' parameter is broken in gyp on OS X?

This is a barebones GYP file to compile 1 C source file. We are demonstrating that the cflags parameter in gyp files gets completely ignored :(

$ ../gyp/gyp -f make --depth=. hello.gyp
$ V=1 make
  cc   -fasm-blocks -mpascal-strings -Os -gdwarf-2  -MMD -MF out/Default/.deps/out/Default/obj.target/hello/hello.o.d.raw  -c -o out/Default/obj.target/hello/hello.o hello.c
  ./gyp-mac-tool flock out/Default/linker.lock g++ -Lout/Default   -o "out/Default/hello" out/Default/obj.target/hello/hello.o 
  LINK(target) out/Default/hello: Finished

We would expect a -ObjC flag to be present somewhere in the cc command, but it's not...

#include <stdio.h>
int main () {
printf("Hello\n");
return 0;
}
{
'targets': [
{
'target_name': 'hello',
'type': 'executable',
'cflags': [
'-ObjC'
],
'sources': [
'hello.c'
]
}
]
}
@springmeyer
Copy link

I think it's that gyp better at building xcode/visual studio projects and perhaps not well tested with the make generator. I think this should work for you if you are on osx:

Index: pylib/gyp/generator/make.py
===================================================================
--- pylib/gyp/generator/make.py (revision 1137)
+++ pylib/gyp/generator/make.py (working copy)
@@ -1152,15 +1152,15 @@
           quoter=EscapeCppDefine)

       if self.flavor == 'mac':
-        cflags = self.xcode_settings.GetCflags(configname)
-        cflags_c = self.xcode_settings.GetCflagsC(configname)
-        cflags_cc = self.xcode_settings.GetCflagsCC(configname)
+        #cflags = self.xcode_settings.GetCflags(configname)
+        #cflags_c = self.xcode_settings.GetCflagsC(configname)
+        #cflags_cc = self.xcode_settings.GetCflagsCC(configname)
         cflags_objc = self.xcode_settings.GetCflagsObjC(configname)
         cflags_objcc = self.xcode_settings.GetCflagsObjCC(configname)
-      else:
-        cflags = config.get('cflags')
-        cflags_c = config.get('cflags_c')
-        cflags_cc = config.get('cflags_cc')
+      #else:
+      cflags = config.get('cflags')
+      cflags_c = config.get('cflags_c')
+      cflags_cc = config.get('cflags_cc')

       self.WriteLn("# Flags passed to all source files.");
       self.WriteList(cflags, 'CFLAGS_%s' % configname)

@paddybyers
Copy link

cflags only seems to be supported for Scons.

This works both with make and xcode generators on Mac:

{
  'targets': [
    {
      'target_name': 'hello',
      'type': 'executable',
      'xcode_settings': {
        'OTHER_CFLAGS': [
          '-ObjC'
        ],
      },
      'sources': [
          'hello.c'
      ]
    }
  ]
}

@TooTallNate
Copy link
Author

Thanks @paddybyers. Indeed it seems that adding an xcode_settings block is the preferred way of doing this.

@indutny
Copy link

indutny commented Mar 28, 2012

Thanks, @google. I found this gist and fixed my problem: indutny/candor@40a27c8#diff-0

@zdne
Copy link

zdne commented Apr 4, 2013

This issues is still present. @paddybyers approach still works.

@karimcitoh
Copy link

Any solution of how to make cflags work on Windows?

@nitriques
Copy link

Still no solution to make it work on Windows ?

@mhirsch
Copy link

mhirsch commented Aug 30, 2017

This seems to work in linux now with node-gyp v3.6.2 (e.g. gyp pays attention to the cflags field)

@stiv-yakovenko
Copy link

How to make this brilliant utilty pass flag on linux?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment