1// Copyright (C) 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/******************************************************************************
4 *   Copyright (C) 2008-2011, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *******************************************************************************
7 */
8
9#ifndef __PKG_GENC_H__
10#define __PKG_GENC_H__
11
12#include "unicode/utypes.h"
13#include "toolutil.h"
14
15#include "unicode/putil.h"
16#include "putilimp.h"
17
18/*** Platform #defines move here ***/
19#if U_PLATFORM_HAS_WIN32_API
20#ifdef __GNUC__
21#define WINDOWS_WITH_GNUC
22#else
23#define WINDOWS_WITH_MSVC
24#endif
25#endif
26
27
28#if !defined(WINDOWS_WITH_MSVC)
29#define BUILD_DATA_WITHOUT_ASSEMBLY
30#endif
31
32#ifndef U_DISABLE_OBJ_CODE /* testing */
33#if defined(WINDOWS_WITH_MSVC) || U_PLATFORM_IS_LINUX_BASED
34#define CAN_WRITE_OBJ_CODE
35#endif
36#if U_PLATFORM_HAS_WIN32_API || defined(U_ELF)
37#define CAN_GENERATE_OBJECTS
38#endif
39#endif
40
41#if U_PLATFORM == U_PF_CYGWIN || defined(CYGWINMSVC)
42#define USING_CYGWIN
43#endif
44
45/*
46 * When building the data library without assembly,
47 * some platforms use a single c code file for all of
48 * the data to generate the final data library. This can
49 * increase the performance of the pkdata tool.
50 */
51#if U_PLATFORM == U_PF_OS400
52#define USE_SINGLE_CCODE_FILE
53#endif
54
55/* Need to fix the file seperator character when using MinGW. */
56#if defined(WINDOWS_WITH_GNUC) || defined(USING_CYGWIN)
57#define PKGDATA_FILE_SEP_STRING "/"
58#else
59#define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING
60#endif
61
62#define LARGE_BUFFER_MAX_SIZE 2048
63#define SMALL_BUFFER_MAX_SIZE 512
64#define SMALL_BUFFER_FLAG_NAMES 32
65#define BUFFER_PADDING_SIZE 20
66
67/** End platform defines **/
68
69
70
71U_INTERNAL void U_EXPORT2
72printAssemblyHeadersToStdErr(void);
73
74U_INTERNAL UBool U_EXPORT2
75checkAssemblyHeaderName(const char* optAssembly);
76
77U_INTERNAL void U_EXPORT2
78writeCCode(const char *filename, const char *destdir, const char *optName, const char *optFilename, char *outFilePath);
79
80U_INTERNAL void U_EXPORT2
81writeAssemblyCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optFilename, char *outFilePath);
82
83U_INTERNAL void U_EXPORT2
84writeObjectCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optMatchArch, const char *optFilename, char *outFilePath);
85
86#endif
87