Skip to content

Commit 9297e01

Browse files
committed
fix: better organization of macros and some code improvements
1 parent d8d0443 commit 9297e01

File tree

1 file changed

+84
-76
lines changed

1 file changed

+84
-76
lines changed

src_build/make.c

Lines changed: 84 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919
#include "../src/carbon_crypto.c"
2020
#include "../src/carbon_hashmap.c"
2121

22-
#define HDRFILE "carbon.h"
23-
#define SRCDIR "src"
24-
#define TESTDIR "src_test"
25-
#define TESTBIN "./" TESTDIR "/test"
26-
#define WORKDIR "carbon-" CARBON_VERSION_RAW "-" CARBON_TARGET_OS "-" CARBON_CPU_ARCH
22+
#define HDR_FILE "carbon.h"
23+
#define HDR_FILE_TPL HDR_FILE ".in"
24+
#define LICENSE_FILE "LICENSE"
25+
#define SRC_DIR "src"
26+
#define TEST_DIR "src_test"
27+
#define TEST_BIN "./" TEST_DIR "/test"
28+
#define EXAMPLES_DIR "examples"
29+
#define BUILD_DIR "carbon-" CARBON_VERSION_RAW "-" CARBON_TARGET_OS "-" CARBON_CPU_ARCH
2730

2831
#define C_STD "-std=c11"
2932
#define CXX_STD "-std=c++20"
@@ -159,71 +162,74 @@ static void bootstrap(char * const *host_argv, u8 force) {
159162
}
160163

161164
static void clean(void) {
162-
rm_dash_r(HDRFILE);
163-
rm_dash_r(TESTBIN);
164-
rm_dash_r(TESTBIN ".exe");
165-
rm_dash_r(TESTDIR "/*.o");
166-
rm_dash_r("examples/*.exe");
167-
rm_dash_r("examples/*.bin");
168-
rm_dash_r("examples/*.bin.old");
169-
rm_dash_r("examples/*.png");
170-
rm_dash_r("examples/*.skap*");
171-
rm_dash_r("examples/*.dSYM");
172-
rm_dash_r(WORKDIR);
173-
rm_dash_r(WORKDIR ".tgz");
165+
rm_dash_r(HDR_FILE);
166+
rm_dash_r(TEST_BIN);
167+
rm_dash_r(TEST_BIN ".exe");
168+
rm_dash_r(TEST_DIR "/*.o");
169+
rm_dash_r(EXAMPLES_DIR "/*.exe");
170+
rm_dash_r(EXAMPLES_DIR "/*.bin");
171+
rm_dash_r(EXAMPLES_DIR "/*.bin.old");
172+
rm_dash_r(EXAMPLES_DIR "/*.png");
173+
rm_dash_r(EXAMPLES_DIR "/*.skap*");
174+
rm_dash_r(EXAMPLES_DIR "/*.inl");
175+
rm_dash_r(EXAMPLES_DIR "/*.dSYM");
176+
rm_dash_r(BUILD_DIR);
177+
rm_dash_r(BUILD_DIR ".tgz");
174178
}
175179

