compilers: Fix bitcode and other options for objc code

We were setting the base options for the Objective-C compiler
manually, due to which options such as b_bitcode and b_ndebug were not
getting set at all.

The base options here are the same as for C code with the Clang
compiler, so just use the same inherited list.

Also expand the bitcode test to ObjC and ObjC++ so this doesn't happen
again.
pull/5543/head
Nirbheek Chauhan 6 years ago committed by Jussi Pakkanen
parent 80856884cc
commit 9042130e9a
  1. 1
      mesonbuild/compilers/objc.py
  2. 1
      mesonbuild/compilers/objcpp.py
  3. 17
      run_unittests.py
  4. 7
      test cases/osx/7 bitcode/libbar.mm
  5. 5
      test cases/osx/7 bitcode/libfile.c
  6. 7
      test cases/osx/7 bitcode/libfoo.m
  7. 10
      test cases/osx/7 bitcode/meson.build
  8. 6
      test cases/osx/7 bitcode/vis.h

@ -74,4 +74,3 @@ class ClangObjCCompiler(ClangCompiler, ObjCCompiler):
'1': default_warn_args,
'2': default_warn_args + ['-Wextra'],
'3': default_warn_args + ['-Wextra', '-Wpedantic']}
self.base_options = ['b_pch', 'b_lto', 'b_pgo', 'b_sanitize', 'b_coverage']

@ -75,4 +75,3 @@ class ClangObjCPPCompiler(ClangCompiler, ObjCPPCompiler):
'1': default_warn_args,
'2': default_warn_args + ['-Wextra'],
'3': default_warn_args + ['-Wextra', '-Wpedantic']}
self.base_options = ['b_pch', 'b_lto', 'b_pgo', 'b_sanitize', 'b_coverage']

@ -4093,18 +4093,21 @@ class DarwinTests(BasePlatformTests):
when it is false. This can't be an ordinary test case because we need
to inspect the compiler database.
'''
testdir = os.path.join(self.common_test_dir, '4 shared')
# Try with bitcode enabled
out = self.init(testdir, extra_args='-Db_bitcode=true')
testdir = os.path.join(self.platform_test_dir, '7 bitcode')
env = get_fake_env(testdir, self.builddir, self.prefix)
cc = env.detect_c_compiler(MachineChoice.HOST)
if cc.id != 'clang':
raise unittest.SkipTest('Not using Clang on OSX')
# Try with bitcode enabled
out = self.init(testdir, extra_args='-Db_bitcode=true')
# Warning was printed
self.assertRegex(out, 'WARNING:.*b_bitcode')
# Compiler options were added
compdb = self.get_compdb()
self.assertIn('-fembed-bitcode', compdb[0]['command'])
for compdb in self.get_compdb():
if 'module' in compdb['file']:
self.assertNotIn('-fembed-bitcode', compdb['command'])
else:
self.assertIn('-fembed-bitcode', compdb['command'])
build_ninja = os.path.join(self.builddir, 'build.ninja')
# Linker options were added
with open(build_ninja, 'r', encoding='utf-8') as f:
@ -4115,8 +4118,8 @@ class DarwinTests(BasePlatformTests):
self.setconf('-Db_bitcode=false')
# Regenerate build
self.build()
compdb = self.get_compdb()
self.assertNotIn('-fembed-bitcode', compdb[0]['command'])
for compdb in self.get_compdb():
self.assertNotIn('-fembed-bitcode', compdb['command'])
build_ninja = os.path.join(self.builddir, 'build.ninja')
with open(build_ninja, 'r', encoding='utf-8') as f:
contents = f.read()

@ -0,0 +1,7 @@
#import <stdio.h>
#import "vis.h"
int EXPORT_PUBLIC libbar(int arg) {
return 0;
}

@ -0,0 +1,5 @@
#include "vis.h"
int EXPORT_PUBLIC libfunc() {
return 3;
}

@ -0,0 +1,7 @@
#import <stdio.h>
#import "vis.h"
int EXPORT_PUBLIC libfoo(int arg) {
return 0;
}

@ -0,0 +1,10 @@
project('bitcode test', 'c', 'objc', 'objcpp')
both_libraries('alib', 'libfoo.m')
shared_module('amodule', 'libfoo.m')
both_libraries('blib', 'libbar.mm')
shared_module('bmodule', 'libbar.mm')
both_libraries('clib', 'libfile.c')
shared_module('cmodule', 'libfile.c')

@ -0,0 +1,6 @@
#if defined __GNUC__
#define EXPORT_PUBLIC __attribute__ ((visibility("default")))
#else
#pragma message ("Compiler does not support symbol visibility.")
#define EXPORT_PUBLIC
#endif
Loading…
Cancel
Save