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