176180
static void hdrgen(void) {
177-
carbon_println(" GEN " HDRFILE);
181+
carbon_println(" GEN " HDR_FILE);
178182
CBN_StrBuilder hdr = {0};
179-
CBN_ASSERT(carbon_fs_read_entire_file(&hdr, HDRFILE ".in"));
183+
CBN_ASSERT(carbon_fs_read_entire_file(&hdr, HDR_FILE_TPL));
180184
CBN_StrList hdrs = carbon_strlist_create(true);
181185
CBN_StrBuilder inc = {0};
182-
CBN_ASSERT(carbon_fs_read_entire_file(&inc, SRCDIR "/carbon.inc"));
186+
CBN_ASSERT(carbon_fs_read_entire_file(&inc, SRC_DIR "/carbon.inc"));
183187
CBN_StrView inc_sv = carbon_strview_from_strbuilder(&inc);
184188
while (inc_sv.size) {
185189
CBN_StrView line = carbon_strview_chop(&inc_sv, '\n');
186190
if (!carbon_strview_starts_with(line, carbon_strview_from_cstr("#include")) ||
187-
carbon_strview_are_equal(line, carbon_strview_from_cstr("#include \"../" HDRFILE ".in\""))) continue;
191+
carbon_strview_are_equal(line, carbon_strview_from_cstr("#include \"../" HDR_FILE_TPL "\""))) continue;
188192
char *line_str = carbon_strview_to_cstr(line);
189193
carbon_string_strip_substr(line_str, "#include \"");
190194
carbon_string_strip_substr(line_str, "\"");
191-
carbon_strlist_push(&hdrs, carbon_string_fmt(SRCDIR "/%s", line_str));
195+
carbon_strlist_push(&hdrs, carbon_string_fmt(SRC_DIR "/%s", line_str));
192196
}
193197
carbon_strlist_foreach(hdrs) {
194198
carbon_strbuilder_add_cstr(&hdr, "\n");
195199
CBN_ASSERT(carbon_fs_read_entire_file(&hdr, carbon_strview_to_cstr(it.sv)));
196200
}
197201
carbon_strbuilder_add_cstr(&hdr, "\n");
198-
CBN_ASSERT(carbon_fs_read_entire_file(&hdr, SRCDIR "/carbon_aliases.h"));
199-
FILE *hdr_fd = fopen(HDRFILE, "w");
200-
fwrite(hdr.items, hdr.size, 1, hdr_fd);
201-
fclose(hdr_fd);
202+
CBN_ASSERT(carbon_fs_read_entire_file(&hdr, SRC_DIR "/carbon_aliases.h"));
203+
{// TODO: replace this with smth like `carbon_strbuilder_save_to_file(hdr, HDR_FILE);`.
204+
FILE *fd = fopen(HDR_FILE, "w");
205+
fwrite(hdr.items, hdr.size, 1, fd);
206+
fclose(fd);
207+
}
202208
carbon_strlist_destroy(&hdrs);
203209
carbon_strbuilder_free(&hdr);
204210
}
205211

206212
static void build_compile_c_files(void) {
207213
CBN_StrBuilder cmd = {0};
208-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(SRCDIR "/carbon_*.c");
214+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(SRC_DIR "/carbon_*.c");
209215
carbon_fs_pattern_match_foreach(files) {
210216
carbon_println(" CC %s", it.f);
211217
carbon_strbuilder_add_cstr(&cmd, CARBON_C_COMPILER " -I . " C_STD " " WARNS " -fPIC " OPTIMIZATIONS);
212-
carbon_string_strip_substr(it.f, SRCDIR "/");
213-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(" -c " SRCDIR "/%s -o " WORKDIR "/%s.o", it.f, it.f));
218+
carbon_string_strip_substr(it.f, SRC_DIR "/");
219+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(" -c " SRC_DIR "/%s -o " BUILD_DIR "/%s.o", it.f, it.f));
214220
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
215221
carbon_strbuilder_free(&cmd);
216222
}
217223
}
218224

