1 // © 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 
71 U_CAPI void U_EXPORT2
72 printAssemblyHeadersToStdErr(void);
73 
74 U_CAPI UBool U_EXPORT2
75 checkAssemblyHeaderName(const char* optAssembly);
76 
77 U_CAPI void U_EXPORT2
78 writeCCode(
79     const char *filename,
80     const char *destdir,
81     const char *optName,
82     const char *optFilename,
83     char *outFilePath,
84     size_t outFilePathCapacity);
85 
86 U_CAPI void U_EXPORT2
87 writeAssemblyCode(
88     const char *filename,
89     const char *destdir,
90     const char *optEntryPoint,
91     const char *optFilename,
92     char *outFilePath,
93     size_t outFilePathCapacity);
94 
95 U_CAPI void U_EXPORT2
96 writeObjectCode(
97     const char *filename,
98     const char *destdir,
99     const char *optEntryPoint,
100     const char *optMatchArch,
101     const char *optFilename,
102     char *outFilePath,
103     size_t outFilePathCapacity,
104     UBool optWinDllExport);
105 
106 #endif
107