From 92fdb5e0c59e0640afa02017f17f0f04b5e4d847 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 20:45:38 +0000 Subject: [PATCH 1/9] Add language aliases --- SConstruct | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 09c939af3..6915a5f70 100644 --- a/SConstruct +++ b/SConstruct @@ -10,6 +10,7 @@ To run the compilation for all implementations in one language, e.g. C, run the from pathlib import Path import os + rust_cargo_builder = Builder(action=['cargo build --bins --manifest-path $MANIFEST', Move('$TARGET$PROGSUFFIX', '$SOURCE_DIR/target/debug/main$PROGSUFFIX')]) @@ -23,6 +24,8 @@ env = Environment(ENV=os.environ, 'Go': go_builder}, tools=['gcc', 'gnulink', 'g++', 'gas', 'gfortran']) +Export('env') + env['CFLAGS'] = '-Wall -Wextra -Werror' env['CXXFLAGS'] = '-std=c++17' env['ASFLAGS'] = '--64' @@ -38,12 +41,14 @@ languages = { 'fortran': 'f90', } +# Do not add new Builders here, add them to the BUILDERS argument in the call to Environment above env.C = env.Program env.CPlusPlus = env.Program env.X64 = env.Program env.Fortran = env.Program -Export('env') +for language in languages: + Alias(language, f'#/build/{language}') sconscripts = [] files_to_compile = {language: [] for language in languages} From 9993efeb01e4f45ee8ce1d0f34a296942b2dcae6 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 21:01:12 +0000 Subject: [PATCH 2/9] Refactor SConsctruct --- SConstruct | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SConstruct b/SConstruct index 6915a5f70..44d23b9c2 100644 --- a/SConstruct +++ b/SConstruct @@ -8,6 +8,7 @@ Currently, the aim is to provide a way to compile or copy the implementation fil To run the compilation for all implementations in one language, e.g. C, run the command `scons build/c`, and the resulting executables will be available in the `build/c` directory, each in their respective algorithm directory, containing the executable.""" from pathlib import Path +from collections import namedtuple import os @@ -53,7 +54,10 @@ for language in languages: sconscripts = [] files_to_compile = {language: [] for language in languages} +FileInformation = namedtuple('FileInformation', ['path', 'chapter', 'language']) + for chapter_dir in Path.cwd().joinpath('contents').iterdir(): + print(chapter_dir) if (code_dir := (chapter_dir / 'code')).exists(): for path in code_dir.iterdir(): if path.stem in languages: @@ -62,6 +66,7 @@ for chapter_dir in Path.cwd().joinpath('contents').iterdir(): sconscripts.append(sconscript_path) SConscript(sconscript_path, exports='env') else: + #new_files = [FileInformation(path=path, chapter=chapter_dir. files_to_compile[path.stem].extend(path.glob(f'*.{languages[path.stem]}')) sconscript_dir_path = Path('sconscripts') From b72b38dd07cb3a543d75cd58d4ba180f968a7b00 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 21:03:24 +0000 Subject: [PATCH 3/9] Search for files recursively --- SConstruct | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/SConstruct b/SConstruct index 44d23b9c2..e9ba79f71 100644 --- a/SConstruct +++ b/SConstruct @@ -57,24 +57,27 @@ files_to_compile = {language: [] for language in languages} FileInformation = namedtuple('FileInformation', ['path', 'chapter', 'language']) for chapter_dir in Path.cwd().joinpath('contents').iterdir(): - print(chapter_dir) if (code_dir := (chapter_dir / 'code')).exists(): - for path in code_dir.iterdir(): - if path.stem in languages: + for language_dir in code_dir.iterdir(): + if (language := language_dir.stem) in languages: # Check for overriding sconscript - if (sconscript_path := path / 'SConscript').exists(): + if (sconscript_path := language_dir / 'SConscript').exists(): sconscripts.append(sconscript_path) SConscript(sconscript_path, exports='env') - else: - #new_files = [FileInformation(path=path, chapter=chapter_dir. - files_to_compile[path.stem].extend(path.glob(f'*.{languages[path.stem]}')) - -sconscript_dir_path = Path('sconscripts') + continue + + new_files = [FileInformation(path=file_path, + chapter=chapter_dir.name, + language=language) + for file_path in language_dir.glob(f'**/*.{languages[language]}') + ] + files_to_compile[language].extend(new_files) + +sconscript_dir_path = Path.cwd().joinpath('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, - 'language': language}) + SConscript(sconscript_path, exports = {'files_to_compile': files}) else: print(f'{language} file found at {files[0]}, but no sconscript file is present ') From a5526c31d158742e4468e595ce9c8a061e88b875 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 21:31:26 +0000 Subject: [PATCH 4/9] Handle nested chapter folders --- SConstruct | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/SConstruct b/SConstruct index e9ba79f71..eb8ace7cd 100644 --- a/SConstruct +++ b/SConstruct @@ -56,22 +56,25 @@ files_to_compile = {language: [] for language in languages} FileInformation = namedtuple('FileInformation', ['path', 'chapter', 'language']) -for chapter_dir in Path.cwd().joinpath('contents').iterdir(): - if (code_dir := (chapter_dir / 'code')).exists(): + +contents_path = Path.cwd().joinpath('contents') +for chapter_dir in contents_path.iterdir(): + for code_dir in chapter_dir.glob('**/code'): + # For nested chapters e.g. contents/convolutions/1d/ + extended_chapter_path = code_dir.relative_to(contents_path).parent + for language_dir in code_dir.iterdir(): if (language := language_dir.stem) in languages: - # Check for overriding sconscript - if (sconscript_path := language_dir / 'SConscript').exists(): - sconscripts.append(sconscript_path) - SConscript(sconscript_path, exports='env') - continue - new_files = [FileInformation(path=file_path, - chapter=chapter_dir.name, + chapter=extended_chapter_path, language=language) for file_path in language_dir.glob(f'**/*.{languages[language]}') ] - files_to_compile[language].extend(new_files) + # Check for overriding SConscript + if (sconscript_path := language_dir / 'SConscript').exists(): + SConscript(sconscript_path, exports={'files_to_compile': new_files}) + else: + files_to_compile[language].extend(new_files) sconscript_dir_path = Path.cwd().joinpath('sconscripts') for language, files in files_to_compile.items(): From 1a59003cab3bab4a9699516ccb51d54d7ae04343 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 22:27:52 +0000 Subject: [PATCH 5/9] Update C to use new build stuff --- SConstruct | 6 ++++-- sconscripts/c_SConscript | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/SConstruct b/SConstruct index eb8ace7cd..deedca9eb 100644 --- a/SConstruct +++ b/SConstruct @@ -34,14 +34,16 @@ env['ASFLAGS'] = '--64' # Add other languages here when you want to add language targets # Put 'name_of_language_directory' : 'file_extension' languages = { - 'c': 'c', + 'c': 'c', } + +''' 'cpp': 'cpp', 'asm-x64': 's', 'rust': 'rs', 'go': 'go', 'fortran': 'f90', } - +''' # Do not add new Builders here, add them to the BUILDERS argument in the call to Environment above env.C = env.Program env.CPlusPlus = env.Program diff --git a/sconscripts/c_SConscript b/sconscripts/c_SConscript index a0cbffd95..ae6398438 100644 --- a/sconscripts/c_SConscript +++ b/sconscripts/c_SConscript @@ -1,6 +1,9 @@ Import('files_to_compile env') from pathlib import Path -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - env.C(f'#/build/c/{chapter_name}', str(file)) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.C(build_target, str(file_info.path)) + # Gives error e.g. when running 'scons flood_fill' + # scons: *** [flood_fill] Source `build\c\flood_fill\flood_fill' not found, needed by target `flood_fill' + # env.Alias(str(file_info.chapter), build_target) \ No newline at end of file From 60c44ac055a6dc4f81ab044d6ad82b190280e800 Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 22:47:03 +0000 Subject: [PATCH 6/9] Update all languages to use new build stuff --- SConstruct | 6 ++---- sconscripts/asm-x64_SConscript | 9 ++++----- sconscripts/c_SConscript | 4 ++-- sconscripts/cpp_SConscript | 7 +++---- sconscripts/fortran_SConscript | 7 +++---- sconscripts/go_SConscript | 7 +++---- sconscripts/rust_SConscript | 21 ++++++++++----------- 7 files changed, 27 insertions(+), 34 deletions(-) diff --git a/SConstruct b/SConstruct index deedca9eb..cf6a18c08 100644 --- a/SConstruct +++ b/SConstruct @@ -34,16 +34,14 @@ env['ASFLAGS'] = '--64' # Add other languages here when you want to add language targets # Put 'name_of_language_directory' : 'file_extension' languages = { - 'c': 'c', } - -''' + 'c': 'c', 'cpp': 'cpp', 'asm-x64': 's', 'rust': 'rs', 'go': 'go', 'fortran': 'f90', } -''' + # Do not add new Builders here, add them to the BUILDERS argument in the call to Environment above env.C = env.Program env.CPlusPlus = env.Program diff --git a/sconscripts/asm-x64_SConscript b/sconscripts/asm-x64_SConscript index caabf226f..db1489a51 100644 --- a/sconscripts/asm-x64_SConscript +++ b/sconscripts/asm-x64_SConscript @@ -1,6 +1,5 @@ -Import('files_to_compile language env') -from pathlib import Path +Import('files_to_compile env') -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - env.X64(f'#/build/{language}/{chapter_name}', str(file), LINKFLAGS='-no-pie') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.X64(build_target, str(file_info.path), LINKFLAGS='-no-pie') diff --git a/sconscripts/c_SConscript b/sconscripts/c_SConscript index ae6398438..ced3fa45f 100644 --- a/sconscripts/c_SConscript +++ b/sconscripts/c_SConscript @@ -1,9 +1,9 @@ Import('files_to_compile env') -from pathlib import Path for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.C(build_target, str(file_info.path)) # Gives error e.g. when running 'scons flood_fill' # scons: *** [flood_fill] Source `build\c\flood_fill\flood_fill' not found, needed by target `flood_fill' - # env.Alias(str(file_info.chapter), build_target) \ No newline at end of file + env.Alias(str(file_info.chapter), build_target) \ No newline at end of file diff --git a/sconscripts/cpp_SConscript b/sconscripts/cpp_SConscript index a30e08652..4f23019b8 100644 --- a/sconscripts/cpp_SConscript +++ b/sconscripts/cpp_SConscript @@ -1,6 +1,5 @@ Import('files_to_compile env') -from pathlib import Path -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - env.CPlusPlus(f'#/build/cpp/{chapter_name}', str(file)) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.CPlusPlus(build_target, str(file_info.path)) diff --git a/sconscripts/fortran_SConscript b/sconscripts/fortran_SConscript index df3e7fc27..b215b563e 100644 --- a/sconscripts/fortran_SConscript +++ b/sconscripts/fortran_SConscript @@ -1,6 +1,5 @@ Import('files_to_compile env') -from pathlib import Path -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - env.Fortran(f'#/build/fortran/{chapter_name}', str(file)) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.Fortran(build_target, str(file_info.path)) diff --git a/sconscripts/go_SConscript b/sconscripts/go_SConscript index 795be1d53..710052eb1 100644 --- a/sconscripts/go_SConscript +++ b/sconscripts/go_SConscript @@ -1,6 +1,5 @@ Import('files_to_compile env') -from pathlib import Path -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - env.Go(f'#/build/go/{chapter_name}', str(file)) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + env.Go(build_target, str(file_info.path)) diff --git a/sconscripts/rust_SConscript b/sconscripts/rust_SConscript index b9cf669c7..9ce3724e8 100644 --- a/sconscripts/rust_SConscript +++ b/sconscripts/rust_SConscript @@ -1,14 +1,13 @@ Import('files_to_compile env') -from pathlib import Path -for file in files_to_compile: - chapter_name = file.parent.parent.parent.stem - if (file.parent / 'Cargo.toml').exists(): - env.cargo(target=f'#/build/rust/{chapter_name}', - source=str(file), - MANIFEST=str(file.parent / 'Cargo.toml'), - SOURCE_DIR=str(file.parent)) - env.Clean('rust', str(file.parent / 'target')) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + if (file_info.path.parent / 'Cargo.toml').exists(): + env.cargo(target=build_target, + source=str(file_info.path), + MANIFEST=str(file_info.path.parent / 'Cargo.toml'), + SOURCE_DIR=str(file_info.path.parent)) + env.Clean('rust', str(file_info.path.parent / 'target')) else: - env.rustc(f'#/build/rust/{chapter_name}', str(file)) - env.Clean('rust', f'#/build/rust/{chapter_name}.pdb') + env.rustc(build_target, str(file_info.path)) + env.Clean('rust', f'{build_target}.pdb') From 7ac66c72e73dfcf20e7fc74191f01d328f014eab Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 23:17:37 +0000 Subject: [PATCH 7/9] Fix aliasing for chapter names --- sconscripts/asm-x64_SConscript | 3 ++- sconscripts/c_SConscript | 7 ++----- sconscripts/cpp_SConscript | 3 ++- sconscripts/fortran_SConscript | 3 ++- sconscripts/go_SConscript | 3 ++- sconscripts/rust_SConscript | 12 +++++++----- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/sconscripts/asm-x64_SConscript b/sconscripts/asm-x64_SConscript index db1489a51..ba90ee330 100644 --- a/sconscripts/asm-x64_SConscript +++ b/sconscripts/asm-x64_SConscript @@ -2,4 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - env.X64(build_target, str(file_info.path), LINKFLAGS='-no-pie') + build_result = env.X64(build_target, str(file_info.path), LINKFLAGS='-no-pie') + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/sconscripts/c_SConscript b/sconscripts/c_SConscript index ced3fa45f..ebc6aeead 100644 --- a/sconscripts/c_SConscript +++ b/sconscripts/c_SConscript @@ -2,8 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - - env.C(build_target, str(file_info.path)) - # Gives error e.g. when running 'scons flood_fill' - # scons: *** [flood_fill] Source `build\c\flood_fill\flood_fill' not found, needed by target `flood_fill' - env.Alias(str(file_info.chapter), build_target) \ No newline at end of file + build_result = env.C(build_target, str(file_info.path)) + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/sconscripts/cpp_SConscript b/sconscripts/cpp_SConscript index 4f23019b8..f1ae9f974 100644 --- a/sconscripts/cpp_SConscript +++ b/sconscripts/cpp_SConscript @@ -2,4 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - env.CPlusPlus(build_target, str(file_info.path)) + build_result = env.CPlusPlus(build_target, str(file_info.path)) + env.Alias(str(file_info.chapter), build_result) diff --git a/sconscripts/fortran_SConscript b/sconscripts/fortran_SConscript index b215b563e..ab85e9f06 100644 --- a/sconscripts/fortran_SConscript +++ b/sconscripts/fortran_SConscript @@ -2,4 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - env.Fortran(build_target, str(file_info.path)) + build_result = env.Fortran(build_target, str(file_info.path)) + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/sconscripts/go_SConscript b/sconscripts/go_SConscript index 710052eb1..d521574a9 100644 --- a/sconscripts/go_SConscript +++ b/sconscripts/go_SConscript @@ -2,4 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - env.Go(build_target, str(file_info.path)) + build_result = env.Go(build_target, str(file_info.path)) + env.Alias(str(file_info.chapter), build_result) diff --git a/sconscripts/rust_SConscript b/sconscripts/rust_SConscript index 9ce3724e8..d93b9d680 100644 --- a/sconscripts/rust_SConscript +++ b/sconscripts/rust_SConscript @@ -3,11 +3,13 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' if (file_info.path.parent / 'Cargo.toml').exists(): - env.cargo(target=build_target, - source=str(file_info.path), - MANIFEST=str(file_info.path.parent / 'Cargo.toml'), - SOURCE_DIR=str(file_info.path.parent)) + build_result = env.cargo(target=build_target, + source=str(file_info.path), + MANIFEST=str(file_info.path.parent / 'Cargo.toml'), + SOURCE_DIR=str(file_info.path.parent)) env.Clean('rust', str(file_info.path.parent / 'target')) else: - env.rustc(build_target, str(file_info.path)) + build_result = env.rustc(build_target, str(file_info.path)) env.Clean('rust', f'{build_target}.pdb') + + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file From 05bf489b3f24f6565c04800b3bc6f50ed562cc9d Mon Sep 17 00:00:00 2001 From: PeanutbutterWarrior <50717143+PeanutbutterWarrior@users.noreply.github.com> Date: Wed, 1 Dec 2021 23:28:31 +0000 Subject: [PATCH 8/9] Update overriding SConscript files --- contents/approximate_counting/code/c/SConscript | 10 +++++----- contents/cooley_tukey/code/asm-x64/SConscript | 10 +++++----- contents/cooley_tukey/code/c/SConscript | 10 +++++----- contents/euclidean_algorithm/code/fortran/SConscript | 6 ------ contents/forward_euler_method/code/asm-x64/SConscript | 10 +++++----- contents/forward_euler_method/code/c/SConscript | 10 +++++----- contents/graham_scan/code/c/SConscript | 10 +++++----- contents/split-operator_method/code/c/SConscript | 10 +++++----- contents/split-operator_method/code/cpp/SConscript | 10 +++++----- 9 files changed, 40 insertions(+), 46 deletions(-) delete mode 100644 contents/euclidean_algorithm/code/fortran/SConscript diff --git a/contents/approximate_counting/code/c/SConscript b/contents/approximate_counting/code/c/SConscript index 34a951e7f..984e0eb11 100644 --- a/contents/approximate_counting/code/c/SConscript +++ b/contents/approximate_counting/code/c/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.C(build_target, str(file_info.path), LIBS='m') + env.Alias(str(file_info.chapter), build_result) diff --git a/contents/cooley_tukey/code/asm-x64/SConscript b/contents/cooley_tukey/code/asm-x64/SConscript index 05360fe6c..2a10fbc14 100644 --- a/contents/cooley_tukey/code/asm-x64/SConscript +++ b/contents/cooley_tukey/code/asm-x64/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS=['m'], LINKFLAGS='-no-pie') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.X64(build_target, str(file_info.path), LIBS='m', LINKFLAGS='-no-pie') + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/cooley_tukey/code/c/SConscript b/contents/cooley_tukey/code/c/SConscript index 2cd13de37..bb40f4a85 100644 --- a/contents/cooley_tukey/code/c/SConscript +++ b/contents/cooley_tukey/code/c/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.C(build_target, str(file_info.path), LIBS=['m', 'fftw3']) + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/euclidean_algorithm/code/fortran/SConscript b/contents/euclidean_algorithm/code/fortran/SConscript deleted file mode 100644 index 8146feee9..000000000 --- a/contents/euclidean_algorithm/code/fortran/SConscript +++ /dev/null @@ -1,6 +0,0 @@ -Import('*') -from pathlib import Path - -dirname = Path.cwd().parents[1].stem - -env.Fortran(f'#/build/fortran/{dirname}', 'euclidean.f90') diff --git a/contents/forward_euler_method/code/asm-x64/SConscript b/contents/forward_euler_method/code/asm-x64/SConscript index 9322fd10c..2a10fbc14 100644 --- a/contents/forward_euler_method/code/asm-x64/SConscript +++ b/contents/forward_euler_method/code/asm-x64/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.X64(f'#/build/asm-x64/{dirname}', Glob('*.s'), LIBS='m', LINKFLAGS='-no-pie') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.X64(build_target, str(file_info.path), LIBS='m', LINKFLAGS='-no-pie') + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/forward_euler_method/code/c/SConscript b/contents/forward_euler_method/code/c/SConscript index 34a951e7f..b81220a0e 100644 --- a/contents/forward_euler_method/code/c/SConscript +++ b/contents/forward_euler_method/code/c/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.C(build_target, str(file_info.path), LIBS='m') + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/graham_scan/code/c/SConscript b/contents/graham_scan/code/c/SConscript index 34a951e7f..ebc6aeead 100644 --- a/contents/graham_scan/code/c/SConscript +++ b/contents/graham_scan/code/c/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m') +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.C(build_target, str(file_info.path)) + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/split-operator_method/code/c/SConscript b/contents/split-operator_method/code/c/SConscript index 2cd13de37..bb40f4a85 100644 --- a/contents/split-operator_method/code/c/SConscript +++ b/contents/split-operator_method/code/c/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.C(build_target, str(file_info.path), LIBS=['m', 'fftw3']) + env.Alias(str(file_info.chapter), build_result) \ No newline at end of file diff --git a/contents/split-operator_method/code/cpp/SConscript b/contents/split-operator_method/code/cpp/SConscript index a25ed8c91..f9ec1b545 100644 --- a/contents/split-operator_method/code/cpp/SConscript +++ b/contents/split-operator_method/code/cpp/SConscript @@ -1,6 +1,6 @@ -Import('*') -from pathlib import Path +Import('files_to_compile env') -dirname = Path.cwd().parents[1].stem - -env.CPlusPlus(f'#/build/cpp/{dirname}', Glob('*.cpp'), LIBS=['m', 'fftw3']) +for file_info in files_to_compile: + build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' + build_result = env.CPlusPlus(build_target, str(file_info.path), LIBS=['m', 'fftw3']) + env.Alias(str(file_info.chapter), build_result) From 28cb6f91ad430d567a48e825956ed148286ec5c8 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Thu, 2 Dec 2021 21:19:33 +0100 Subject: [PATCH 9/9] Fixed build failure on Graham scan --- contents/graham_scan/code/c/SConscript | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contents/graham_scan/code/c/SConscript b/contents/graham_scan/code/c/SConscript index ebc6aeead..c404efbd8 100644 --- a/contents/graham_scan/code/c/SConscript +++ b/contents/graham_scan/code/c/SConscript @@ -2,5 +2,5 @@ Import('files_to_compile env') for file_info in files_to_compile: build_target = f'#/build/{file_info.language}/{file_info.chapter}/{file_info.path.stem}' - build_result = env.C(build_target, str(file_info.path)) - env.Alias(str(file_info.chapter), build_result) \ No newline at end of file + build_result = env.C(build_target, str(file_info.path), LIBS='m') + env.Alias(str(file_info.chapter), build_result)