219225
static void build_compile_cxx_files(void) {
220226
CBN_StrBuilder cmd = {0};
221-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(SRCDIR "/carbon_*.cc");
227+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(SRC_DIR "/carbon_*.cc");
222228
carbon_fs_pattern_match_foreach(files) {
223229
carbon_println(" CXX %s", it.f);
224230
carbon_strbuilder_add_cstr(&cmd, CARBON_CXX_COMPILER " -I . " CXX_STD " " WARNS " -fPIC " OPTIMIZATIONS);
225-
carbon_string_strip_substr(it.f, SRCDIR "/");
226-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(" -c " SRCDIR "/%s -o " WORKDIR "/%s.o", it.f, it.f));
231+
carbon_string_strip_substr(it.f, SRC_DIR "/");
232+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(" -c " SRC_DIR "/%s -o " BUILD_DIR "/%s.o", it.f, it.f));
227233
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
228234
carbon_strbuilder_free(&cmd);
229235
}
@@ -232,13 +238,13 @@ static void build_compile_cxx_files(void) {
232238
static void build_static_lib(void) {
233239
carbon_println(" AR libcarbon.a");
234240
#ifndef _WIN32
235-
call_cmd("ar -rcs " WORKDIR "/libcarbon.a " WORKDIR "/*.o");
241+
call_cmd("ar -rcs " BUILD_DIR "/libcarbon.a " BUILD_DIR "/*.o");
236242
#else
237243
CBN_StrBuilder cmd = {0};
238-
carbon_strbuilder_add_cstr(&cmd, "ar -rcs " WORKDIR "/libcarbon.a ");
239-
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(WORKDIR "/*.o");
244+
carbon_strbuilder_add_cstr(&cmd, "ar -rcs " BUILD_DIR "/libcarbon.a ");
245+
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(BUILD_DIR "/*.o");
240246
carbon_fs_pattern_match_foreach(o_files) {
241-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(WORKDIR "/%s ", it.f));
247+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(BUILD_DIR "/%s ", it.f));
242248
}
243249
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
244250
carbon_strbuilder_free(&cmd);
@@ -250,72 +256,72 @@ static void build_shared_lib(void) {
250256
carbon_println(" LD " SHARED_LIB_FILE);
251257
carbon_strbuilder_add_cstr(&cmd, CARBON_CXX_COMPILER " " OPTIMIZATIONS);
252258
#ifndef _WIN32
253-
carbon_strbuilder_add_cstr(&cmd, WORKDIR "/*.o -shared ");
259+
carbon_strbuilder_add_cstr(&cmd, BUILD_DIR "/*.o -shared ");
254260
#else
255-
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(WORKDIR "/*.o");
261+
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(BUILD_DIR "/*.o");
256262
carbon_fs_pattern_match_foreach(o_files) {
257-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(WORKDIR "/%s ", it.f));
263+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(BUILD_DIR "/%s ", it.f));
258264
}
259265
carbon_strbuilder_add_cstr(&cmd, "-shared ");
260266
#endif
261267
carbon_strbuilder_add_cstr(&cmd, LIBS);
262-
carbon_strbuilder_add_cstr(&cmd, "-o " WORKDIR "/" SHARED_LIB_FILE);
268+
carbon_strbuilder_add_cstr(&cmd, "-o " BUILD_DIR "/" SHARED_LIB_FILE);
263269
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
264270
carbon_strbuilder_free(&cmd);
265271
}
266272

267273
static void build(void) {
268274
CBN_INFO("Building...");
269-
carbon_println(" MKDIR " WORKDIR);
270-
if (!carbon_fs_create_directory(WORKDIR)) CARBON_UNREACHABLE;
275+
carbon_println(" MKDIR " BUILD_DIR);
276+
if (!carbon_fs_create_directory(BUILD_DIR)) CARBON_UNREACHABLE;
271277
build_compile_c_files();
272278
build_compile_cxx_files();
273279
build_static_lib();
274280
build_shared_lib();
275281
#ifndef _WIN32
276282
// TODO: make this work on Windows (MinGW)...
277-
rm_dash_r(WORKDIR "/*.o");
283+
rm_dash_r(BUILD_DIR "/*.o");
278284
#endif
279285
}
280286

281287
static void test_compile_c_files(void) {
282288
CBN_StrBuilder cmd = {0};
283-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(TESTDIR "/*.c");
289+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(TEST_DIR "/*.c");
284290
carbon_fs_pattern_match_foreach(files) {
285291
carbon_println(" CC %s", it.f);
286292
carbon_strbuilder_add_cstr(&cmd, CARBON_C_COMPILER " -I . " C_STD " " WARNS " -fPIE " OPTIMIZATIONS);
287-
carbon_string_strip_substr(it.f, TESTDIR "/");
288-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-c " TESTDIR "/%s -o " TESTDIR "/%s.o", it.f, it.f));
293+
carbon_string_strip_substr(it.f, TEST_DIR "/");
294+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-c " TEST_DIR "/%s -o " TEST_DIR "/%s.o", it.f, it.f));
289295
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
290296
carbon_strbuilder_free(&cmd);
291297
}
292298
}
293299

