From 5558f3331394ea0a9cad2aec1ca469e6a0406038 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 20 Jun 2015 03:21:49 -0400 Subject: We are actually emitting makefiles and building now (with make and ninja); some things remain for MVP though, like detecting makefile change, rebuilding in case of rule changes, helper functions... --- configure | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 configure (limited to 'configure') diff --git a/configure b/configure new file mode 100755 index 0000000..39163cb --- /dev/null +++ b/configure @@ -0,0 +1,26 @@ +#!/usr/bin/env python2.7 +import mconfig +settings = mconfig.settings_root +settings.package_unix_name.value = 'substitute' + +c = settings.host_machine().c_tools() + +c.cc.required() + +mconfig.parse_args() +settings.cflags = ['-I%s/lib' % (settings.src,)] + settings.cflags + +emitter = settings.emitter +mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, + 'dylib', + '(out)/libsubstitute.dylib', + [ + '(src)/lib/darwin/find-syms.c', + '(src)/lib/darwin/inject.c', + '(src)/lib/darwin/interpose.c', + ] +) +# todo use wrapper +emitter.add_command(['all'], [settings.out + '/libsubstitute.dylib'], [], phony=True) +emitter.set_default_rule('all') +mconfig.emit() -- cgit v1.2.3 From 9adbc0e6f54c9aba9fdae4c0387f9e9ec75a3bc5 Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 21 Jun 2015 11:46:09 -0400 Subject: improve expand() and add support to add_command --- configure | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 39163cb..6526965 100755 --- a/configure +++ b/configure @@ -20,7 +20,9 @@ mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, '(src)/lib/darwin/interpose.c', ] ) -# todo use wrapper -emitter.add_command(['all'], [settings.out + '/libsubstitute.dylib'], [], phony=True) + +settings.test = 'foo baz' +emitter.add_command(settings, ['all'], ['(out)/libsubstitute.dylib'], [], phony=True) emitter.set_default_rule('all') -mconfig.emit() + +mconfig.finish_and_emit() -- cgit v1.2.3 From 88666c94eda8af35974889d275248daf451a0005 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 23 Jun 2015 20:46:07 -0400 Subject: build_c_objs improvements --- configure | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 6526965..c1b9be1 100755 --- a/configure +++ b/configure @@ -18,10 +18,13 @@ mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, '(src)/lib/darwin/find-syms.c', '(src)/lib/darwin/inject.c', '(src)/lib/darwin/interpose.c', - ] + ], + #settings_cb=lambda fn: settings.specialize(override_is_cxx=True) + + ) -settings.test = 'foo baz' +#settings.test = 'foo baz' emitter.add_command(settings, ['all'], ['(out)/libsubstitute.dylib'], [], phony=True) emitter.set_default_rule('all') -- cgit v1.2.3 From ddcbd946b512c3f06db8596cb3052b9f7ca545a6 Mon Sep 17 00:00:00 2001 From: comex Date: Thu, 25 Jun 2015 21:33:07 -0400 Subject: ... --- configure | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'configure') diff --git a/configure b/configure index c1b9be1..4eecda0 100755 --- a/configure +++ b/configure @@ -7,23 +7,64 @@ c = settings.host_machine().c_tools() c.cc.required() +asm_archs = [ + ('x86_64', []), + ('i386', []), + ('arm', ['-marm']), + ('arm64', []), # XXX +] + +machs = [] +for name, cflags in asm_archs: + mach = mconfig.Machine('asm-' + name, settings, 'for cross-compiling the inject baton', name + '-apple-darwin10') + machs.append(mach) + mach.c_tools().cc.required() + + mconfig.parse_args() settings.cflags = ['-I%s/lib' % (settings.src,)] + settings.cflags +settings.debug_info = True emitter = settings.emitter -mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, + +balco = lambda *args, **kwargs: mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, *args, **kwargs) + +# Note: the order of darwin-inject-asm.o is significant. Per man page, ld is +# guaranteed to link objects in order, which is necessary because +# darwin-inject-asm.S does not itself ensure there is at least 0x4000 bytes of +# executable stuff after inject_page_start (so that arm can remap into arm64). +# By putting it at the beginning, we can just reuse the space for the rest of +# the library rather than having to pad with zeroes. +# (This only matters on 32-bit ARM, and the text segment is currently 0xa000 +# bytes there, more than enough.) + +balco( 'dylib', '(out)/libsubstitute.dylib', [ + '(src)/generated/darwin-inject-asm.S', '(src)/lib/darwin/find-syms.c', '(src)/lib/darwin/inject.c', '(src)/lib/darwin/interpose.c', + '(src)/lib/darwin/objc-asm.S', + '(src)/lib/darwin/objc.c', + '(src)/lib/darwin/read.c', + '(src)/lib/darwin/substrate-compat.c', + '(src)/lib/darwin/execmem.c', + '(src)/lib/cbit/vec.c', + '(src)/lib/jump-dis.c', + '(src)/lib/transform-dis.c', + '(src)/lib/hook-functions.c', + '(src)/lib/strerror.c', ], #settings_cb=lambda fn: settings.specialize(override_is_cxx=True) - - ) +#for name, arch_flag, opts in [ +#]: +#compile_c_objs(emitter, settings.host_machine(), + + #settings.test = 'foo baz' emitter.add_command(settings, ['all'], ['(out)/libsubstitute.dylib'], [], phony=True) emitter.set_default_rule('all') -- cgit v1.2.3 From abee6770e6383b7da373c4d8600c3a0e64165987 Mon Sep 17 00:00:00 2001 From: comex Date: Thu, 25 Jun 2015 21:39:30 -0400 Subject: fixes - now three ways to specify an arch for xcode, yayer --- configure | 1 + 1 file changed, 1 insertion(+) (limited to 'configure') diff --git a/configure b/configure index 4eecda0..93682e0 100755 --- a/configure +++ b/configure @@ -6,6 +6,7 @@ settings.package_unix_name.value = 'substitute' c = settings.host_machine().c_tools() c.cc.required() +c.dsymutil.required() asm_archs = [ ('x86_64', []), -- cgit v1.2.3 From 516ff7d23cdd9f779cb1b414d02b63d465f8162c Mon Sep 17 00:00:00 2001 From: comex Date: Thu, 25 Jun 2015 22:26:14 -0400 Subject: fixed auto-regen... --- configure | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'configure') diff --git a/configure b/configure index 93682e0..5e1ad3d 100755 --- a/configure +++ b/configure @@ -30,6 +30,11 @@ emitter = settings.emitter balco = lambda *args, **kwargs: mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, *args, **kwargs) +def cb(fn): + if fn.endswith('/objc.c'): + return settings.specialize(obj_ldflag_sets=[('-lobjc',)]) + return settings + # Note: the order of darwin-inject-asm.o is significant. Per man page, ld is # guaranteed to link objects in order, which is necessary because # darwin-inject-asm.S does not itself ensure there is at least 0x4000 bytes of @@ -58,7 +63,7 @@ balco( '(src)/lib/hook-functions.c', '(src)/lib/strerror.c', ], - #settings_cb=lambda fn: settings.specialize(override_is_cxx=True) + settings_cb=cb ) #for name, arch_flag, opts in [ -- cgit v1.2.3 From a94bed159dce83dc0522298fe717070f27ff7c09 Mon Sep 17 00:00:00 2001 From: comex Date: Mon, 29 Jun 2015 20:01:58 +0100 Subject: move mconfig.py --- configure | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'configure') diff --git a/configure b/configure index 5e1ad3d..218b2cf 100755 --- a/configure +++ b/configure @@ -1,4 +1,6 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python +import sys, os +sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'script')) import mconfig settings = mconfig.settings_root settings.package_unix_name.value = 'substitute' -- cgit v1.2.3 From 1e5ead35d7de129c4cbfd043658d5cd9b1c940bb Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 7 Jul 2015 14:19:56 -0400 Subject: ... --- configure | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 218b2cf..cfc2f70 100755 --- a/configure +++ b/configure @@ -6,10 +6,13 @@ settings = mconfig.settings_root settings.package_unix_name.value = 'substitute' c = settings.host_machine().c_tools() - c.cc.required() c.dsymutil.required() + +settings.add_setting_option('imaon2', '--with-imaon2', 'path to imaon2 (optional)', '') +settings.add_setting_option('gen_dia', '--enable-recompile-dia', 'generate darwin-inject-asm.S', False, bool=True) + asm_archs = [ ('x86_64', []), ('i386', []), @@ -21,12 +24,22 @@ machs = [] for name, cflags in asm_archs: mach = mconfig.Machine('asm-' + name, settings, 'for cross-compiling the inject baton', name + '-apple-darwin10') machs.append(mach) - mach.c_tools().cc.required() + cc = mach.c_tools().cc + cc.optional() + def f(): + if settings.gen_dia: + cc.argv() + mach_settings = settings[mach.name] + mach_settings.cflags = cflags + mach_settings.cflags + mconfig.post_parse_args_will_need.append(f) mconfig.parse_args() -settings.cflags = ['-I%s/lib' % (settings.src,)] + settings.cflags -settings.debug_info = True +#################################### +mconfig.mark_safe_to_clean('(src)/generated/darwin-inject-asm.S', settings) + +settings.host.cflags = ['-I%s/lib' % (settings.src,)] + settings.host.cflags +settings.host.debug_info = True emitter = settings.emitter @@ -67,14 +80,27 @@ balco( ], settings_cb=cb ) +#settings.test = 'foo baz' -#for name, arch_flag, opts in [ -#]: -#compile_c_objs(emitter, settings.host_machine(), - +if settings.gen_dia: + bins = [] + for (name, _cflags), mach in zip(asm_archs, machs): + exe = '(out)/inject-asm-raw-%s' % (name,) + bin = exe + '.bin' + mconfig.build_and_link_c_objs(emitter, mach, + settings.specialize( + override_obj_fn='(out)/inject-asm-raw-%s.o' % (name,), + override_ldflags=['-Wl,-order_file,(src)/lib/darwin/inject-asm-raw.order'] + settings[mach.name].ldflags, + ), + 'exec', + exe, + ['(src)/lib/darwin/inject-asm-raw.c']) + bins.append(bin) + emitter.add_command(settings, [bin], [exe], ['segedit -extract __TEXT __text (outs[0]) (ins[0])']) + emitter.add_command(settings, ['(src)/generated/darwin-inject-asm.S'], bins, [['(src)/script/gen-inject-asm.sh', '(out)'] + bins]) -#settings.test = 'foo baz' emitter.add_command(settings, ['all'], ['(out)/libsubstitute.dylib'], [], phony=True) emitter.set_default_rule('all') + mconfig.finish_and_emit() -- cgit v1.2.3 From 69752843f1b6460ebb23584401661613d0b5bacf Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 7 Jul 2015 15:19:20 -0400 Subject: tests --- configure | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 84 insertions(+), 14 deletions(-) (limited to 'configure') diff --git a/configure b/configure index cfc2f70..61ebf00 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #!/usr/bin/env python -import sys, os +import sys, os, glob sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'script')) import mconfig settings = mconfig.settings_root @@ -12,6 +12,7 @@ c.dsymutil.required() settings.add_setting_option('imaon2', '--with-imaon2', 'path to imaon2 (optional)', '') settings.add_setting_option('gen_dia', '--enable-recompile-dia', 'generate darwin-inject-asm.S', False, bool=True) +settings.add_setting_option('enable_tests', '--enable-tests', 'tests!', False, bool=True) asm_archs = [ ('x86_64', []), @@ -20,6 +21,8 @@ asm_archs = [ ('arm64', []), # XXX ] +asm_cflags = ['-Os', '-fno-stack-protector', '-isysroot', '/dev/null', '-fPIC'] +asm_ldflags = ['-nostartfiles', '-nodefaultlibs'] machs = [] for name, cflags in asm_archs: mach = mconfig.Machine('asm-' + name, settings, 'for cross-compiling the inject baton', name + '-apple-darwin10') @@ -30,7 +33,8 @@ for name, cflags in asm_archs: if settings.gen_dia: cc.argv() mach_settings = settings[mach.name] - mach_settings.cflags = cflags + mach_settings.cflags + mach_settings.cflags = cflags + asm_cflags + mach_settings.cflags + mach_settings.ldflags = asm_ldflags + mach_settings.ldflags mconfig.post_parse_args_will_need.append(f) @@ -38,13 +42,11 @@ mconfig.parse_args() #################################### mconfig.mark_safe_to_clean('(src)/generated/darwin-inject-asm.S', settings) -settings.host.cflags = ['-I%s/lib' % (settings.src,)] + settings.host.cflags settings.host.debug_info = True +settings.c_includes = ['(src)/lib', '(src)/substrate'] emitter = settings.emitter -balco = lambda *args, **kwargs: mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, *args, **kwargs) - def cb(fn): if fn.endswith('/objc.c'): return settings.specialize(obj_ldflag_sets=[('-lobjc',)]) @@ -59,7 +61,8 @@ def cb(fn): # (This only matters on 32-bit ARM, and the text segment is currently 0xa000 # bytes there, more than enough.) -balco( +mconfig.build_and_link_c_objs( + emitter, settings.host_machine(), settings, 'dylib', '(out)/libsubstitute.dylib', [ @@ -82,8 +85,13 @@ balco( ) #settings.test = 'foo baz' +def o_to_bin(exe): + bin = os.path.splitext(exe)[0] + '.bin' + emitter.add_command(settings, [bin], [exe], ['segedit -extract __TEXT __text (outs[0]) (ins[0])']) + return bin + if settings.gen_dia: - bins = [] + args = [] for (name, _cflags), mach in zip(asm_archs, machs): exe = '(out)/inject-asm-raw-%s' % (name,) bin = exe + '.bin' @@ -92,15 +100,77 @@ if settings.gen_dia: override_obj_fn='(out)/inject-asm-raw-%s.o' % (name,), override_ldflags=['-Wl,-order_file,(src)/lib/darwin/inject-asm-raw.order'] + settings[mach.name].ldflags, ), - 'exec', + 'dylib', exe, ['(src)/lib/darwin/inject-asm-raw.c']) - bins.append(bin) - emitter.add_command(settings, [bin], [exe], ['segedit -extract __TEXT __text (outs[0]) (ins[0])']) - emitter.add_command(settings, ['(src)/generated/darwin-inject-asm.S'], bins, [['(src)/script/gen-inject-asm.sh', '(out)'] + bins]) - -emitter.add_command(settings, ['all'], ['(out)/libsubstitute.dylib'], [], phony=True) + bin = o_to_bin(exe) + args.extend([name, bin]) + emitter.add_command(settings, ['(src)/generated/darwin-inject-asm.S'], ['(src)/script/gen-inject-asm.sh'] + args[1::2], [['(src)/script/gen-inject-asm.sh', '(outs[0])'] + args]) + +all_deps = ['(out)/libsubstitute.dylib'] + +if settings.enable_tests: + # just for quick testing + for ofile, sfile, cflags, mach in [ + ('insns-arm.o', 'insns-arm.S', [], machs[2]), + ('insns-thumb2.o', 'insns-arm.S', ['-DTHUMB2'], machs[2]), + ('insns-libz-arm.o', 'insns-libz-arm.S', [], machs[2]), + ('insns-libz-thumb2.o', 'insns-libz-arm.S', ['-DTHUMB2'], machs[2]), + ('transform-dis-cases-arm64.o', 'transform-dis-cases-arm64.S', [], machs[3]), + ('transform-dis-cases-i386.o', 'transform-dis-cases-i386.S', [], machs[1]), + ('transform-dis-cases-x86_64.o', 'transform-dis-cases-x86_64.S', [], machs[0]), + ]: + mconfig.build_c_objs(emitter, mach, settings.specialize(override_obj_fn='(out)/'+ofile), ['(src)/test/'+sfile]) + all_deps.append(o_to_bin('(out)/'+ofile)) + + tests = [ + ('find-syms', ['-std=c89']), + ('find-syms-cpp', 'find-syms', ['-x', 'c++', '-std=c++98'], {'cpp': True}), + ('substrate', ['-x', 'c++', '-std=c++98'], {'cpp': True}), + ('imp-forwarding', [], ['-framework', 'Foundation', '-lobjc']), + ('objc-hook', [], ['-framework', 'Foundation']), + ('interpose',), + ('inject', {'extra_objs': ['(out)/lib/darwin/inject.o', '(out)/lib/darwin/read.o']}), + ('pc-patch', {'extra_objs': ['(out)/lib/darwin/execmem.o']}), + ('execmem', [], ['-segprot', '__TEST', 'rwx', 'rx'], {'extra_objs': ['(out)/lib/darwin/execmem.o']}), + ('hook-functions', [], ['-segprot', '__TEST', 'rwx', 'rx']), + ('posixspawn-hook',), + ('htab',), + ('vec', {'cpp': True, 'extra_objs': ['(out)/lib/cbit/vec.o']}), + ] + + for arch, hdr, xdis, target in [ + ('arm', 'arm/dis-arm.inc.h', 'dis_arm', 'arm'), + ('thumb', 'arm/dis-thumb.inc.h', 'dis_thumb', 'arm'), + ('thumb2', 'arm/dis-thumb2.inc.h', 'dis_thumb2', 'arm'), + ('arm64', 'arm64/dis-main.inc.h', 'dis', 'arm64'), + ('i386', 'x86/dis-main.inc.h', 'dis', 'i386'), + ('x86_64', 'x86/dis-main.inc.h', 'dis', 'x86_64') + ]: + tests.append(('td-simple-'+arch, 'td-simple', ['-DHDR="%s"' % (hdr,), '-Dxdis='+xdis, '-DFORCE_TARGET_'+target])) + tests.append(('jump-dis-'+arch, 'jump-dis', ['-O0', '-DFORCE_TARGET_'+target], {'extra_objs': ['(out)/lib/cbit/vec.o']})) + tests.append(('transform-dis-'+arch, 'transform-dis', ['-O0', '-DFORCE_TARGET_'+target], {'extra_objs': ['(out)/lib/cbit/vec.o']})) + + for tup in tests: + tup = list(tup) + ibase = obase = tup.pop(0) + cflags = ldflags = [] + options = {} + if tup and isinstance(tup[0], basestring): ibase = tup.pop(0) + if tup and isinstance(tup[0], (list, tuple)): cflags = tup.pop(0) + if tup and isinstance(tup[0], (list, tuple)): ldflags = tup.pop(0) + if tup: options, = tup + o = '(out)/test-'+obase + cfile = glob.glob(settings.src+'/test/test-'+ibase+'.*')[0] + mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings.specialize( + override_cflags=cflags+settings.host.cflags, + override_ldflags=ldflags+['-L(out)', '-lsubstitute']+settings.host.ldflags, + override_obj_fn=o+'.o', + override_is_cxx=options.get('cxx', False), + ), 'exec', o, [cfile], objs=options.get('extra_objs', [])) + all_deps.append(o) + +emitter.add_command(settings, ['all'], all_deps, [], phony=True) emitter.set_default_rule('all') - mconfig.finish_and_emit() -- cgit v1.2.3 From 5162bf232ed5e24a34c5de9796b35f7a133eb399 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 7 Jul 2015 15:47:33 -0400 Subject: build more stuff - need ldid and arguably dsym fixup --- configure | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 61ebf00..524fe0e 100755 --- a/configure +++ b/configure @@ -13,6 +13,9 @@ c.dsymutil.required() settings.add_setting_option('imaon2', '--with-imaon2', 'path to imaon2 (optional)', '') settings.add_setting_option('gen_dia', '--enable-recompile-dia', 'generate darwin-inject-asm.S', False, bool=True) settings.add_setting_option('enable_tests', '--enable-tests', 'tests!', False, bool=True) +settings.add_setting_option('enable_ios_bootstrap', '--enable-ios-bootstrap', 'default: true if you pass --xcode-sdk=iphoneos', + lambda: 'iphoneos' in str(settings.host_machine().toolchains()[0].sdk_opt.value), + bool=True) asm_archs = [ ('x86_64', []), @@ -42,6 +45,9 @@ mconfig.parse_args() #################################### mconfig.mark_safe_to_clean('(src)/generated/darwin-inject-asm.S', settings) +if settings.enable_ios_bootstrap: + mconfig.log('Will build iOS bootstrap.\n') + settings.host.debug_info = True settings.c_includes = ['(src)/lib', '(src)/substrate'] @@ -107,8 +113,6 @@ if settings.gen_dia: args.extend([name, bin]) emitter.add_command(settings, ['(src)/generated/darwin-inject-asm.S'], ['(src)/script/gen-inject-asm.sh'] + args[1::2], [['(src)/script/gen-inject-asm.sh', '(outs[0])'] + args]) -all_deps = ['(out)/libsubstitute.dylib'] - if settings.enable_tests: # just for quick testing for ofile, sfile, cflags, mach in [ @@ -121,7 +125,7 @@ if settings.enable_tests: ('transform-dis-cases-x86_64.o', 'transform-dis-cases-x86_64.S', [], machs[0]), ]: mconfig.build_c_objs(emitter, mach, settings.specialize(override_obj_fn='(out)/'+ofile), ['(src)/test/'+sfile]) - all_deps.append(o_to_bin('(out)/'+ofile)) + o_to_bin('(out)/'+ofile) tests = [ ('find-syms', ['-std=c89']), @@ -164,13 +168,41 @@ if settings.enable_tests: cfile = glob.glob(settings.src+'/test/test-'+ibase+'.*')[0] mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings.specialize( override_cflags=cflags+settings.host.cflags, - override_ldflags=ldflags+['-L(out)', '-lsubstitute']+settings.host.ldflags, + override_ldflags=ldflags+settings.host.ldflags, override_obj_fn=o+'.o', override_is_cxx=options.get('cxx', False), - ), 'exec', o, [cfile], objs=options.get('extra_objs', [])) - all_deps.append(o) + ), 'exec', o, [cfile], objs=options.get('extra_objs', [])+['(out)/libsubstitute.dylib']) + + mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings, 'dylib', '(out)/injected-test-dylib.dylib', ['(src)/test/injected-test-dylib.c']) + +if settings.enable_ios_bootstrap: + mconfig.build_and_link_c_objs(emitter, settings.host_machine(), + settings.specialize( + override_cflags=['-fobjc-arc', '-Wno-unused-parameter']+settings.host.cflags, + override_ldflags=['-framework', 'UIKit', '-framework', 'Foundation', '-dead_strip']+settings.host.ldflags, + ), + 'exec', + '(out)/safety-dance/SafetyDance.app/SafetyDance', + [ + '(src)/darwin-bootstrap/safety-dance/AutoGrid.m', + '(src)/darwin-bootstrap/safety-dance/main.m', + ] + ) + emitter.add_command(settings, ['(out)/safety-dance/SafetyDance.app/Info.plist'], ['(src)/darwin-bootstrap/safety-dance/Info.plist'], ['plutil -convert binary1 -o (outs[0]) (ins[0])']) + for out in ['Default.png', 'Default@2x.png']: + emitter.add_command(settings, ['(out)/safety-dance/SafetyDance.app/'+out], ['(src)/darwin-bootstrap/safety-dance/white.png'], ['cp (ins[0]) (outs[0])']) + + ls = ['(out)/libsubstitute.dylib'] + for ty, out, ins, objs, ldf, cf in [ + ('dylib', '(out)/posixspawn-hook.dylib', ['(src)/darwin-bootstrap/posixspawn-hook.c'], ls, [], []), + ('dylib', '(out)/bundle-loader.dylib', ['(src)/darwin-bootstrap/bundle-loader.c'], [], [], []), + ('exec', '(out)/unrestrict', ['(src)/darwin-bootstrap/unrestrict.c'], ls, [], []), + ('exec', '(out)/inject-into-launchd', ['(src)/darwin-bootstrap/inject-into-launchd.c'], ls, ['-framework', 'IOKit', '-framework', 'CoreFoundation'], []), + ('exec', '(out)/substituted', ['(src)/darwin-bootstrap/substituted.c', '(src)/darwin-bootstrap/substituted-plist-loader.m'], [], ['-lbsm', '-framework', 'Foundation', '-framework', 'CoreFoundation'], ['-fobjc-arc']), + ]: + mconfig.build_and_link_c_objs(emitter, settings.host_machine(), settings.specialize(override_ldflags=ldf+settings.host.ldflags, override_cflags=cf+settings.host.cflags), ty, out, ins, objs=objs) -emitter.add_command(settings, ['all'], all_deps, [], phony=True) +emitter.add_command(settings, ['all'], list(emitter.all_outs), [], phony=True) emitter.set_default_rule('all') mconfig.finish_and_emit() -- cgit v1.2.3 From 83d0dcdb986320041301425e4db1a016434a52b8 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 7 Jul 2015 16:08:26 -0400 Subject: ldid --- configure | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'configure') diff --git a/configure b/configure index 524fe0e..e8c5b15 100755 --- a/configure +++ b/configure @@ -17,6 +17,9 @@ settings.add_setting_option('enable_ios_bootstrap', '--enable-ios-bootstrap', 'd lambda: 'iphoneos' in str(settings.host_machine().toolchains()[0].sdk_opt.value), bool=True) +ldid_tool = mconfig.CLITool('ldid', ['ldid'], 'LDID', settings.host_machine(), settings.host_machine().toolchains()) +ldid_tool.optional() + asm_archs = [ ('x86_64', []), ('i386', []), @@ -48,6 +51,13 @@ mconfig.mark_safe_to_clean('(src)/generated/darwin-inject-asm.S', settings) if settings.enable_ios_bootstrap: mconfig.log('Will build iOS bootstrap.\n') + +# todo make overridable? +cc_argv = c.cc.argv() +if 'armv7' in cc_argv or 'arm64' in cc_argv: + settings.modify_link_commands = lambda cmds, env: cmds + [ldid_tool.argv() + ['-S'+settings.src+'/ent.plist', env['link_out']]] + settings.extra_link_deps = ['(src)/ent.plist'] + settings.host.debug_info = True settings.c_includes = ['(src)/lib', '(src)/substrate'] -- cgit v1.2.3 From 193c6ba8dc61e2a3797ce4431656aa8491e11aaf Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 7 Jul 2015 16:15:24 -0400 Subject: Werror, Makefile fix --- configure | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'configure') diff --git a/configure b/configure index e8c5b15..e50683d 100755 --- a/configure +++ b/configure @@ -16,6 +16,7 @@ settings.add_setting_option('enable_tests', '--enable-tests', 'tests!', False, b settings.add_setting_option('enable_ios_bootstrap', '--enable-ios-bootstrap', 'default: true if you pass --xcode-sdk=iphoneos', lambda: 'iphoneos' in str(settings.host_machine().toolchains()[0].sdk_opt.value), bool=True) +settings.add_setting_option('enable_werror', '--enable-werror', '', False, bool=True) ldid_tool = mconfig.CLITool('ldid', ['ldid'], 'LDID', settings.host_machine(), settings.host_machine().toolchains()) ldid_tool.optional() @@ -51,6 +52,9 @@ mconfig.mark_safe_to_clean('(src)/generated/darwin-inject-asm.S', settings) if settings.enable_ios_bootstrap: mconfig.log('Will build iOS bootstrap.\n') +if settings.enable_werror: + for mach in machs + [settings.host_machine()]: + settings[mach.name].cflags = ['-Werror'] + settings[mach.name].cflags # todo make overridable? cc_argv = c.cc.argv() -- cgit v1.2.3