Skip to content

Commit 2f7c720

Browse files
authored
Merge pull request #638 from Niko-Klaiber/add_c_generator
Add a generator for C
2 parents 5978f98 + 70b0418 commit 2f7c720

File tree

13 files changed

+4982
-13
lines changed

13 files changed

+4982
-13
lines changed

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ if(NOT DEFINED CMAKE_CXX_EXTENSIONS)
5252
set(CMAKE_CXX_EXTENSIONS OFF)
5353
endif()
5454

55+
if(NOT DEFINED CMAKE_C_STANDARD)
56+
set(CMAKE_C_STANDARD 11)
57+
endif()
58+
59+
if(NOT DEFINED CMAKE_C_EXTENSIONS)
60+
set(CMAKE_C_EXTENSIONS OFF)
61+
endif()
62+
5563
if(SBE_TESTS)
5664
set(SBE_THIRDPARTY_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/thirdparty")
5765

@@ -121,13 +129,16 @@ add_custom_target(sbe-jar
121129
)
122130

123131
set(CODEC_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
132+
set(C_CODEC_TARGET_DIR "${CODEC_TARGET_DIR}/c")
133+
set(CXX_CODEC_TARGET_DIR "${CODEC_TARGET_DIR}/cpp")
124134
set(CODEC_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/resources")
125135
set(CODEC_PERF_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-benchmarks/src/main/resources")
126136
set(CODEC_EXAMPLES_SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sbe-samples/src/main/resources")
127137

128138
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/main/cpp)
129139

130140
if(SBE_TESTS)
141+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/c)
131142
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sbe-tool/src/test/cpp)
132143
endif()
133144

sbe-benchmarks/src/main/cpp/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ endif ()
2929
set(SRCS_BENCHLET_MAIN benchlet-main.cpp)
3030

3131
set(GENERATED_CODECS
32-
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
33-
${CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
32+
${CXX_CODEC_TARGET_DIR}/uk_co_real_logic_sbe_examples_car
33+
${CXX_CODEC_TARGET_DIR}/uk_co_real_logic_sbe_samples_fix
3434
)
3535

3636
set(SBE_CAR_SCHEMA ${CODEC_PERF_SCHEMA_DIR}/car.xml)
@@ -39,15 +39,15 @@ set(SBE_MD_SCHEMA ${CODEC_PERF_SCHEMA_DIR}/fix-message-samples.xml)
3939
add_custom_command(
4040
OUTPUT ${GENERATED_CODECS}
4141
DEPENDS ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA} sbe-jar ${SBE_JAR}
42-
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
42+
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CXX_CODEC_TARGET_DIR} -Dsbe.target.language="cpp" -jar ${SBE_JAR} ${SBE_CAR_SCHEMA} ${SBE_MD_SCHEMA}
4343
)
4444
add_custom_target(perf_codecs DEPENDS ${GENERATED_CODECS})
4545

4646
add_executable(benchlet-sbe-car-runner ${SRCS_BENCHLET_MAIN} CarBench.cpp)
47-
target_include_directories(benchlet-sbe-car-runner PRIVATE ${CODEC_TARGET_DIR})
47+
target_include_directories(benchlet-sbe-car-runner PRIVATE ${CXX_CODEC_TARGET_DIR})
4848
target_link_libraries(benchlet-sbe-car-runner sbe)
4949
add_executable(benchlet-sbe-md-runner ${SRCS_BENCHLET_MAIN} MarketDataBench.cpp)
50-
target_include_directories(benchlet-sbe-md-runner PRIVATE ${CODEC_TARGET_DIR})
50+
target_include_directories(benchlet-sbe-md-runner PRIVATE ${CXX_CODEC_TARGET_DIR})
5151
target_link_libraries(benchlet-sbe-md-runner sbe)
5252
add_dependencies(benchlet-sbe-md-runner perf_codecs)
5353
add_dependencies(benchlet-sbe-car-runner perf_codecs)

sbe-samples/src/main/cpp/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,23 @@
1717
find_package(Java REQUIRED)
1818

1919
set(GENERATED_CODECS
20-
${CODEC_TARGET_DIR}/baseline
20+
${CXX_CODEC_TARGET_DIR}/baseline
2121
)
2222

2323
set(EXAMPLES_SCHEMA ${CODEC_EXAMPLES_SCHEMA_DIR}/example-schema.xml)
2424

2525
add_custom_command(
2626
OUTPUT ${GENERATED_CODECS}
2727
DEPENDS ${EXAMPLES_SCHEMA} sbe-jar ${SBE_JAR}
28-
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CODEC_TARGET_DIR} -Dsbe.generate.ir=true -Dsbe.target.language=cpp -Dsbe.xinclude.aware=true -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
28+
COMMAND ${Java_JAVA_EXECUTABLE} -Dsbe.output.dir=${CXX_CODEC_TARGET_DIR} -Dsbe.generate.ir=true -Dsbe.target.language=cpp -Dsbe.xinclude.aware=true -jar ${SBE_JAR} ${EXAMPLES_SCHEMA}
2929
)
3030
add_custom_target(examples_codecs DEPENDS ${GENERATED_CODECS})
3131

3232
add_executable(GeneratedStubExample GeneratedStubExample.cpp)
33-
target_include_directories(GeneratedStubExample PRIVATE ${CODEC_TARGET_DIR})
33+
target_include_directories(GeneratedStubExample PRIVATE ${CXX_CODEC_TARGET_DIR})
3434
target_link_libraries(GeneratedStubExample sbe)
3535
add_executable(OtfExample OtfExample.cpp)
36-
target_include_directories(OtfExample PRIVATE ${CODEC_TARGET_DIR})
36+
target_include_directories(OtfExample PRIVATE ${CXX_CODEC_TARGET_DIR})
3737
target_link_libraries(OtfExample sbe)
3838

3939
add_dependencies(GeneratedStubExample examples_codecs)

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/TargetCodeGeneratorLoader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package uk.co.real_logic.sbe.generation;
1717

1818
import org.agrona.generation.PackageOutputManager;
19+
import uk.co.real_logic.sbe.generation.c.CGenerator;
20+
import uk.co.real_logic.sbe.generation.c.COutputManager;
1921
import uk.co.real_logic.sbe.generation.cpp.CppGenerator;
2022
import uk.co.real_logic.sbe.generation.cpp.NamespaceOutputManager;
2123
import uk.co.real_logic.sbe.generation.golang.GolangGenerator;
@@ -42,6 +44,14 @@ public CodeGenerator newInstance(final Ir ir, final String outputDir)
4244
}
4345
},
4446

47+
C()
48+
{
49+
public CodeGenerator newInstance(final Ir ir, final String outputDir)
50+
{
51+
return new CGenerator(ir, new COutputManager(outputDir, ir.applicableNamespace()));
52+
}
53+
},
54+
4555
CPP()
4656
{
4757
public CodeGenerator newInstance(final Ir ir, final String outputDir)

0 commit comments

Comments
 (0)