294300
static void test_compile_cxx_files(void) {
295301
CBN_StrBuilder cmd = {0};
296-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(TESTDIR "/*.cc");
302+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(TEST_DIR "/*.cc");
297303
carbon_fs_pattern_match_foreach(files) {
298304
carbon_println(" CXX %s", it.f);
299305
carbon_strbuilder_add_cstr(&cmd, CARBON_CXX_COMPILER " -I . " CXX_STD " " WARNS " -fPIE " OPTIMIZATIONS);
300-
carbon_string_strip_substr(it.f, TESTDIR "/");
301-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-c " TESTDIR "/%s -o " TESTDIR "/%s.o", it.f, it.f));
306+
carbon_string_strip_substr(it.f, TEST_DIR "/");
307+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-c " TEST_DIR "/%s -o " TEST_DIR "/%s.o", it.f, it.f));
302308
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
303309
carbon_strbuilder_free(&cmd);
304310
}
305311
}
306312

307313
static void test_link(void) {
308314
CBN_StrBuilder cmd = {0};
309-
carbon_println(" LD " TESTBIN);
315+
carbon_println(" LD " TEST_BIN);
310316
carbon_strbuilder_add_cstr(&cmd, CARBON_CXX_COMPILER " " OPTIMIZATIONS);
311317
#ifdef _WIN32
312-
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(TESTDIR "/*.o");
318+
CBN_PatternMatchedFiles o_files = carbon_fs_pattern_match(TEST_DIR "/*.o");
313319
carbon_fs_pattern_match_foreach(o_files) {
314-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(TESTDIR "/%s ", it.f));
320+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt(TEST_DIR "/%s ", it.f));
315321
}
316-
carbon_strbuilder_add_cstr(&cmd, WORKDIR "/libcarbon.a -static -o " TESTBIN);
322+
carbon_strbuilder_add_cstr(&cmd, BUILD_DIR "/libcarbon.a -static -o " TEST_BIN);
317323
#else
318-
carbon_strbuilder_add_cstr(&cmd, TESTDIR "/*.o " WORKDIR "/libcarbon.a -o " TESTBIN);
324+
carbon_strbuilder_add_cstr(&cmd, TEST_DIR "/*.o " BUILD_DIR "/libcarbon.a -o " TEST_BIN);
319325
#endif
320326
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
321327
carbon_strbuilder_free(&cmd);
@@ -328,27 +334,26 @@ static void test(void) {
328334
test_link();
329335
#ifndef _WIN32
330336
// TODO: make this work on Windows (MinGW)...
331-
rm_dash_r(TESTDIR "/*.o");
337+
rm_dash_r(TEST_DIR "/*.o");
332338
#endif
333-
carbon_println("+ " TESTBIN " -n");
334-
call_cmd(TESTBIN " -n");
339+
carbon_println("+ " TEST_BIN " -n");
340+
call_cmd(TEST_BIN " -n");
335341
}
336342

