| 345 | } |
| 346 | |
| 347 | static Result configureZLibFilC(const Parameters& parameters, Workspace& workspace) |
| 348 | { |
| 349 | ProcessEnvironment environment; |
| 350 | StringSpan sourceDirectory; |
| 351 | StringSpan outputDirectory; |
| 352 | StringSpan intermediateDirectory; |
| 353 | if (not environment.get("SC_ZLIB_FILC_SOURCE_DIR", sourceDirectory) or sourceDirectory.isEmpty()) |
| 354 | { |
| 355 | return Result(true); |
| 356 | } |
| 357 | SC_TRY_MSG(environment.get("SC_ZLIB_FILC_OUTPUT_DIR", outputDirectory) and not outputDirectory.isEmpty(), |
| 358 | "SC_ZLIB_FILC_OUTPUT_DIR is required when SC_ZLIB_FILC_SOURCE_DIR is set"); |
| 359 | SC_TRY_MSG(environment.get("SC_ZLIB_FILC_INTERMEDIATE_DIR", intermediateDirectory) and |
| 360 | not intermediateDirectory.isEmpty(), |
| 361 | "SC_ZLIB_FILC_INTERMEDIATE_DIR is required when SC_ZLIB_FILC_SOURCE_DIR is set"); |
| 362 | |
| 363 | Project project = {ZLIB_FILC_PROJECT_NAME, TargetType::SharedLibrary}; |
| 364 | project.setRootDirectory(sourceDirectory); |
| 365 | SC_TRY(project.targetName.assign("libz")); |
| 366 | |
| 367 | project.addPresetConfiguration(Configuration::Preset::Debug, parameters); |
| 368 | project.addPresetConfiguration(Configuration::Preset::Release, parameters); |
| 369 | for (Configuration& configuration : project.configurations) |
| 370 | { |
| 371 | SC_TRY(configuration.outputPath.assign(outputDirectory)); |
| 372 | SC_TRY(configuration.intermediatesPath.assign(intermediateDirectory)); |
| 373 | SC_TRY(configuration.compile.defines.push_back("ZEXPORT=__attribute__((visibility(\"default\")))")); |
| 374 | SC_TRY(configuration.compile.defines.push_back("ZEXPORTVA=__attribute__((visibility(\"default\")))")); |
| 375 | SC_TRY(configuration.compile.defines.push_back("HAVE_UNISTD_H")); |
| 376 | SC_TRY(configuration.compile.defines.push_back("HAVE_HIDDEN")); |
| 377 | SC_TRY(configuration.compile.disableWarnings({"implicit-fallthrough"})); |
| 378 | configuration.link.enableDeadCodeStripping = false; |
| 379 | } |
| 380 | |
| 381 | static constexpr StringView sources[] = { |
| 382 | "adler32.c", "compress.c", "crc32.c", "deflate.c", "gzclose.c", "gzlib.c", "gzread.c", "gzwrite.c", |
| 383 | "infback.c", "inffast.c", "inflate.c", "inftrees.c", "trees.c", "uncompr.c", "zutil.c", |
| 384 | }; |
| 385 | for (const StringView source : sources) |
| 386 | { |
| 387 | SC_TRY(project.addFile(source)); |
| 388 | } |
| 389 | SC_TRY(project.addIncludePaths({"."})); |
| 390 | SC_TRY(workspace.projects.push_back(move(project))); |
| 391 | return Result(true); |
| 392 | } |
| 393 | |
| 394 | Result configureTests(const Parameters& parameters, Workspace& workspace) |
| 395 | { |