Mercurial > hg > Members > aka > jupyter_CbC_kernel
comparison jupyter_c_kernel/kernel.py @ 52:0ef931211f77
Added cflags and ldflags magics
author | Ben Spoor <ben.spoor@altran.com> |
---|---|
date | Wed, 12 Apr 2017 15:32:07 +0000 |
parents | a98647258349 |
children | 7857f8eea835 |
comparison
equal
deleted
inserted
replaced
51:9357c3067f20 | 52:0ef931211f77 |
---|---|
109 def create_jupyter_subprocess(self, cmd): | 109 def create_jupyter_subprocess(self, cmd): |
110 return RealTimeSubprocess(cmd, | 110 return RealTimeSubprocess(cmd, |
111 lambda contents: self._write_to_stdout(contents.decode()), | 111 lambda contents: self._write_to_stdout(contents.decode()), |
112 lambda contents: self._write_to_stderr(contents.decode())) | 112 lambda contents: self._write_to_stderr(contents.decode())) |
113 | 113 |
114 def compile_with_gcc(self, source_filename, binary_filename): | 114 def compile_with_gcc(self, source_filename, binary_filename, cflags=None, ldflags=None): |
115 args = ['gcc', source_filename, '-std=c11', '-fPIC', '-shared', '-rdynamic', '-o', binary_filename] | 115 cflags = ['-std=c11', '-fPIC', '-shared', '-rdynamic'] + cflags |
116 args = ['gcc', source_filename] + cflags + ['-o', binary_filename] + ldflags | |
116 return self.create_jupyter_subprocess(args) | 117 return self.create_jupyter_subprocess(args) |
118 | |
119 def _filter_magics(self, code): | |
120 | |
121 magics = {'cflags': [], 'ldflags': []} | |
122 | |
123 for line in code.splitlines(): | |
124 if line.startswith('//%'): | |
125 key, value = line[3:].split(":", 2) | |
126 key = key.strip().lower() | |
127 | |
128 if key in ['ldflags', 'cflags']: | |
129 for flag in value.split(): | |
130 magics[key] += [flag] | |
131 | |
132 return magics | |
117 | 133 |
118 def do_execute(self, code, silent, store_history=True, | 134 def do_execute(self, code, silent, store_history=True, |
119 user_expressions=None, allow_stdin=False): | 135 user_expressions=None, allow_stdin=False): |
136 | |
137 magics = self._filter_magics(code) | |
138 | |
120 with self.new_temp_file(suffix='.c') as source_file: | 139 with self.new_temp_file(suffix='.c') as source_file: |
121 source_file.write(code) | 140 source_file.write(code) |
122 source_file.flush() | 141 source_file.flush() |
123 with self.new_temp_file(suffix='.out') as binary_file: | 142 with self.new_temp_file(suffix='.out') as binary_file: |
124 p = self.compile_with_gcc(source_file.name, binary_file.name) | 143 p = self.compile_with_gcc(source_file.name, binary_file.name, magics['cflags'], magics['ldflags']) |
125 while p.poll() is None: | 144 while p.poll() is None: |
126 p.write_contents() | 145 p.write_contents() |
127 p.write_contents() | 146 p.write_contents() |
128 if p.returncode != 0: # Compilation failed | 147 if p.returncode != 0: # Compilation failed |
129 self._write_to_stderr( | 148 self._write_to_stderr( |