337343
static void examples_c_files(void) {
338344
CBN_StrBuilder cmd = {0};
339-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match("examples/*.c");
345+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(EXAMPLES_DIR "/*.c");
340346
carbon_fs_pattern_match_foreach(files) {
341347
carbon_println(" CCLD %s", it.f);
342348
carbon_strbuilder_add_cstr(&cmd, CARBON_C_COMPILER " -I . " C_STD " " WARNS " -fPIE " OPTIMIZATIONS);
343-
carbon_string_strip_substr(it.f, "examples/");
344-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("examples/%s ", it.f));
349+
carbon_strbuilder_add_cstr(&cmd, it.f);
345350
carbon_string_strip_substr(it.f, ".c");
346-
carbon_strbuilder_add_cstr(&cmd, WORKDIR "/libcarbon.a ");
351+
carbon_strbuilder_add_cstr(&cmd, " " BUILD_DIR "/libcarbon.a ");
347352
carbon_strbuilder_add_cstr(&cmd, LIBS);
348353
#ifdef _WIN32
349-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o examples/%s", it.f));
354+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o %s", it.f));
350355
#else
351-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o examples/%s.bin", it.f));
356+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o %s.bin", it.f));
352357
#endif
353358
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
354359
carbon_strbuilder_free(&cmd);
@@ -357,19 +362,18 @@ static void examples_c_files(void) {
357362

358363
static void examples_cxx_files(void) {
359364
CBN_StrBuilder cmd = {0};
360-
CBN_PatternMatchedFiles files = carbon_fs_pattern_match("examples/*.cc");
365+
CBN_PatternMatchedFiles files = carbon_fs_pattern_match(EXAMPLES_DIR "/*.cc");
361366
carbon_fs_pattern_match_foreach(files) {
362367
carbon_println(" CXXLD %s", it.f);
363368
carbon_strbuilder_add_cstr(&cmd, CARBON_CXX_COMPILER " -I . " CXX_STD " " WARNS " -fPIE " OPTIMIZATIONS);
364-
carbon_string_strip_substr(it.f, "examples/");
365-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("examples/%s ", it.f));
369+
carbon_strbuilder_add_cstr(&cmd, it.f);
366370
carbon_string_strip_substr(it.f, ".cc");
367-
carbon_strbuilder_add_cstr(&cmd, WORKDIR "/libcarbon.a ");
371+
carbon_strbuilder_add_cstr(&cmd, " " BUILD_DIR "/libcarbon.a ");
368372
carbon_strbuilder_add_cstr(&cmd, LIBS);
369373
#ifdef _WIN32
370-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o examples/%s", it.f));
374+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o %s", it.f));
371375
#else
372-
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o examples/%s.bin", it.f));
376+
carbon_strbuilder_add_cstr(&cmd, carbon_string_fmt("-o %s.bin", it.f));
373377
#endif
374378
call_cmd(carbon_strview_to_cstr(carbon_strview_from_strbuilder(&cmd)));
375379
carbon_strbuilder_free(&cmd);
@@ -380,17 +384,21 @@ static void examples(void) {
380384
CBN_INFO("Building examples...");
381385
examples_c_files();
382386
examples_cxx_files();
383-
const char *pong_skap = "examples/pong.skap";
384-
CBN_INFO("Creating `%$`...", $(pong_skap));
385-
CBN_ASSERT(carbon_skap_create("examples/pong.d/assets.txt", pong_skap));
387+
{// Pong AssetPack
388+
const char *skap = EXAMPLES_DIR "/pong.skap";
389+
const char *decl = EXAMPLES_DIR "/pong.d/assets.txt";
390+
CBN_INFO("Creating `%$`...", $(skap));
391+
CBN_ASSERT(carbon_skap_create(decl, skap));
392+
}
386393
}
387394

388395
static void package(void) {
389396
CBN_INFO("Packaging...");
390-
cp_dash_r("COPYING " HDRFILE, WORKDIR);
391-
carbon_println(" GZIP " WORKDIR ".tgz");
392-
call_cmd("tar -zcf " WORKDIR ".tgz " WORKDIR);
393-
CBN_INFO(WORKDIR ".tgz is ready");
397+
cp_dash_r(HDR_FILE, BUILD_DIR);
398+
cp_dash_r(LICENSE_FILE, BUILD_DIR);
399+
carbon_println(" GZIP " BUILD_DIR ".tgz");
400+
call_cmd("tar -zcf " BUILD_DIR ".tgz " BUILD_DIR);
401+
CBN_INFO(BUILD_DIR ".tgz is ready");
394402
}
395403

396404
int main(int argc, char **argv) {

0 commit comments

Comments
 (0)