From 185a0de80f9cfaa41ec855c4a76e9436893c088b Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Mon, 22 Nov 2021 20:52:49 +0100 Subject: [PATCH 1/5] Added x64 assembly compilation --- SConstruct | 9 ++++++--- contents/cooley_tukey/code/asm-x64/SConscript | 6 ++++++ contents/forward_euler_method/code/asm-x64/SConscript | 6 ++++++ sconscripts/asm-x64_SConscript | 6 ++++++ 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 contents/cooley_tukey/code/asm-x64/SConscript create mode 100644 contents/forward_euler_method/code/asm-x64/SConscript create mode 100644 sconscripts/asm-x64_SConscript diff --git a/SConstruct b/SConstruct index c93744156..1d48334dd 100644 --- a/SConstruct +++ b/SConstruct @@ -13,18 +13,20 @@ import os env = Environment(ENV={'PATH': os.environ['PATH']}) env['CC'] = 'gcc' +env['AS'] = 'as' for tool in ['gcc','gnulink']: env.Tool(tool) env['CCFLAGS'] = '' env['CXXFLAGS'] = '-std=c++17' +env['LINKFLAGS'] = '-no-pie' # Add other languages here when you want to add language targets # Put 'name_of_language_directory' : 'file_extension' -languages = {'c': 'c', 'cpp': 'cpp'} +languages = {'c': 'c', 'cpp': 'cpp', 'asm-x64': 's'} env.C = env.Program env.CPlusPlus = env.Program - +env.X64 = env.Program Export('env') @@ -46,7 +48,8 @@ sconscript_dir_path = Path('sconscripts') for language, files in files_to_compile.items(): if files: if (sconscript_path := sconscript_dir_path / f"{language}_SConscript").exists(): - SConscript(sconscript_path, exports = {'files_to_compile': files}) + SConscript(sconscript_path, exports = {'files_to_compile': files, + 'language': language}) else: print(f'{language} file found at {files[0]}, but no sconscript file is present ') diff --git a/contents/cooley_tukey/code/asm-x64/SConscript b/contents/cooley_tukey/code/asm-x64/SConscript new file mode 100644 index 000000000..fdffb2f45 --- /dev/null +++ b/contents/cooley_tukey/code/asm-x64/SConscript @@ -0,0 +1,6 @@ +Import('*') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m']) diff --git a/contents/forward_euler_method/code/asm-x64/SConscript b/contents/forward_euler_method/code/asm-x64/SConscript new file mode 100644 index 000000000..8f9541f51 --- /dev/null +++ b/contents/forward_euler_method/code/asm-x64/SConscript @@ -0,0 +1,6 @@ +Import('*') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m') diff --git a/sconscripts/asm-x64_SConscript b/sconscripts/asm-x64_SConscript new file mode 100644 index 000000000..4ef8079d0 --- /dev/null +++ b/sconscripts/asm-x64_SConscript @@ -0,0 +1,6 @@ +Import('files_to_compile language env') +from pathlib import Path + +for file in files_to_compile: + chapter_name = file.parent.parent.parent.stem + env.X64(f'#/build/{language}/{chapter_name}', str(file)) From ea902ca49029ce34a37b774b1b3ccd91e06a7367 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Tue, 23 Nov 2021 00:12:46 +0100 Subject: [PATCH 2/5] Apply suggestions from code review Co-authored-by: Dimitri Belopopsky --- contents/cooley_tukey/code/asm-x64/SConscript | 2 +- contents/forward_euler_method/code/asm-x64/SConscript | 2 +- sconscripts/asm-x64_SConscript | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contents/cooley_tukey/code/asm-x64/SConscript b/contents/cooley_tukey/code/asm-x64/SConscript index fdffb2f45..ec0b27d54 100644 --- a/contents/cooley_tukey/code/asm-x64/SConscript +++ b/contents/cooley_tukey/code/asm-x64/SConscript @@ -3,4 +3,4 @@ from pathlib import Path dirname = Path.cwd().parents[1].stem -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m']) +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m'], parse_flags="-Wl,-no-pie") diff --git a/contents/forward_euler_method/code/asm-x64/SConscript b/contents/forward_euler_method/code/asm-x64/SConscript index 8f9541f51..ef15c0d19 100644 --- a/contents/forward_euler_method/code/asm-x64/SConscript +++ b/contents/forward_euler_method/code/asm-x64/SConscript @@ -3,4 +3,4 @@ from pathlib import Path dirname = Path.cwd().parents[1].stem -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m') +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m', parse_flags="-Wl,-no-pie") diff --git a/sconscripts/asm-x64_SConscript b/sconscripts/asm-x64_SConscript index 4ef8079d0..09d2ba624 100644 --- a/sconscripts/asm-x64_SConscript +++ b/sconscripts/asm-x64_SConscript @@ -3,4 +3,4 @@ from pathlib import Path for file in files_to_compile: chapter_name = file.parent.parent.parent.stem - env.X64(f'#/build/{language}/{chapter_name}', str(file)) + env.X64(f'#/build/{language}/{chapter_name}', str(file), parse_flags="-Wl,-no-pie") From 41498b6bce0441967167a0dbcc68dd38a3fd2ad4 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Tue, 23 Nov 2021 00:13:42 +0100 Subject: [PATCH 3/5] Actually remove main environment pollution See previous commit) --- SConstruct | 1 - 1 file changed, 1 deletion(-) diff --git a/SConstruct b/SConstruct index 1d48334dd..a2d2f143b 100644 --- a/SConstruct +++ b/SConstruct @@ -18,7 +18,6 @@ for tool in ['gcc','gnulink']: env.Tool(tool) env['CCFLAGS'] = '' env['CXXFLAGS'] = '-std=c++17' -env['LINKFLAGS'] = '-no-pie' # Add other languages here when you want to add language targets # Put 'name_of_language_directory' : 'file_extension' From 12350c54d08b8690924c08c2aff836bdbacd2afd Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sat, 27 Nov 2021 20:02:52 +0100 Subject: [PATCH 4/5] Simplified SConstruct tools and solved compilation issue 1. Using the `LINKFLAGS=''` instead of the `parse_flags` argument helped with a `-lgcc_s not found` error that prevented linking. 2. The simplification was to only use the necessary tools (not the default toolset). This should hopefully be clearer than the previous iterations. All the executables compile correctly in the container. TODO: check that compilation works on Windows. --- SConstruct | 6 ++---- contents/cooley_tukey/code/asm-x64/SConscript | 2 +- contents/forward_euler_method/code/asm-x64/SConscript | 2 +- sconscripts/asm-x64_SConscript | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/SConstruct b/SConstruct index a2d2f143b..34ecc641b 100644 --- a/SConstruct +++ b/SConstruct @@ -10,12 +10,10 @@ To run the compilation for all implementations in one language, e.g. C, run the from pathlib import Path import os -env = Environment(ENV={'PATH': os.environ['PATH']}) +env = Environment(ENV={'PATH': os.environ['PATH']}, + tools=['gcc', 'gnulink', 'g++']) -env['CC'] = 'gcc' env['AS'] = 'as' -for tool in ['gcc','gnulink']: - env.Tool(tool) env['CCFLAGS'] = '' env['CXXFLAGS'] = '-std=c++17' diff --git a/contents/cooley_tukey/code/asm-x64/SConscript b/contents/cooley_tukey/code/asm-x64/SConscript index ec0b27d54..05360fe6c 100644 --- a/contents/cooley_tukey/code/asm-x64/SConscript +++ b/contents/cooley_tukey/code/asm-x64/SConscript @@ -3,4 +3,4 @@ from pathlib import Path dirname = Path.cwd().parents[1].stem -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m'], parse_flags="-Wl,-no-pie") +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m'], LINKFLAGS='-no-pie') diff --git a/contents/forward_euler_method/code/asm-x64/SConscript b/contents/forward_euler_method/code/asm-x64/SConscript index ef15c0d19..9322fd10c 100644 --- a/contents/forward_euler_method/code/asm-x64/SConscript +++ b/contents/forward_euler_method/code/asm-x64/SConscript @@ -3,4 +3,4 @@ from pathlib import Path dirname = Path.cwd().parents[1].stem -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m', parse_flags="-Wl,-no-pie") +env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m', LINKFLAGS='-no-pie') diff --git a/sconscripts/asm-x64_SConscript b/sconscripts/asm-x64_SConscript index 09d2ba624..caabf226f 100644 --- a/sconscripts/asm-x64_SConscript +++ b/sconscripts/asm-x64_SConscript @@ -3,4 +3,4 @@ from pathlib import Path for file in files_to_compile: chapter_name = file.parent.parent.parent.stem - env.X64(f'#/build/{language}/{chapter_name}', str(file), parse_flags="-Wl,-no-pie") + env.X64(f'#/build/{language}/{chapter_name}', str(file), LINKFLAGS='-no-pie') From 1380d64ff8558b7b52825d5a16d6e342291531f2 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sat, 27 Nov 2021 21:12:05 +0100 Subject: [PATCH 5/5] Forgot to use the correct assembler --- SConstruct | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SConstruct b/SConstruct index 34ecc641b..93354e152 100644 --- a/SConstruct +++ b/SConstruct @@ -11,9 +11,10 @@ from pathlib import Path import os env = Environment(ENV={'PATH': os.environ['PATH']}, - tools=['gcc', 'gnulink', 'g++']) + tools=['gcc', 'gnulink', 'g++', 'gas']) + +env['ASFLAGS'] = '--64' -env['AS'] = 'as' env['CCFLAGS'] = '' env['CXXFLAGS'] = '-std=c++17'